我可以做到以下几点:
My url config
url(r'^video/show/(?P<slug>[-\w]+).html$', VideoDetail.as_view(), name="video_detail"),
to:
url(r'^video/(?P<slug>[-\w]+)$', Video.as_view(), name="video_detail"),
第一个是当前网址,我想使用重定向到第二个网址配置。
class VideoRedirectView(RedirectView):
permanent = True
query_string = True
def get_redirect_url(self, slug):
video = get_object_or_404(Video, slug__exact=self.kwargs['slug'])
video.update_counter()
return reverse('video_detail', args=(slug,))
因为我可以将其传递给网址的配置。感谢。
答案 0 :(得分:1)
您好我有类似的问题,我希望动态重定向,同时保持kwargs。
之前我有一个网址:/ league / competition-name / video我希望所有这些请求都重定向到/ league / competition-name / all-video
在我的urls.py
中url(
r'^league/(?P<competition>[0-9A-Za-z-]+)/(?P<tab>all-video|latest-news)/$',
views.TabbedView.as_view(),
name='competition'
),
url(
r'^league/(?P<competition>[0-9A-Za-z-]+)/(?P<tab>video|latest)/$',
views.TabbedPageRedirectView.as_view(),
name='competition-redirect'
),
然后在我的views.py
中from django.views.generic.base import RedirectView
class TabbedPageRedirectView(RedirectView):
permanent = True
query_string = True
def get_redirect_url(self, *args, **kwargs):
if kwargs['tab'] == 'latest':
kwargs['tab'] = 'latest-news'
if kwargs['tab'] == 'video':
kwargs['tab'] = 'all-video'
path = self.request.path
path = path.replace('latest', 'latest-news')
path = path.replace('video', 'all-video')
self.url = path
return super(TabbedPageRedirectView, self).get_redirect_url(*args, **kwargs)
诀窍是从self.request.path构建自我URL。我没有在urls.py文件中找到这样做的方法