Django:重定向到正确的URL

时间:2014-08-08 15:32:59

标签: regex django django-urls

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

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

我希望pk ID不区分大小写 - 也就是说,用户输入A123还是a123并不重要。

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

有没有办法将匹配(?P<pk>[0-9a-z]+)的网址重定向到具有等效大写字符的网址?

1 个答案:

答案 0 :(得分:2)

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

from django.http import HttpResponseRedirect

def piece(request, pk):

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

    # Normal code here.
    (...)