2011-03-18 74 views
11

的URL的第一部分,我用request.path获取当前的URL。例如,如果当前URL为“/测试/富/巴兹”我想知道,如果它与一个字符串序列开始,让我们说/测试。如果我尝试使用:获得Django的模板

{% if request.path.startswith('/test') %} 
    Test 
{% endif %} 

我得到一个错误说,它无法解析表达式的剩余部分:

Could not parse the remainder: '('/test')' from 'request.path.startswith('/test')' 
Request Method: GET 
Request URL: http://localhost:8021/test/foo/baz/ 
Exception Type: TemplateSyntaxError 
Exception Value:  
Could not parse the remainder: '('/test')' from 'request.path.startswith('/test')' 
Exception Location: C:\Python25\lib\site-packages\django\template\__init__.py in __init__, line 528 
Python Executable: C:\Python25\python.exe 
Python Version: 2.5.4 
Template error 

一个解决方案是创建一个自定义标签来完成这项工作。还有什么可以解决我的问题吗?使用的Django版本是1.0.4。

回答

3

你不能按照设计,调用函数与Django模板参数。

一个简单的方法是把你在你的要求范围内所需要的状态,就像这样:

def index(request): 
    c = {'is_test' : request.path.startswith('/test')} 
    return render_to_response('index.html', c, context_instance=RequestContext(request)) 

然后,你将有一个is_test变量,你可以在你的模板中使用:

{% if is_test %} 
    Test 
{% endif %} 

这种方法也有抽象的确切路径测试(“/测试”),你的模板,它可能是有帮助的优势。

0

从哲学节在this page of Django docs

模板系统不会执行 任意Python表达式

你真的应该写一个自定义标签或传递一个变量,告知如果模板路径始于'/test'

55

您可以使用切片过滤器来获取网址的第一部分

{% if request.path|slice:":5" == '/test' %} 
    Test 
{% endif %} 

现在不能试试这个,不知道如果过滤器在里面工作“如果”的标签, 如果不工作,你可以使用“与”标签

{% with request.path|slice:":5" as path %} 
    {% if path == '/test' %} 
    Test 
    {% endif %} 
{% endwith %} 
+0

我得到'if'语句格式错误。 – Seitaridis 2011-03-21 15:02:24

+2

其对我的工作很好 – Ted 2012-01-17 09:00:50

+0

您的第一个解决方案正常工作! :) – 2014-08-10 18:13:16

22

不是检查的与startswith前缀,您可以通过内置的in标签入会检查得到同样的事情。

{% if '/test' in request.path %} 
    Test 
{% endif %} 

这将传递情况下字符串不是严格的开始,但你可以简单地避免这些类型的网址。

+0

这就是我想要的。谢谢!这里绝对是最好的答案。 – 2014-07-31 15:26:40

+6

如果我们需要查找我们是否在某个网站的某个部分,某些情况下无法使用。例如,我们需要找到我们在“课程”部分。 '/ courses/1 /' - OK,'/ login /?next =/courses/1 /' - 不行。 – Marboni 2015-02-17 18:39:12

0

我使用上下文处理器在这样的情况下:

*。与创建文件的核心/ context_processors.py:

def variables(request): 
     url_parts = request.path.split('/') 
     return { 
      'url_part_1': url_parts[1], 
     } 

*。在settings.py

'core.context_processors.variables', 

到模板“context_processors名单:添加记录。

*。在任何模板使用

{{ url_part_1 }}