我正在过滤一些类别(cat1、cat2、cat3)以由不同的 View 呈现,然后由其他 View 函数呈现。每次添加类别段塞时,不断向 urlpatterns 添加类别段段变得很笨拙。我可以通过某种方式将该部分从正则表达式中排除吗?
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'),
)
请您参考如下方法:
我个人会将此逻辑放在 View 中而不是 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
然后当你添加一个新的特殊类别时,你只需要将它添加到那个列表中
