2010-01-28 190 views
2

我已經列出了我列出的對象列表(在這種情況下爲租用屬性),列表需要通過少數條件進行過濾(最大價格,面積,n_bedrooms ...),我想我能做到這一點是這樣的:django:過濾對象列表

(r'^price:(?P<price_min>\d+)?-(?P<price_max>\d+)?/$', property_list) 

這工作,並允許類似的URL價格:300-600 /做合理的事情。

但是,它變得很困難時,有大約一半十幾屬性,一個可以通過以下方式過濾,並且我非常希望乾淨的URL(即不包括屬性,爲我們目前沒有在URL過濾)

在Django中有沒有「標準」的方法來處理這個問題?

回答

2

如果你並不需要扭轉這些網址,你可以使用可選組:

urls.py:

#the regex might need some work, it's just a concept 
(r'^(price(/(?P<price_min>\d+))?(/to/(?P<price_max>\d+))?/$ 

views.py:

def view(request,min_price=None,max_price=None): 
    ... 

(django_filters是非常好的,雖然)

+0

是的。我認爲,只是想知道是否有更好的方法。我會思考它,謝謝你的時間! – Agrajag 2010-01-29 13:49:44

5

在Django做到這一點,正確的做法是亞歷克斯·蓋納,由Alex Gaynor

它可以讓你的過濾參數,HTTP GET和過濾你對這些約束條件的查詢集犯錯django-filter

從文檔:

import django_filters 

class ProductFilterSet(django_filters.FilterSet): 
    class Meta: 
     model = Product 
     fields = ['name', 'price', 'manufacturer'] 

,然後在視圖中,你可以做::

def product_list(request): 
    filterset = ProductFilterSet(request.GET or None) 
    return render_to_response('product/product_list.html', 
     {'filterset': filterset}) 
+0

這需要過濾的照顧,但(不!)處理我上面提到的凌亂的部分,貯藏,urls-通過使用get參數來清理,這意味着你會得到冗長而雜亂的URL。或者,我可以忽略一些東西? – Agrajag 2010-01-28 14:05:43