2010-03-03 21 views
2

我正在過濾幾個類別(cat1,cat2,cat3),以便通過其他視圖函數呈現不同的視圖。每次添加一個url類型時,繼續向urlpatterns添加類別sluket會變得很難處理。我可以將這部分從正則表達式中分出來嗎?Django url.py具有相同正則表達式名稱模式的不同視圖函數

urlpatterns = patterns('catalog.category_views', 
    (r'^(?P<cat_slug>(cat1|cat2|cat3))/$', 'universal_category'), 
    (r'^(?P<cat_slug>(cat1|cat2|cat3))/(?P<subcat_slug>[-\w]+)/$', 'subcat_listing'), 
    (r'^(?P<cat_slug>(cat1|cat2|cat3))/part/(?P<part>[-\w]+)/$', 'subcat_product'), 
) 

urlpatterns += patterns('catalog.make_views', 
    (r'^(?P<cat_slug>[-\w]+)/$', 'category'), 
    (r'^(?P<cat_slug>[-\w]+)/(?P<make_slug>[-\w]+)/$', 'make'), 
    (r'^(?P<cat_slug>[-\w]+)/(?P<make_slug>[-\w]+)/(?P<model_slug>[-\w]+)/(?P<year_low>\d{4})-(?P<year_high>\d{4})/$', 'listing'), 
    (r'^(?P<cat_slug>[-\w]+)/part/(?P<part>[-\w]+)/$', 'product'), 
) 

回答

4

我會親自把這個邏輯放在視圖中而不是urlspatterns。

我會創造一切特殊類別的列表,以便爲這個:

special_cats = ['cat1','cat2','cat3'] 

然後你查看你可以做這樣的事情:

def generic_cat_view(request, cat_slug): 
    if cat_slug in special_cats: 
     return special_view(request, cat_slug) 
    else: 
     #generic view 

然後,當你添加一個新的特殊類別,您只需將其添加到該列表

相關問題