如何编辑 RedirectView 的 kwargs?
How can I edit the kwargs of a RedirectView?
我有一个项目需要将遗留 url 重定向到新的 url(我需要将它们保留一段时间)...
我正在使用 RedirectView class 来执行此操作,但我必须设置 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, )
谁能帮帮我?
您在方法签名中包含 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', ''})
我有一个项目需要将遗留 url 重定向到新的 url(我需要将它们保留一段时间)... 我正在使用 RedirectView class 来执行此操作,但我必须设置 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, )
谁能帮帮我?
您在方法签名中包含 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', ''})