将Django RedirectView与命名的url动态一起使用

时间:2013-05-14 23:51:46

标签: django url redirect

我可以做到以下几点:

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,))

因为我可以将其传递给网址的配置。感谢。

1 个答案:

答案 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文件中找到这样做的方法