Django url模式 - 带正斜杠的参数

时间:2011-10-24 12:50:29

标签: python regex django

如何为两个参数创建一个url模式,其中第一个参数包含正斜杠作为其内容的一部分:

da/ta1=/data2

最初我有以下模式:

(r'^view/(?P<item_id>\w+=)/(?P<changekey>\w+)/$', 'view'),

但是这种模式不匹配,因为第一个正斜杠是参数数据的一部分。

2 个答案:

答案 0 :(得分:2)

假设您自己构建了url,可以使用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')

答案 1 :(得分:1)

Django Admin在参数斜杠方面遇到同样的问题。为了解决这个问题,Django使用自己的引用函数:

from django.contrib.admin.utils import quote
quote(param1)

在视图中:

unquote(self.kwargs.get('param1'))