使用Jinja2进行HTML模板 - 丢失

pom*_*mbo 8 html python templates jinja2

我正在尝试使用Jinja2在python中创建一个html模板.我有一个模板文件夹和我的'template.html',但我不知道如何处理环境或包加载器.

我使用easy_python安装了Jinja2并运行了以下脚本.

from jinja2 import Environment, PackageLoader
env = Environment(loader=PackageLoader('yourapplication', 'templates'))
template = env.get_template('mytemplate.html')
print template.render()
Run Code Online (Sandbox Code Playgroud)

我收到以下错误,因为我不知道如何定义包/模块.请帮帮我,我只是想创建一个简单的模板.

  File "log_manipulationLL.py", line 291, in <module>
env = Environment(loader=PackageLoader('yourapplication', 'templates'))
 File "/usr/local/lib/python2.7/dist-packages/Jinja2-2.6-py2.7.egg/jinja2/loaders.py",    line 216, in __init__
provider = get_provider(package_name)
File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 213, in get_provider
__import__(moduleOrReq)
ImportError: No module named yourapplication
Run Code Online (Sandbox Code Playgroud)

Fli*_*imm 9

如果您不想要或不需要Python包,您可能应该使用FileSystemLoader,如下所示:

from jinja2 import Environment, FileSystemLoader, select_autoescape
env = Environment(
    loader=FileSystemLoader('file/path/'),
    autoescape=select_autoescape(['html', 'xml']),
)
Run Code Online (Sandbox Code Playgroud)


pat*_*rys 8

PackageLoader期望使用常规点语法的实际Python模块.例如,如果您的结构如下所示:

myapp/
  __init__.py
  …
  templates/
    mytemplate.html
Run Code Online (Sandbox Code Playgroud)

您应该使用myapp模块名称.


paf*_*de2 8

我使用以下代码解决了这个问题:

 env = Environment(loader=PackageLoader('scriptname', 
                                        templatesPath))
Run Code Online (Sandbox Code Playgroud)

此代码进入文件的位置scriptname.py.

我不确定我的答案是否相关,但我想知道也许有人可能会觉得这个答案很有用.如果我错了,请告诉我.

  • 包加载器调用`scriptname.py`。如果你在那里初始化包加载器,代码将被第二次调用。 (2认同)