Django URL模式 - 带斜杠的参数

1 投票
2 回答
4694 浏览
提问于 2025-04-17 04:53

我该如何为两个参数创建一个网址模式,其中第一个参数的内容中包含一个斜杠?

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')

撰写回答