gpt4 book ai didi

python - 如何编辑 RedirectView 的 kwargs?

转载 作者:太空宇宙 更新时间:2023-11-03 15:17:29 26 4
gpt4 key购买 nike

我有一个项目需要将旧网址重定向到新网址(我需要将它们保留一段时间)...我使用 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, )

谁能帮我吗?

最佳答案

您在方法签名中包含 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', ''})

关于python - 如何编辑 RedirectView 的 kwargs?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43770284/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com