【问题标题】:Django: Redirect to correctly-cased URLDjango:重定向到正确大小写的 URL
【发布时间】:2014-10-02 03:27:09
【问题描述】:

我有一个 Django 应用程序,我在 urls.py 中有如下一行:

url(r'^piece/(?P<pk>[0-9a-zA-Z]+)/$', 'piece', name="piece-detail"),

我想不区分大小写地匹配pk ID,也就是说,用户输入A123 还是a123 都无关紧要。

我想到的一个解决方案是在视图中捕获 404 异常,根据需要将 pk 转换为大写并重试。但是,我不确定这是个好主意。一方面,它为多个规范 URL 留下了可能性。

有没有办法将匹配 (?P&lt;pk&gt;[0-9a-z]+) 的 URL 重定向到具有等效大写字符的 URL?

【问题讨论】:

  • 你的正则表达式的那部分匹配不区分大小写,但你可以尝试使用(?P&lt;pk&gt;[^\W_]+)
  • 你不会隐藏视图顶部的案例吗?
  • @hwnd 如果我理解得很好,我认为他想不区分大小写地匹配捕获组名称
  • 不清楚,因为[0-9a-zA-Z]+ 两者都匹配..

标签: regex django django-urls


【解决方案1】:

(最简单的)方法就是您所描述的方法。如果 pk 不是大写,请在 piece 视图的开头添加一个检查以重定向用户:

from django.http import HttpResponseRedirect

def piece(request, pk):

    if pk != pk.upper():
        return HttpResponseRedirect("/piece/{0}/".format(pk.upper()))

    # Normal code here.
    (...)

【讨论】:

    猜你喜欢
    • 2013-11-19
    • 2020-12-21
    • 2020-08-19
    • 2016-05-23
    • 1970-01-01
    • 2021-10-13
    • 2016-05-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多