python - Jinja2 转储到一个对象中?

标签 python django jinja2

我希望能够转储到一个对象中。

根据文档,我可以转储到文件或类似文件的对象中。

我可以使用什么作为类似文件的对象?

观察:我不想保存它也不想显示它。它是一个可下载的路由器配置模板,是根据数据库中存储的数据动态创建的。

env = Environment(autoescape=False, optimized=False)    

config_file = None
device_config = None
device_config = env.from_string(config_template.config)
device_config.stream(
  STR         = site.location.upper()[:4],
).dump(config_file)

原因是我想使用内容配置将文件输出到带有 django 的用户浏览器。

编辑: 使用 stringIO 进行测试

import StringIO
>>> config_file = StringIO
>>> device_config = None
>>> device_config = env.from_string(config_template.config)
>>> device_config.stream(
...   STR         = site.location.upper()[:4],
... ).dump(config_file)
Traceback (most recent call last):
  File "<console>", line 3, in <module>
  File "/usr/lib/python2.7/site-packages/jinja2/environment.py", line 1167, in dump
    fp.write(item)
AttributeError: 'module' object has no attribute 'write'
>>>

谢谢

最佳答案

我从未使用过 jinja2,但我怀疑您可以使用 StringIO 来获取所需的字符串内容。

以下内容应该有效,但我无法(轻松)测试它......

from StringIO import StringIO

env = Environment(autoescape=False, optimized=False)

sio = StringIO()

device_config = env.from_string(config_template.config)
device_config.stream(
  STR         = site.location.upper()[:4],
).dump(sio)

content = sio.getvalue()

但是,如果您只想要一个字符串,那么看起来您应该使用 render() 方法......

env = Environment(autoescape=False, optimized=False)

device_config = env.from_string(config_template.config)
content = device_config.render(
  STR         = site.location.upper()[:4],
)

...但是,同样,我无法轻松测试它。

关于python - Jinja2 转储到一个对象中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38098087/

相关文章:

django - Django 中准确的页面查看计数

python - makemigrations 无法识别数据库更改

python - 如何在 jinja2 中执行一段时间 ( x < y )

python - 获取对 python 模块中列表的引用并对其进行迭代

python - mercurial - 我想添加一些自定义代码以在提交后运行

javascript - web2py CRUD.create() 表单中的字段表示

python - 使用 pip 升级 python 版本

python 列表理解 : return a list of strings instead of a list of lists

python - 我可以使用 JSON 数据在 Django 中添加新对象吗?

python - 在 Jinja 中使用 Python `set` 关键字