Django url.py具有相同正则表达式名称模式的不同视图函数

时间:2010-03-03 00:11:47

标签: python django django-urls

我正在过滤几个类别(cat1,cat2,cat3),由不同的视图呈现,然后由其他视图函数呈现。每次添加一个slug时,继续向urlpatterns添加类别slug变得笨拙。我可以将这部分从正则表达式中分解出来吗?

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'),
)

1 个答案:

答案 0 :(得分: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

然后,当您添加新的特殊类别时,您只需将其添加到该列表