在Flask应用程序中使用Markdown混合图像

时间:2014-02-05 11:52:56

标签: python flask markdown flask-flatpages

我正在使用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>

1 个答案:

答案 0 :(得分:3)

通过https://github.com/naringashttps://github.com/SimonSapin/Flask-FlatPages/pull/1

留下的评论解决

事实证明,Flask-FlatPages不会渲染Jinja模板标签。但它可以选择设置自定义HTML渲染器。使用它在渲染降价之前首先渲染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