0

我正在尝试通过以下方式检索模板中视图的 URL

{% url 'session_views.login_user' %}

我的 urls.py 看起来像

从 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.

为什么我会犯错?login_user我在 session_views.py 中明确定义了一个视图。

4

2 回答 2

2

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

{% url session_views.login_user %}

或者您可以命名您的视图 - 之后您可以通过名称调用它们,并且需要引号:

网址.py:

urlpatterns = patterns('myappname',

# 在主页上问候用户。(r'^$', 'session_views.index', name="index_view"),

# 会话 (r'^login/?$', 'session_views.login_user', name="login_user"), )

模板网址反向:

{% url "login_user" %}

编辑:

看到Tomita's答案后,我可能误解了这个问题。我以为您正在尝试按照以下方式检索 URL,并且您可能正在尝试将 url 作为变量检索。我的回答适用于跟随 URL,如<a href="{% url session_views.login_user %}"..... 以防万一,我会离开它。

于 2013-01-13T22:19:09.207 回答
2

您可能正在查看 dev 分支文档,它更改了 URL 标记功能。

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

{% load url from future %} 

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

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

{% load url from future %} {% url 'myapp:view-name' %} 新库也不再支持逗号语法来分隔 url 模板标签的参数。

在 Django 1.5 中,旧的行为将被未来标签库提供的行为所取代。迁移现有模板以使用新语法。

于 2013-01-13T22:25:04.243 回答