为什么我的网址模板标签错误?

时间:2013-01-13 21:49:45

标签: django

我正在尝试通过

检索模板中视图的网址
{% 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的视图。

2 个答案:

答案 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中,旧行为将被替换为行为   由未来的标签库提供。现有模板将迁移到   使用新语法。