Найти - Пользователи
Полная версия: Повторяющиеся данные
Начало » Django » Повторяющиеся данные
1
info.rss
Настало время задуматься о 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'),
...
это только по одному типу данных, в данном случае это 1, а их там штук 10

во вьюхе это все умножается
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')
и это только для DELETE, там еще ADD, EDIT, LIST…
FishHook
Если у вас 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

То есть используем __subclasses__ у базового класса, получаем всех потомков, выдергиваем у них некий декларативный атрибут name и строим по нему url.
info.rss
Спасибо, это пока сложно, но стараюсь разбираться
подскажите
from vist_core.generics.base import get_module_views
это откуда, или о чем), т.к
ImportError: No module named vist_core.generics.base
FishHook
Напишите мне на мыло.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB