【问题标题】:Load jinja2 templates dynamically on a Pyramid view在 Pyramid 视图上动态加载 jinja2 模板
【发布时间】:2015-05-12 20:29:23
【问题描述】:

我正在开发一个带有jinja2 模板引擎的Pyramid 项目。在jinja2 documentation 之后,我找到了一种从独特视图加载不同模板的方法。但考虑到模块pyramid_jinja2 已经在我的应用程序中配置了模板的默认路径。我想知道是否有另一种更优雅的方式来完成这项工作。这是我的方法:

from jinja2 import Environment, PackageLoader

@view_config(context=Test)
def test_view(request):
    env = Environment(loader=PackageLoader('project_name', 'templates'))
    template = env.get_template('section1/example1.jinja2')
    return Response(template.render(data={'a':1,'b':2}))

我可以从某个地方获取 pyramid_jinja2 环境的实例,这样我就不必在视图中再次设置模板的默认路径了吗?

【问题讨论】:

    标签: jinja2 pyramid


    【解决方案1】:

    以下就足够了:

      from pyramid.renderers import render
    
      template = "section/example1.jinja2"
      context = dict(a=1, b=2)
      body = render(template, context, request=request)
    

    并在您的__init__.py 中配置加载:

      config.add_jinja2_search_path('project_name:templates', name='.jinja2', prepend=True)
    

    【讨论】:

    • 我按照你说的做了,似乎工作正常,但是当我尝试在模板中使用国际化文本时,它会中断。例如 {{ gettext('NAME') }} 会抛出以下错误:return request.localizer - AttributeError: 'NoneType' object has no attribute 'localizer'跨度>
    • 显然request 需要对gettext 进行一些特殊处理。我建议您使用完整的回溯“如何将 gettext 与 pyramid_jinja2 一起使用”为此打开另一个问题
    猜你喜欢
    • 2015-11-03
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 2019-02-09
    • 2019-11-05
    • 1970-01-01
    • 2011-08-31
    • 1970-01-01
    相关资源
    最近更新 更多