Django url.py Различные функции представления с одним и тем же шаблоном имени регулярного выражения - PullRequest
2 голосов
/ 03 марта 2010

Я фильтрую несколько категорий (cat1, cat2, cat3), которые будут отображаться различными представлениями, а остальные - другими функциями представления. Становится громоздким продолжать добавлять слагов категорий в 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'),
)

1 Ответ

4 голосов
/ 03 марта 2010

Я бы лично представил эту логику, а не 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

Затем, когда вы добавляете новую специальную категорию, вам просто нужно добавить ее в этот список

...