如何在Django的URL中传递特殊字符 - python

假设我要在url中传递用户名:

username  = '[email protected]'

因此,在网址中,如下所示:

url(r'(?P<user_name>\w+)/$', 'user_related.views.profile', name='profile'),

并在views.py中获取该用户:

def profile(request, user_name):
    user = User.objects.get(username=user_name)

    return render(request, 'user_profile.html', {'user':user})

但是我得到一个错误:

User matching query does not exist.

因为django自动将@转换为%40。如何将实际的username传递给视图?请帮我解决这个问题。谢谢!

python大神给出的解决方案

使用标准urllib模块中的unquote函数:

from urllib import unquote

user = User.objects.get(username=unquote(user_name))

顺便说一句,据我了解,您的url()中的正则表达式应为[\w@%.]+。普通\w+[email protected]kakar%40gmail.com不匹配。