未找到末尾带有编号的视图的视图
Posted
技术标签:
【中文标题】未找到末尾带有编号的视图的视图【英文标题】: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"),
然后它工作正常。有人知道为什么吗?
【问题讨论】:
【参考方案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
以上是关于未找到末尾带有编号的视图的视图的主要内容,如果未能解决你的问题,请参考以下文章