Django 中如何在 URL 路由中使用 Unicode 字符?
在 Django 中使用 Unicode 字符作为 URL 路由的一部分需要进行编码和解码操作,并且需要注意一些细节。
- 编码 Unicode 字符
在 URL 路由中使用 Unicode 字符时,需要将其进行编码才能被 URL 匹配正常。在 Django 中,可以使用 Python 标准库中的 urllib.parse.quote() 方法进行编码,例如:
from urllib.parse import quote url = '/hello/{}'.format(quote('皮蛋编程'))
- 解码 Unicode 字符
在 Django 视图函数中获取到 URL 路由中的 Unicode 字符时,需要对其进行解码才能得到正确的字符串。在 Django 中,可以使用 Python 标准库中的 urllib.parse.unquote() 方法进行解码,例如:
from urllib.parse import unquote def hello(request, name): name = unquote(name) return HttpResponse('Hello, {}!'.format(name))
在上面的例子中,name
参数是经过编码的 Unicode 字符,使用 unquote()
方法进行解码后得到正确的字符串。
需要注意的是,unquote()
方法只能解码经过 quote()
编码的字符串,如果 URL 路由中使用了其他编码方式,则需要使用相应的解码方法进行解码。
- 示例演示
假设我们要将下面的 URL 路径中的 Unicode 字符进行编码和解码:
/hello/皮蛋编程
示例代码如下:
from django.urls import path from urllib.parse import quote, unquote from django.http import HttpResponse def hello(request, name): name = unquote(name) return HttpResponse('Hello, {}!'.format(name)) encoded_name = quote('皮蛋编程') urlpatterns = [ path('hello/{}/'.format(encoded_name), hello), ]
在上面的代码中,我们使用 quote()
方法将 Unicode 字符编码成 %E7%9A%AE%E8%9B%8B%E7%BC%96%E7%A8%8B
,然后将其作为 URL 路由的一部分。在视图函数中使用 unquote()
方法将编码后的字符串解码成 Unicode 字符串。
相关文章