Skip to main content
 首页 » 编程设计

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

2024年08月12日35dyllove98

我正在过滤一些类别(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 

然后当你添加一个新的特殊类别时,你只需要将它添加到那个列表中