基于 Django 类的视图的反向 url

Posted

技术标签:

【中文标题】基于 Django 类的视图的反向 url【英文标题】:reverse urls for Django class based view 【发布时间】:2012-01-25 13:08:59 【问题描述】:

我正在尝试做类似的事情:

在 urls.py 中:

...
url(r'^(?P<pk>\d+)/$', VideoDetailView.as_view(), name='video_detail', kwargs='foo:'')
...

在views.py中

..
HttpResponseRedirect(reverse('video_detail', kwargs='pk': id, 'foo':'bar'))
...

但这似乎不起作用。我得到一个 使用参数“()”和关键字参数“'pk':13240L,'foo':'bar'未找到'video_detail'。

但是这确实有效:

....
HttpResponseRedirect(reverse('video_detail', kwargs='pk': id))
...

即。从反向调用中删除 foo: bar 。执行此操作并在反向 url 中传递额外参数的正确方法是什么?

【问题讨论】:

【参考方案1】:

reverse 是一个创建 URL 的函数。

因为您在 URL 模式中仅指定了 pk 模式,所以您只能使用 pk 作为 reverse 的参数(添加 foo 确实没有意义,因为生成的 url 正是任何foo 值都相同)。您可以将foo 添加到 URL 模式或创建多个命名 url,即:

url(r'^(?P<pk>\d+)/$', VideoDetailView.as_view(), name='video_detail', kwargs='foo':'')
url(r'^(?P<pk>\d+)/$', VideoDetailView.as_view(), name='video_detail2', kwargs='foo':'bar')

url(r'^(?P<pk>\d+)/(?P<foo>\w+)/$', VideoDetailView.as_view(), name='video_detail')

【讨论】:

以上是关于基于 Django 类的视图的反向 url的主要内容,如果未能解决你的问题,请参考以下文章

Django 基于类的视图上的 success_url 的反向抱怨循环导入

按函数名称的 Django 反向基于类的视图不起作用

Django--基于类的视图的 URL 缓存失败

带有 url 问题的基于 Django 类的视图

django.urls.exceptions.NoReverseMatch 基于类的列表视图

django url如何使用问号? (基于类的视图)