【问题标题】:Mix images with Markdown in a Flask app在 Flask 应用程序中将图像与 Markdown 混合
【发布时间】:2014-02-05 11:52:56
【问题描述】:

我正在使用Flask-FlatPages 构建一个静态站点(并跟进Frozen-Flask)。

在我的页面中,我想将文本与图像混合在一起。这将是天真的方法:

## Look at *this* image:
<img src="{{ url_for('static', filename='images/image.png') }}">
Hmm, it does **not** seem to load.

{{ template tag }} 没有被解析,因为 FlatPages 通过 markdown 运行页面,而不是通过 Flask 的模板系统(如果我没记错的话)。

如何获取正确的图片链接?

相关代码

#app.py
from flask import Flask, render_template
from flask_flatpages import FlatPages

app = Flask(__name__)
pages = FlatPages(app)

@app.route('/tip/<path:path>')
def tip_detail(path):
    tip = pages.get_or_404(path)
    template = tip.meta.get('template', 'tip_detail.html')
    return render_template(template, tip=tip)

#tip_detail.html
<!DOCTYPE html>
<html>
<head>
  <title></title>
</head>
<body>
<h1>{{ tip.meta.title }}</h1>
{{ tip }}
</body>
</html>

【问题讨论】:

  • 你试过&lt;img src="{{ url_for('static', filename='images/image.png') }}"&gt;吗?你能告诉我们渲染方法吗?
  • @SyedHabibM 我用相关代码更新了帖子。我确实尝试使用 {{ url_for }} 模板标签,但没有被解析。
  • 这是一个简单的解决方案:https://stackoverflow.com/a/47532359/5511849.

标签: python flask markdown flask-flatpages


【解决方案1】:

通过https://github.com/naringashttps://github.com/SimonSapin/Flask-FlatPages/pull/1留下的评论解决

事实证明 Flask-FlatPages 不呈现 Jinja 模板标签。但是,它确实可以选择设置自定义 HTML 渲染器。在渲染 markdown 之前使用它首先渲染 Jinja 模板。

#add these lines to app.py
def prerender_jinja(text):
    prerendered_body = render_template_string(Markup(text))
    return pygmented_markdown(prerendered_body)

app.config['FLATPAGES_HTML_RENDERER'] = prerender_jinja

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-10
    • 1970-01-01
    • 1970-01-01
    • 2018-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多