gpt4 book ai didi

django - 使用通用 View 的不区分大小写的查询

转载 作者:行者123 更新时间:2023-12-04 21:50:27 24 4
gpt4 key购买 nike

我希望我的网址不区分大小写。使用通用 View 时,将 (?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',
)),

以下工作:
http://mysite.com/2012/jan/24/my-article
http://mysite.com/2012/JAN/24/my-article

以下不起作用(即我得到 404):
http://mysite.com/2012/jan/24/My-Article

我认为它不起作用的原因是因为对 slug 的查找查询是区分大小写的。为了使这项工作,我相信我需要子类化(不确定这是否是正确的术语) class SingleObjectMixin(object):因为这是 queryset = queryset.filter(**{slug_field: slug})发生。也许我应该继承 get_queryset() .

我很感激有关如何在 django 1.3 中干净地做到这一点的一些指导

最佳答案

URL 不区分大小写通常是一件坏事。一个资源应该只有一个 URL。

但是,您可以只使用:

slug_field='slug__iexact'

但是,我会改为捕获DoesNotExist 异常,降低() 来自URL 的slug,使用新的slug 再次尝试查询并返回到正确URL 的重定向。您实际上可以在运行第一个查询之前检查大写字母,以避免运行不必要的查询。

由你决定 :)

关于django - 使用通用 View 的不区分大小写的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9345050/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com