2017-10-06 92 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