如何在django中的URL中传递特殊字符

Kak*_*kar 2 python django django-urls

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

username  = 'kakar@gmail.com'
Run Code Online (Sandbox Code Playgroud)

所以在网址中,它是这样的:

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

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

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

    return render(request, 'user_profile.html', {'user':user})
Run Code Online (Sandbox Code Playgroud)

但是我收到一个错误:

User matching query does not exist.
Run Code Online (Sandbox Code Playgroud)

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

cat*_*ran 5

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

from urllib import unquote

user = User.objects.get(username=unquote(user_name))
Run Code Online (Sandbox Code Playgroud)

顺便说一句,据我所知,url()中的正则表达式应该是[\w@%.]+.平原\w+不匹配kakar@gmail.comkakar%40gmail.com.

  • 请注意,在 Python3 中,unquote 现在位于 urllib.parse,因此如果使用 Python3,请将 `from urllib import unquote` 替换为 `from urllib.parse import unquote` (3认同)