Комментарии 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.
Но можно пойти глубже и каждый из 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 хорош когда «смысл» программы равномерно размазан по всем логическим частям.
MVC хорош когда «смысл» программы равномерно размазан по всем логическим частям.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Когда встроенного MVC не хватает