我有一个项目需要将旧网址重定向到新网址(我需要保留一段时间)... 我正在使用RedirectView类来执行此操作,但我必须设置硬编码的URL。
我的代码是这样的:
class LegacyParlamentarDetailRedirectView(RedirectView):
permanent = True
url = '/parlamentar/%s'
def get(self, request, *args, **kwargs):
pk = request.GET.get('cod_parlamentar', '')
self.url = self.url % (pk)
return super(LegacyParlamentarDetailRedirectView, self).get(self, request, *args, **kwargs)
我想要做的是使用pattern_name属性,所以我不必编写url,但我需要将变量pk添加到kwargs列表中(如下所示):
class LegacyParlamentarDetailRedirectView(RedirectView):
permanent = True
pattern_name = 'parlamentar_detail'
def get(self, request, *args, **kwargs):
kwargs['pk'] = request.GET.get('cod_parlamentar', '')
return super(LegacyParlamentarDetailRedirectView, self).get(self, request, *args, )
任何人都可以帮助我吗?
答案 0 :(得分:1)
您在方法签名中包含self
,但在调用方法时则不包括。
如果你想将pk
添加到现有的kwargs,那么你应该这样做:
def get(self, request, *args, **kwargs):
kwargs['pk'] = request.GET.get('cod_parlamentar', '')
return super(LegacyParlamentarDetailRedirectView, self).get(request, *args, **kwargs)
如果您想忽略现有的kwargs,那么您应该将其更改为:
def get(self, request, *args, **kwargs):
kwargs = {'pk': request.GET.get('cod_parlamentar', '')}
return super(LegacyParlamentarDetailRedirectView, self).get(request, *args, **kwargs)
请注意,当GET参数中缺少cod_parlamentar
时,您需要处理错误。
根据您展示的代码,我认为如果您改为get_redirect_url
而更加清楚:
from django.urls import reverse
# from django.core.urlresolvers import reverse # Django 1.9 and earlier
class LegacyParlamentarDetailRedirectView(RedirectView):
permanent = True
def get_redirect_url(self):
return reverse('parlamentar_detail', kwargs={'pk': self.request.GET.get('cod_parlamentar', ''})