Django重定向将URL添加到前一个URL

时间:2016-02-16 11:42:49

标签: python django

我正在尝试使用/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'),

我做错了什么?

2 个答案:

答案 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()函数。