2017-10-06 40 views
0

你好,我想将网址重定向像/{category}/{sub_category}/{category}/但RedirectView的希望解决与两个子类别和类别的关键字参数的URLDjango的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

当您使用pattern_name,Django会尝试用相同的指定参数和kwargs扭转为对视图进行传递。这并不为你工作,因为你要重定向到category视图只需要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'],)) 

然后使用您的网址,而不是RedirectViewCategoryRedirectView

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

请注意,我删除了斜杠。你只需要它你使用的是include()而没有斜线。你绝对不需要在根URL中的前导斜杠。

+0

这是我实现,但希望有一个更好的方法方式:/感谢清理出来。 – EralpB