【问题标题】:In a Django URL, what is the regular expression so that "foo.com/Bar" is the same as "foo.com/bar"在 Django URL 中,什么是正则表达式以使“foo.com/Bar”与“foo.com/bar”相同
【发布时间】:2013-02-12 22:43:48
【问题描述】:

我的问题是人们一直链接到 example.com/FooBar,但实际链接是 example.com/foobar。

我目前的正则表达式是...

SLUG = '(?P<slug>[\w\d-]+)'

我希望这是有道理的。我很惊讶我找不到这个问题已经问过了。可能今天我的google fu很弱。

【问题讨论】:

    标签: python regex django case-sensitive


    【解决方案1】:

    正则表达式匹配两者。困难在于您可能会收到如下查询:

    obj = MyModel.objects.get(slug=slug)
    

    哪个不匹配。

    要解决此问题,请将查询更改为:

    obj = MyModel.objects.get(slug=slug.lower())
    

    【讨论】:

      【解决方案2】:

      您的查询也可能是这样的

      obj = MyModel.objects.get(slug__icontains=slug)
      

      icontains 字段查找将进行不区分大小写的匹配

      【讨论】:

      • 我也喜欢这个答案,因为这样我就不必强制创建的 url 全部为小写。
      • 但是,如果我去 /foobar 并且多个对象 slug 包含 'foobar' 所以 'foobarA' 或 'foobarb'.. 然后它返回多个对象。我知道我可以做更多的工作来防止这种情况发生,但是是的。它会产生一个问题。
      • @teewuane 您可以将查询更改为 obj = MyModel.objects.get(slug__iexact=slug)
      猜你喜欢
      • 2010-10-21
      • 1970-01-01
      • 2010-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-15
      • 2011-12-27
      • 1970-01-01
      相关资源
      最近更新 更多