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

发布于 2024-12-12 01:22:45 字数 240 浏览 0 评论 0原文

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

da/ta1=/data2

最初我有以下模式:

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

但是,由于第一个正斜杠是参数数据的一部分,因此该模式不匹配。

How can I create a url pattern for two parameters where the first parameter contains a forward slash as part of its contents:

da/ta1=/data2

Intially I had the following pattern:

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

However this pattern does not match because of the first forward slash which is part of the parameter data.

, 'view'),

However this pattern does not match because of the first forward slash which is part of the parameter data.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

尴尬癌患者 2024-12-19 01:22:45

假设您自己构造网址,您可以使用 quote_plus< /a> 对内联正斜杠进行编码:

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

Assuming you construct the url yourself, you could use quote_plus to encode the inline forward slash:

>>> '/'.join([urllib.quote_plus(d) for d in ['da/ta1', 'data2']])
'da%2Fta1/data2'

And to decode:

>>> urllib.unquote_plus('da%2Fta1/data2')
'da/ta1/data2'

To then match your data, your pattern could be changed to the construct found below. For the first parameter, this matches everything up to the = character; the second parameter is expected to be alphanumerical.

(r'^view/(?P<item_id>[^=]+)=/(?P<changekey>\w+)/
, 'view')
浅唱ヾ落雨殇 2024-12-19 01:22:45

Django Admin 确实对参数中的斜杠有同样的问题。为了解决这个问题,Django 使用自己的引用函数:

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

在视图本身中:

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

Django Admin does have the same problem with slashes in parameters. To fix this, Django uses its own quote function:

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

In the view itself:

unquote(self.kwargs.get('param1'))
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文