Django:如何解码 url 以获得变量值?

Django: How to decode the url to get the variable value?

我正在尝试做 django api。

这是urls.py

中的代码
url(r'^edit/(?P<name>[\w-]+)/$', UpdateView.as_view(), name="update")

views.py

class UpdateView(RetrieveUpdateView):
     queryset = Book.objects.all()
     serializer_class = BookUpdateSerializer
     lookup_field = "name"

name 变量可能包含“|”符号。

当我在浏览器中打开 URL 127.0.0.1:8000/api/edit/ABCD|1234 时,其中 ABCD|1234 是变量 name,url 会自动对其进行编码,并且它变成 127.0.0.1:8000/api/edit/ABCD%7C1234

在我的数据库中找不到这个名字。 我如何对其进行解码并从我的数据库中检索数据?

Django 将为您解码 url。当您访问 self.kwargs['name'] 时,它将是 'ABCD|1234',而不是 'ABCD%7C1234'

但是,您有一个单独的问题。您当前的正则表达式组 [\w-]+ 将仅匹配大写字母 A-Z、小写字母 a-z、数字 0-9、下划线 _ 和连字符 -。如果你想匹配像 | 这样的字符,你必须改变它。

您只需将 | 添加到群组即可:

# put | before - otherwise you have to escape hypen with \-
url(r'^edit/(?P<name>[\w|-]+)/$', UpdateView.as_view(), name="update")

或者,如果有很多其他字符要添加到组中,您可以匹配除正斜杠之外的任何字符:

url(r'^edit/(?P<name>[^/]+)/$', UpdateView.as_view(), name="update")