【问题标题】:Python Flask Render Text from Variable like render_templatePython Flask 从像 render_template 这样的变量渲染文本
【发布时间】:2016-01-28 21:10:39
【问题描述】:

我知道烧瓶函数render_template。我必须给出模板的文件名。但是现在我想渲染一个模板的字符串(也就是模板的内容)。这就说得通了。但我现在不想解释为什么。如何简单地渲染模板的文本?

【问题讨论】:

  • 只需打开模板文件并以字符串形式返回即可。
  • 但如果我这样做(我安装了flask-bootstrap扩展),它会给我这些东西:{% extends "bootstrap/base.html" %} 等作为纯文本而不是处理。
  • 这不是你的问题吗? 如何简单地呈现模板的文本?
  • 是的,但它不处理 {...} 中的事情
  • 所以我想要一个简单的解决方案而不是简单的模板

标签: python flask jinja2 python-2.x


【解决方案1】:

你可以使用render_template_string:

>>> from flask import render_template_string
>>> render_template_string('hello {{ what }}', what='world')
'hello world'

【讨论】:

  • 这个答案给出了一个错误:AttributeError: 'NoneType' object has no attribute 'app'
  • @SharvariGc 在这种情况下,您需要在上下文中使用它:with app.app_context(): ...。见这里:stackoverflow.com/a/50927259/11750716
【解决方案2】:

你可以使用from_string

template = "text {{ hello }}"
print app.jinja_env.from_string(template).render(hello='Hello')

>> text Hello

【讨论】:

  • 由于他使用的是Flask,所以他可以使用render_template_string(从Flask导入)
  • 我无法将两个答案都勾选正确。你的回答也不错;)
【解决方案3】:

其实你可以直接调用jinja2的渲染函数:

jinja2.Template("I am {{ var }}").render(**kargs)

当不使用烧瓶时,这很有用

【讨论】:

  • 这似乎是不需要Flask的最简单方法
【解决方案4】:

取自What's the easiest way to escape HTML in Python

import cgi
rendered = render_template('template.html')
return cgi.escape(rendered)

【讨论】:

  • 这个问题和HTML转义有什么关系?
  • 这会将呈现的 HTML 文件模板作为字符串返回。其他答案只是做简单的模板字符串。 @ThiefMaster
猜你喜欢
  • 1970-01-01
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-22
  • 2018-02-27
相关资源
最近更新 更多