我正在尝试通过
检索模板中视图的网址{% url 'session_views.login_user' %}
我的urls.py看起来像
来自django.conf.urls.defaults import *
urlpatterns = patterns('myappname',
# Greets user on the home page.
(r'^$', 'session_views.index'),
# Session
(r'^login/?$', 'session_views.login_user'),
)
但是,我收到以下错误。
TemplateSyntaxError at /
Caught NoReverseMatch while rendering:
Reverse for ''session_views.login_user'' with arguments '()'
and keyword arguments '{}' not found.
我为什么犯错?我在session_views.py中明确定义了一个名为login_user
的视图。
答案 0 :(得分:2)
查看错误Reverse for ''session_views.login_user''
,它有两组单引号。您不在模板中使用引号 - 它应显示为:
{% url session_views.login_user %}
或者您可以命名您的观点 - 之后您可以通过名称调用它们,并且它需要引号:
urls.py:
urlpatterns = patterns('myappname',
#在主页上问候用户。 (r'^ $','session_views.index',name =“index_view”),
#Session(r'^ login /?$','session_views.login_user',name =“login_user”),)
模板网址反向:
{% url "login_user" %}
编辑:
在看到Tomita's
回答后,我可能误解了这个问题。我以为您正在尝试检索URL,如下所示,您可能正在尝试将URL检索为变量。我的回答适用于跟踪网址,如<a href="{% url session_views.login_user %}"....
。为了以防万一,我会离开它。
答案 1 :(得分:2)
您可能正在查看dev分支文档,该文档会更改URL标记功能。
对于django&lt; 1.5,您应该遵循相应的文档,或者通过加载未来的url标记来证明您的代码。
{% load url from future %}
在Django 1.5中,url模板标记的行为将随之改变 第一个参数是一个上下文变量,而不是 是一个特殊情况下不加引号的常数。这将允许url标记 使用上下文变量作为要反转的URL名称的值。
为了提供前向兼容路径,Django 1.3提供了 未来的兼容性库 - 未来 - 实现新的 行为。要使用此库,请在任意位置的顶部添加加载调用 使用url标记的模板,并将第一个参数包装到url标记 在引号中。例如:
{%load url from future%} {%url'myapp:view-name'%}新库 还删除了对用于分隔参数的逗号语法的支持 网址模板标记。
在Django 1.5中,旧行为将被替换为行为 由未来的标签库提供。现有模板将迁移到 使用新语法。