【问题标题】:Django url pattern - parameter with forward slashDjango url 模式 - 带有正斜杠的参数
【发布时间】:2011-12-14 02:57:06
【问题描述】:

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

da/ta1=/data2

最初我有以下模式:

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

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

【问题讨论】:

    标签: python regex django


    【解决方案1】:

    假设您自己构建 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')
    

    【讨论】:

    • 谢谢你,我现在唯一的问题是模式仍然不匹配,我怎样才能让模式在匹配时包含 %2F?
    【解决方案2】:

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

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

    在视图本身中:

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

    【讨论】:

      猜你喜欢
      • 2011-09-13
      • 2015-09-07
      • 1970-01-01
      • 2012-04-22
      • 2015-03-06
      • 2012-11-16
      • 2011-05-25
      • 1970-01-01
      相关资源
      最近更新 更多