繁体   English   中英

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将为您解码网址。 当你访问self.kwargs['name'] ,它将是'ABCD|1234' ,而不是'ABCD%7C1234'

但是,您有一个单独的问题。 您当前的正则表达式组[\\w-]+仅匹配大写字母AZ,小写字母az,数字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")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM