我正在过滤一些类别(cat1、cat2、cat3),以由不同的 View 呈现,然后由其他 View 函数呈现所有其余类别。每次添加类别名称时,不断向 urlpattern 添加类别名称会变得很麻烦。我可以如何将该部分从正则表达式中分解出来吗?
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
然后,当您添加新的特殊类别时,只需将其添加到该列表中即可
关于python - Django url.py 具有相同正则表达式名称模式的不同 View 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2367918/