我有一个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]+)
的网址重定向到具有等效大写字符的网址?
答案 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.
(...)