Django 重定向与 kwargs 不工作

Django redirect with kwargs not working

我看过类似的问题,这不是重复的。我有一个简单的重定向,它接收不起作用的 kwargs,我不知道为什么。 docs举个例子:

def my_view(request):
    ...
    return redirect('some-view-name', foo='bar')

这正是我正在做的事情:

...
...
return redirect('perfiles:despues_contacto', razon_contacto='donacion', correo_contacto='thrall@gmail.com')

url 模式如下所示:

url(r'^gracias_por_contactarnos/(?P<razon_contacto>[-\w]+)/(?P<correo_contacto>[-\w]+)/$',
        views.DespuesContacto.as_view(), name="despues_contacto"),

?¿ 我错过了什么?也许这是显而易见的……但我的眼睛已经厌倦了寻找错误。是正则表达式吗?

好的,所以正则表达式是错误的,它不接受“@”或“.”。 ... 并且因为如 this SO 问题中所述,将正则表达式用于电子邮件真的很困难。我处理了电子邮件,然后将其发送到 url,并再次手动构建它:

email_for_url = email.split(".")[0].replace("@", "-")    
return redirect('perfiles:despues_contacto', razon_contacto=razon_contacto, correo_contacto=email_for_url)

...
def get_context_data(self, **kwargs):
   ....
    email = kwargs["email"].replace("-", "@") + ".com"

.很简单。您只需将 url 的正则表达式更改为 undestand 参数具有 @ 字符。

urls.py

    url(r'^gracias_por_contactarnos/(?P<razon_contacto>[-\w]+)/(?P<correo_contacto>[\w\-@.]+)/$',
    views.DespuesContacto.as_view(), name='despues_contacto'),