Tre*_*ewq 4 django case-insensitive
我希望我的网址不区分大小写.在使用通用视图时,将(?i)添加到urls.py中正则表达式的开头并不完全有效.
这是我想关注的网址:
url(r'^(?i)(?P<year>\d{4})/(?P<month>[a-z]{3})/(?P<day>\w{1,2})/(?P<slug>[-A-Za-z0-9_]+)/$', BlogDateDetailView.as_view(model=Entry,
queryset=Entry.objects.all(),
date_field='pub_date',
slug_field='slug',
)),
Run Code Online (Sandbox Code Playgroud)
以下工作:
http://mysite.com/2012/jan/24/my-article
http://mysite.com/2012/JAN/24/my-article
Run Code Online (Sandbox Code Playgroud)
以下不起作用(即我得到404):
http://mysite.com/2012/jan/24/My-Article
Run Code Online (Sandbox Code Playgroud)
我认为它不起作用的原因是因为slug的查询查询区分大小写.为了使这项工作,我相信我需要子类(不确定这是否是正确的术语),class SingleObjectMixin(object):因为这是queryset = queryset.filter(**{slug_field: slug})发生的地方.也许我应该继承get_queryset().
我很欣赏有关如何在django 1.3中干净利落地做一些指导
URL中的大小写不敏感通常是一件坏事.资源应该只有一个URL.
但是,您可以使用:
slug_field='slug__iexact'
Run Code Online (Sandbox Code Playgroud)
但是,我会捕获DoesNotExist异常,从URL中删除slug,再次使用新的slug尝试查询并返回重定向到正确的URL.在运行第一个查询之前,您实际上可以检查大写字母,以避免运行不必要的查询.
由你决定 :)
| 归档时间: |
|
| 查看次数: |
577 次 |
| 最近记录: |