【问题标题】:Handling '/' in url match in Django在 Django 中处理 url 匹配中的“/”
【发布时间】:2014-09-09 09:10:07
【问题描述】:

我是 Django 的新手。我在views.py中写了一个函数func()和对应的正则表达式来匹配urls.py中的url,如下所示:

   (r'callfunc/(?P<param1>(\w+|\d+|\-){0,50})/(?P<param2>(\w+|\d+|\-){0,50})/$', 'func')

问题是有时'/' 出现在param1 字符串中,然后正则表达式匹配在 urls.py 中失败,应用程序卡在匹配中。有什么方法可以正确处理,即使有任何 / 进入 param1,param1 也能正确设置?

【问题讨论】:

  • 将 \/ 添加到您的正则表达式以将其包含在匹配中。
  • 这行不通,因为 / 没有必要总是出现在参数中,它可能会出现,也可能不会出现,在这种情况下 url 将被错误地匹配。
  • 您可以添加? 使其成为可选
  • @Joy 有什么方法可以设计您的应用程序,使/ 不出现在您的参数中?这将是最好的。因为如果您确实允许它们,那么您将失去能够一目了然地识别 URL 结构的简单性。
  • 是的,我已经在base64调用它的地方处理了它,编码/可能出现的参数。

标签: python regex django


【解决方案1】:

如何手动解析带有附加斜线的网址?假设:callfunc/foo/bar/baz/。 bar 属于 param1 还是 param2?我认为在这种情况下,无法正确区分这两个参数。

您可以尝试添加一个特殊的断开器:r'^callfunc/(?P&lt;param1&gt;[\w\d\-/]{1,50})/special-versus/(?P&lt;param2&gt;[\w\d\-/]{1,50})/$' 断开器出现在您的参数中应该或多或少是不可能的。

【讨论】:

    猜你喜欢
    • 2012-06-02
    • 2015-02-28
    • 2011-11-03
    • 2016-04-13
    • 1970-01-01
    • 1970-01-01
    • 2021-08-24
    • 1970-01-01
    • 2010-12-10
    相关资源
    最近更新 更多