从 Django 模板获取 URL 的第一部分
我使用 request.path
来获取当前 URL。例如,如果当前 URL 是“/test/foo/baz”,我想知道它是否以字符串序列开头,比如 /test。如果我尝试使用:
{% 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。
I use request.path
to obtain the current URL. For example if the current URL is "/test/foo/baz" I want to know if it starts with a string sequence, let's say /test. If I try to use:
{% if request.path.startswith('/test') %}
Test
{% endif %}
I get an error saying that it could not parse the remainder of the expression:
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
One solution would be to create a custom tag to do the job. Is there something else existing to solve my problem? The Django version used is 1.0.4.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
您可以使用切片过滤器获取网址的第一部分
现在无法尝试此操作,并且不知道过滤器是否在“if”标签内工作,
如果不起作用,您可以使用“with”标签
You can use the slice filter to get the first part of the url
Cannot try this now, and don't know if filters work inside 'if' tag,
if doesn't work you can use the 'with' tag
您可以通过使用内置
in
标记检查成员身份来获得相同的结果,而不是使用startswith 检查前缀。这将绕过字符串不严格位于开头的情况,但您可以简单地避免这些类型的 URL。
Instead of checking for the prefix with startswith, you can get the same thing by checking for membership with the builtin
in
tag.This will pass cases where the string is not strictly in the beginning, but you can simply avoid those types of URLs.
您无法从 django 模板中将参数传递给普通的 python 函数。为了解决您的问题,您需要一个自定义模板标签: http://djangosnippets.org/snippets/806/
You can not pass arguments to normal python functions from within a django template. To solve you problem you will need a custom template tag: http://djangosnippets.org/snippets/806/
根据设计,您不能使用 Django 模板中的参数调用函数。
一种简单的方法是将您需要的状态放入请求上下文中,如下所示:
然后您将拥有一个可以在模板中使用的
is_test
变量:此方法还具有抽象确切路径的优点在模板中测试('/test'),这可能会有所帮助。
You can't, by design, call functions with arguments from Django templates.
One easy approach is to put the state you need in your request context, like this:
Then you will have an
is_test
variable you can use in your template:This approach also has the advantage of abstracting the exact path test ('/test') out of your template, which may be helpful.
从Django 文档的此页面中的哲学部分:
您确实应该编写一个自定义标记或传递一个变量来通知模板路径是否以
'/test'
开头From the Philosophy section in this page of Django docs:
You really should write a custom tag or pass a variable to inform the template if the path starts with
'/test'
在这种情况下我使用上下文处理器:
*。使用以下内容创建文件 core/context_processors.py:
*. 将 settings.py 中的记录添加
到 TEMPLATES 'context_processors' 列表中。
*。 使用。
在任何模板中
I use context processor in such case:
*. Create file core/context_processors.py with:
*. Add record:
in settings.py to TEMPLATES 'context_processors' list.
*. Use
in any template.