【问题标题】:View not found for views with number at the end未找到末尾带有编号的视图的视图
【发布时间】:2017-02-24 05:35:53
【问题描述】:

我正在尝试像这样reverse

print reverse("shows-view")

这是在我的urls.py:

url(r'^shows/(\d+)$', views.show_details, name="shows-view"),

每当我尝试这样做时,它都会返回:

Reverse for 'shows-view' with arguments '()' and keyword arguments '{}' not found. 1 pattern(s) tried: ['shows/(\\d+)$']

但如果我尝试直接访问该页面 (http://localhost/shows/3333),那么它工作正常

但是如果我对像这样的其他视图做相反的事情:

print reverse("shows-default-view")

在同一 urls.py 文件中使用以下声明:

url(r'^shows/', views.popular, name="shows-default-view"),

然后它工作正常。有人知道为什么吗?

【问题讨论】:

    标签: python django python-2.7 django-templates django-views


    【解决方案1】:

    有问题的 URL 接受一个参数 (\d+),您没有传递您的 reverse 函数。试想:这是一个细节视图,但是你想显示哪个节目?

    要修复,请使用args 参数调用reverse

    reverse("shows-default-view", args=[1]) # to show show with id of 1
    

    一般来说,对于这样的 URL,建议有一个命名的捕获组:

    url(r'^shows/(?P<pk>\d+)$', views.show_details, name="shows-view")
    

    然后对reverse 的调用将是:

    reverse("shows-default-view", kwargs={'pk': 1})
    

    要在模板中使用reverse,只需将两个参数放在一起:

    {% url 'shows-view' 1 %}
    

    【讨论】:

    • 哦,这很有道理。我将如何在模板中传递这个参数?我这样做是因为{% url 'shows-default-view' %} 这样我就可以动态生成 URL
    • @JohnQ 在最后添加。更常见的情况是 id 不被硬编码,例如show.id 而不是 1
    猜你喜欢
    • 1970-01-01
    • 2021-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-05
    • 1970-01-01
    • 2014-07-29
    • 1970-01-01
    相关资源
    最近更新 更多