2013-01-13 27 views
0

我试图通过为什么我的网址模板标记错误?

{% url 'session_views.login_user' %} 

我urls.py来检索模板的视图的URL看起来像

从django.conf.urls.defaults导入*

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

看看错误Reverse for ''session_views.login_user'',它有两组单引号。不要使用模板中的引号 - 它应该阅读:

{% url session_views.login_user %}

或者你能说出你的意见 - 之后,你就可以通过名字来称呼他们,那就需要加引号:

urls.py:

URL模式=模式( 'myappname',

#映入眼帘的是主页上的用户(R '^ $', 'session_views.index',名字=” index_view“),

#会议(R '^登录/ $?', 'session_views.login_user',名字= “login_user”),)

模板网址相反:

{% url "login_user" %}

编辑:

看到Tomita's答案后,我可能误解了这个问题。我以为你试图检索URL,因此你可能试图将URL作为一个变量来检索。我的回答适用于跟随网址,如<a href="{% url session_views.login_user %}"....。以防万一,我会离开它。

+1

+1,没有你的回答是正确的。我正在用另一种选择来补充你的答案。他可以通过<1.5语法修复它,或者通过加载1.5语法来修复它。 –

2

您可能正在查看更改URL标记功能的开发分支文档。

对于django < 1.5,您应该遵循相应的文档,或者通过加载未来的url标签来验证您的代码。

{% load url from future %} 

在Django的1.5,网址模板标签的行为会发生变化, 第一个参数被拍成上下文变量,而不是 是一个特殊的情况下不带引号的常量。这将允许url标记 使用上下文变量作为要颠倒的URL名称的值。

为了提供前向兼容性路径,Django 1.3提供了一个未来兼容性库 - 将来 - 实现新的 行为的 。要使用此库,请使用url标记在任何 模板的顶部添加一个加载调用,然后用引号将第一个参数包装为url标记 。例如:

{%load url from future%} {%url'myapp:view-name'%}新库 也放弃了对用于将参数分隔到 URL模板标记的逗号语法的支持。

在Django 1.5中,旧行为将被替换为未来标记库提供的行为 。使用新的语法将现有模板迁移到 。

相关问题