0

因为我可以做到以下几点:

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

第一个是当前 url,我想使用重定向到第二个 url 配置。

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

因为我可以将其传递给 url 的配置。谢谢。

4

1 回答 1

2

嗨,我有一个类似的问题,我想动态重定向,同时保持 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 构建 self url。我没有在 urls.py 文件中找到这样做的方法

于 2014-09-24T14:21:24.863 回答