Форум сайта python.su
Настало время задуматься о DRY.
Подскажите как все это сократить?
urls.py
url(r'^1/$', View1List.as_view(), name='view_1_list'), url(r'^1/(?P<pk>\d+)/$', View1Item.as_view(), name='view_1_item'), url(r'^1/list/$', Cabinet1List.as_view(), name='cabinet_1_list'), url(r'1/add/$', Cabinet1Add.as_view(), name='cabinet_1_add'), url(r'^1/(?P<pk>\d+)/edit/$', Cabinet1Edit.as_view(), name='cabinet_1_edit'), url(r'^1/(?P<pk>\d+)/del/$', Cabinet1Del.as_view(), name='cabinet_1_del'), url(r'^1/(?P<pk>\d+)/hide/$', Cabinet1Hide.as_view(), name='cabinet_1_hide'), ...
class Cabinet1Hide(CabinetHide): model = 1 success_url = reverse_lazy('reals:cabinet_1_list') class Cabinet2Hide(CabinetHide): model = 2 success_url = reverse_lazy('reals:cabinet_2_list') class Cabinet3Hide(CabinetHide): model = 3 success_url = reverse_lazy('reals:cabinet_3_list') class Cabinet4Hide(CabinetHide): model = 4 success_url = reverse_lazy('reals:cabinet_4_list') class Cabinet5Hide(CabinetHide): model = 5 success_url = reverse_lazy('reals:cabinet_5_list')
Отредактировано info.rss (Сен. 27, 2014 19:01:01)
Офлайн
Если у вас CBV, то делаем общий класс для всех остальных вьюх проекта. Помимо очевидных ништяков, таких как централизованное управление правами доступа или внедрение констант в контекст без костылей, мы можем сделать что то типа
# -*- coding: utf-8 -*- import pkgutil from django.conf.urls import patterns, url import os from vist_core.generics.base import get_module_views def get_patterns(_file): urls_path = os.path.dirname(_file) module_name = os.path.basename(urls_path) views_path = os.path.join(urls_path, "views") urls = [] for params in pkgutil.iter_modules([views_path]): view_file_name = params[1] __import__('%s.views.%s' % (module_name, view_file_name)) for view_class in get_module_views(module_name): slug_name = view_class.get_slug_name() _url = url(r'^%s/$' % slug_name, view_class.as_view(), name=slug_name) urls.append(_url) urls.append(_hidden_url) urlpatterns = patterns('', *urls) return urlpatterns
Отредактировано FishHook (Сен. 27, 2014 19:52:17)
Офлайн
Спасибо, это пока сложно, но стараюсь разбираться
подскажите
from vist_core.generics.base import get_module_views
ImportError: No module named vist_core.generics.base
Отредактировано info.rss (Сен. 28, 2014 08:51:30)
Офлайн
Напишите мне на мыло.
Офлайн