Python Django:如何解码url以获取变量值?
我正在尝试做django api 下面是url.py中的代码Python Django:如何解码url以获取变量值?,python,django,django-urls,Python,Django,Django Urls,我正在尝试做django api 下面是url.py中的代码 url(r'^edit/(?P<name>[\w-]+)/$', UpdateView.as_view(), name="update") name变量可能包含“|”符号 当我在浏览器中打开URL127.0.0.1:8000/api/edit/ABCD | 1234时,其中ABCD | 1234是变量name,URL将自动对其进行编码,并将其变成127.0.0.1:8000/api/edit/ABCD%7C1234 它无
url(r'^edit/(?P<name>[\w-]+)/$', UpdateView.as_view(), name="update")
name
变量可能包含“|”符号
当我在浏览器中打开URL127.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、下划线\u
和连字符-
。如果要匹配像|
这样的字符,则必须更改此选项
您只需将|
添加到组中即可:
# put | before - otherwise you have to escape hypen with \-
url(r'^edit/(?P<name>[\w|-]+)/$', UpdateView.as_view(), name="update")
#把|放在前面-否则你必须用\-
url(r'^edit/(?P[\w |-]+)/$),UpdateView.as_view(),name=“update”)
或者,如果有许多其他字符要添加到组中,则可以将除正斜杠以外的任何字符与以下字符进行匹配:
url(r'^edit/(?P<name>[^/]+)/$', UpdateView.as_view(), name="update")
url(r'^edit/(?P[^/]+)/$),UpdateView.as_view(),name=“update”)
我建议只需在允许的字符列表中添加
:r'^edit/(?P[\w-]+)/$”
非常感谢!这真的帮助了我。
url(r'^edit/(?P<name>[^/]+)/$', UpdateView.as_view(), name="update")