【问题标题】:Django url.py Different view functions with the same regex name patternDjango url.py 具有相同正则表达式名称模式的不同视图函数
【发布时间】:2011-01-22 23:59:50
【问题描述】:

我过滤了几个类别(cat1、cat2、cat3),由不同的视图呈现,其余的则由其他视图函数呈现。每次添加一个时,继续向 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'),
)

【问题讨论】:

    标签: python django django-urls


    【解决方案1】:

    我个人会将这个逻辑放在视图中而不是 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
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-18
      • 2017-08-02
      • 1970-01-01
      • 2019-03-30
      • 2011-05-11
      • 2019-08-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多