我正在尝试使用/alerta/3304557/
调用从网址/alerta/rio
重定向到一个redirect('/alerta/rio/')
。 <{1}}在手动输入时效果很好。
但重定向正在向/alerta/rio/
发出重定向,这显然会导致404错误,因为该网址不存在。
相关代码行:
http://localhost:8000/alerta/3304557/alerta/rio
url(r'^alerta/rio/$', AlertaPageView.as_view(), name='mrj'),
url(r'^alerta/(?P<geocodigo>\d{7})/$', AlertaPageViewMunicipio.as_view(), name='alerta_cidade'),
我做错了什么?
答案 0 :(得分:2)
您必须在dispatch method中执行重定向:
def dispatch(self, request, *args, **kwargs):
municipio_gc = kwargs.get('geocodigo', 0)
if int(municipio_gc) == 3304557: # Rio de Janeiro
args = tuple([])
return redirect('/alerta/rio/')
return super(AlertaPageViewMunicipio, self).dispatch(request, *args, **kwargs)
注意:您的'/alerta/rio/'
视图不接受任何参数,因此避免在执行重定向时传递* args和** kwargs 。
<强>更新强>
正如 @Alasdair 指出,从 ** kwargs 获取geocodigo
而不是调用get_context_data
来访问context['geocodigo']
。
答案 1 :(得分:0)
你应该小心在get_context_data()中返回一个重定向,它希望返回一个dict()。尝试将该逻辑移动到get()函数。