Как стать автором
Обновить

Комментарии 5

Кстати, если на картинке habrastorage.org/storage2/58b/98c/a8c/58b98ca8cf71c815a491dca56208fdb4.png отойти от Templates, то остальное можно организовать средствами Django. Сделать views директорией и положить туда __init.py__ и файлы otchet_1.py,… otchet_N.py. Это сделает views пакетом с файлами и можно импортировать from views.otchet_1 import some_view.

Но можно пойти глубже и каждый из otchet_K сделать пакетом и тогда можно импортировать from views.otchet_1.views import some_view и from views.otchet_1.models import some_model.

С templates всё сложнее. Но можно было аналогичную структуру из директорий сделать: templates/otchet_1/*.html.
Решение с пакетами опять таки подразумевает хранение всего в отдельных файлах, даже если в каждом файле будет всего несколько строк кода. Ну и обязательный оверхед (для разработчика) на объявления функций view, добавления его в urls, импорты из моделей во вью и прочие однотипные, но обязательные для Django вещи, от которых мы хотели бы освободиться. Учитывая количество отчетов, исчисляемое сотнями, это не такие уж мелочи. Да и другие условия (устойчивость системы к тотальным ошибкам в произвольном отчете, применение изменений без перезагрузки) не выполнятся.
Такой своеобразный скелет в шкафу. Приятно знать, что после всех этих тонн толков о «возвышенном»: mvc, темплейты в коде, комментарии vs comments, orm vs sql — люди мыслят трезво, фигачат execfile и склеивают темплейты прямо в коде когда это нужно %)

В ваш DynamicPage я бы добавил свойство __name__. Некоторый софт, вроде Sentry, обращаются к этому атрибуту функции (который у вас инстанс) чтобы сформировать тикет:

class Foo(object):
    @property
    def __name__(self):
        return self.__class__.__name__
>>> Foo().__name__
'Foo'
Согласен, так будет больше похоже на функцию. Внёс в код.
Хотя ещё более интересным было бы добавление __name__ в соответствии с настоящим именем. То есть, чтобы после show_graf = DynamicPage(...) у нас show_graf.__name__ выдавал бы 'show_graf'. Но для этого кажется не обойтись без чего-то более сложного, в духе autodiscover.
Мы делали что то подобное, но всё реализовали внутри шаблонов Mako (он позволяет писать прям python если надо...) и легко автоматически перерендрится.
MVC хорош когда «смысл» программы равномерно размазан по всем логическим частям.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории