Python 樱桃糖&x2B;Jinja,在哪里初始化环境

Python 樱桃糖&x2B;Jinja,在哪里初始化环境,python,cherrypy,jinja2,Python,Cherrypy,Jinja2,我正在用python编写一个应用程序,使用CherryPy和Jinja作为模板系统。可能需要说我是这些工具的初学者。 我现在面临的问题是我不知道在哪里初始化Jinja的环境类 目前我有 application.py(入口点,设置环境并启动服务器) root.py(cherrypy的根页面类,必须从“application.py”导入,并且必须导入“application.py”以检索实例化的环境) pages.py(cherry.py的其他页面类必须导入'application.py',并且必

我正在用python编写一个应用程序,使用CherryPy和Jinja作为模板系统。可能需要说我是这些工具的初学者。 我现在面临的问题是我不知道在哪里初始化Jinja的环境类

目前我有

  • application.py(入口点,设置环境并启动服务器)
  • root.py(cherrypy的根页面类,必须从“application.py”导入,并且必须导入“application.py”以检索实例化的环境)
  • pages.py(cherry.py的其他页面类必须导入'application.py',并且必须从根目录导入以构建树)
尝试运行它,结果似乎是一个循环引用并失败(应用程序>根目录>页面>应用程序)

我应该只使用一个环境实例,还是可以在root.py中使用一个实例,在pages.py中使用另一个实例


哪一种是正确的模式?

你真的不应该。如果我是你,我会创建一个新的python模块
templates.py
,并将所有jinja环境配置/创建放在那里。之后,您只需在任何需要的地方导入该环境(例如,从templates import jinjaenv导入
)。在这种情况下,您可以保持简单和可扩展性,以备将来使用。

您真的不应该这样做。如果我是你,我会创建一个新的python模块
templates.py
,并将所有jinja环境配置/创建放在那里。之后,您只需在任何需要的地方导入该环境(例如,从templates import jinjaenv导入
)。在这种情况下,您可以保持简单和可扩展性,以备将来使用。

很好,但模板模块可以被多个模块引用。python是否知道“jinjaenv”应该是“相同”的实例对象,或者它只是在每次导入时实例化一个新实例?它将是相同的实例。模块中定义的所有变量(类、函数)都是共享的。您可以将python模块视为对象,加载一次,然后在import语句的帮助下引用。很好,但是模板模块可以被多个模块引用。python是否知道“jinjaenv”应该是“相同”的实例对象,或者它只是在每次导入时实例化一个新实例?它将是相同的实例。模块中定义的所有变量(类、函数)都是共享的。您可以将python模块视为对象,它们被加载一次,然后在import语句的帮助下被引用。