【问题标题】:Django Template Reverse URL Resolution Not WorkingDjango 模板反向 URL 解析不起作用
【发布时间】:2013-01-02 22:03:46
【问题描述】:

我的项目的 urls.py 中有以下内容:

urlpatterns = patterns('',
url(r'^watches/(?P<object_id>\d+)/$', list_detail.object_detail, watch_detail, name='watch_detail'),
 )

但是,模板中的以下行返回错误:

<li><a href ="{% url 'watch_detail' 1 %}">A link</a></li>

它返回此错误:

NoReverseMatch 在 /watches/

未找到带有参数“(1,)”和关键字参数“{}”的“watch_detail”的反向操作。

这让我很困惑,因为如果我运行“manage.py shell”,我会得到以下结果:

>>> from django.core.urlresolvers import reverse
>>> reverse("watch_detail", args=(1,))
'/watches/1/'
>>>

有什么可能出错的建议吗?

谢谢。

【问题讨论】:

    标签: python django templates url


    【解决方案1】:

    您的 url conf (watch_detail) 中的第三个参数是什么?查看docs,你的第三个参数应该是字典。

    你的 conf 文件应该如下所示吗? -

    urlpatterns = patterns('',
        url(r'^watches/(?P<object_id>\d+)/$', 'list_detail.object_detail.watch_detail', name='watch_detail'),
    )
    

    (假设您的视图位于list_detail/object_detail/watch_detail)。

    为了澄清,你也可以传递一个视图函数而不是一个字符串路径,所以你的 url conf 可以写成 -

    from your_app.your_module import watch_detail
    
    urlpatterns = patterns('',
        url(r'^watches/(?P<object_id>\d+)/$', watch_detail, name='watch_detail'),
    )
    

    第二个参数watch_detail 是您的视图函数。

    编辑

    如果 watch_detail 真的是一个参数,那么你需要将它包含在模板反向函数中 -

    {% url 'watch_detail', 1, watch_detail %}
    

    【讨论】:

    • 感谢您的回复,但我不确定是否可以解决。我不认为我的 conf 文件应该如下所示,因为 object_detail 是一个通用函数,它以字典 watch_detail 作为参数。 (我得到的第三个参数(watch_detail)是一个字典。)
    • 尝试将 watch_detail 参数添加到您的模板反向函数中。您收到的错误消息说 reverse 函数没有得到任何 kwargs。所以 - {% url 'watch_detail', 1, watch_detail %}
    • 如果您为您的应用程序使用命名空间,那么不要忘记在 url 中包含它,例如{% url 'namespace:viewmethod' %}
    猜你喜欢
    • 2013-02-28
    • 2012-04-19
    • 1970-01-01
    • 2011-04-28
    • 1970-01-01
    • 2014-07-20
    • 2017-08-03
    • 2013-08-23
    • 2019-12-15
    相关资源
    最近更新 更多