Django URL模式 - 带斜杠的参数
我该如何为两个参数创建一个网址模式,其中第一个参数的内容中包含一个斜杠?
da/ta1=/data2
最开始我有以下这个模式:
(r'^view/(?P<item_id>\w+=)/(?P<changekey>\w+)/$', 'view'),
但是这个模式无法匹配,因为第一个斜杠是参数数据的一部分。
2 个回答
1
Django的管理后台在处理参数时也会遇到斜杠的问题。为了解决这个问题,Django使用了自己的一种引用函数:
from django.contrib.admin.utils import quote
quote(param1)
在视图函数里面:
unquote(self.kwargs.get('param1'))
2
假设你自己构建网址,你可以使用 quote_plus
来编码里面的斜杠:
>>> '/'.join([urllib.quote_plus(d) for d in ['da/ta1', 'data2']])
'da%2Fta1/data2'
然后要解码的话,可以用:
>>> urllib.unquote_plus('da%2Fta1/data2')
'da/ta1/data2'
接下来,为了匹配你的数据,你可以把模式改成下面的结构。第一个参数会匹配所有在 =
字符之前的内容;第二个参数则需要是字母和数字的组合。
(r'^view/(?P<item_id>[^=]+)=/(?P<changekey>\w+)/$', 'view')