Django RedirectView缺少变量

时间:2017-10-06 17:42:55

标签: django

您好我想将/{category}/{sub_category}等网址重定向到/{category}/,但RedirectView希望使用子类别和类别关键字参数解析网址

url(r'^/(?P<category_slug>[^\/]+)/$', CategoryView.as_view(), name='category'),

url(r'^/(?P<category_slug>[^\/]+)/(?P<another_parameter>[^\/]+)$',
    RedirectView.as_view(pattern_name='category')),

所以这不起作用,我认为默认应该忽略不需要的参数..

我正在django.urls.exceptions.NoReverseMatch:

使这项工作的最佳选择是什么?

1 个答案:

答案 0 :(得分:1)

当你使用pattern_name时,Django将尝试使用与传入视图相同的args和kwargs进行反转。这不适合您,因为您想要重定向到只需category的{​​{1}}视图。

您可以继承category_slug并覆盖RedirectView

get_success_url

然后在您的网址中使用from django.urls import reverse class CategoryRedirectView(RedirectView): def get_redirect_url(self): return reverse('category', args=(self.kwargs['category'],)) 而不是CategoryRedirectView

RedirectView

请注意,我已删除了前导斜杠。您只需要使用url(r'^(?P<category_slug>[^\/]+)/(?P<another_parameter>[^\/]+)$', CategoryRedirectView.as_view()), 而不使用尾部斜杠。你肯定不需要根网址中的前导斜杠。