Я пытаюсь реорганизовать довольно здоровенную функцию просмотра в Django. Слишком много переменных, и это огромная функция.
В идеале я хочу модулировать представление в логические функции.
Однако я должен передать контекст функции, чтобы получить легкий доступ к переменным.
Например:
def complex_view(request, slug):
some complex logic which creates variable abc ...
...
some more complex logic which uses variable abc ...
...
etc.
Должно стать чем-то вроде:
def complex_view(request, slug):
process_X()
...somehow pass variables and context to next function...
process_Y()
...
etc.
def process_X():
...
def process Y():
...
Я могу придумать несколько способов сделать это, некоторые из которых были указаны на этой странице:
http://mail.python.org/pipermail/tutor/2009-February/067506.html
a. Подфункции, определенные в главном представлении. Это кажется глупым, так как трудно сказать, какие переменные являются общими, а какие нет.
b. Передача locals()
в качестве словаря. Это также полезно, потому что теперь есть два разных способа доступа к переменным: xyz
и contextDict['xyz']
. И вы должны использовать один при вызове N
, а следующий при вызове N+1
в стеке.
c. Передача методом грубой силы всех переменных каждому вызову функции и возвращение соответствующих переменных. Это становится очень утомительным, когда задействовано много переменных.
d. В C ++ / C # я просто создал бы класс MyComplexViewContext
, определил бы все общие переменные и создал функции-члены для выполнения работы. Тогда вы можете использовать self.xyz
для всего внутри этого класса.
Я полагаю, что я мог бы использовать этот метод и в Python. Не уверен, что это лучший способ.
Как вы относитесь к предпочтительному способу сделать это в Python / Django?