Django 中如何在 URL 路由中使用 Unicode 字符?

2023-04-11 00:00:00 路由 字符 如何在

在 Django 中使用 Unicode 字符作为 URL 路由的一部分需要进行编码和解码操作,并且需要注意一些细节。

  1. 编码 Unicode 字符

在 URL 路由中使用 Unicode 字符时,需要将其进行编码才能被 URL 匹配正常。在 Django 中,可以使用 Python 标准库中的 urllib.parse.quote() 方法进行编码,例如:

from urllib.parse import quote

url = '/hello/{}'.format(quote('皮蛋编程'))
  1. 解码 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 路由中使用了其他编码方式,则需要使用相应的解码方法进行解码。

  1. 示例演示

假设我们要将下面的 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 字符串。

相关文章