2012-02-18 58 views
4

我想我的網址不區分大小寫。在使用通用視圖時,將(?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()

我會很感激的,我怎麼能在URL中做到這一點乾淨在Django 1.3

回答

6

不區分大小寫的一些指導,通常是一件壞事。資源應該只有一個URL。

但是,你可以使用:

slug_field='slug__iexact' 

但是,我反而從URL趕上DoesNotExist異常,低()的塞,用新的團狀再次嘗試查詢並返回一個重定向正確的網址。在運行第一個查詢之前,您可以實際檢查大寫字母,以避免運行不必要的字母。

這取決於你:)

+0

太棒了!謝謝安德魯。談論一個簡單的解決方案,我想象的是更復雜的事情。 – Trewq 2012-02-19 00:06:31