【问题标题】:jinja2 + reStructured Markupjinja2 + 重构标记
【发布时间】:2012-07-03 19:47:01
【问题描述】:

想法如下。我使用类似于 stackoverflow 的标签向 jinja2 发送一些文本。我如何告诉 jinja2 将它们视为包含文本的标记并在 html 中生成粗体、斜体等文本?

谢谢。

【问题讨论】:

    标签: python html flask jinja2 restructuredtext


    【解决方案1】:

    我已经习惯了django-markdown,所以我认为使用过滤器是实现此目的的好方法:

       <div class="content">{{ article.body|rst }}</div>
    

    我不知道 jinja2 是否存在这样的过滤器,但 it should be very easy to write。我猜这行中的某些内容(未经测试的代码):

    from docutils.core import publish_parts
    import jinja2
    
    def rst_filter(s):
        return jinja2.Markup(publish_parts(source=s, writer_name='html')['body'])
    environment.filters['rst'] = rst_filter
    

    【讨论】:

    • 这行得通...但对于过滤器,使用 publish_parts()['html_body'] 而不是 publish_string()。谢谢!
    • @AdiRoiban:我相信你并想更新我的答案以反映你的建议,但你介意解释一下 publish_parts 比 publish_string 更好的原因吗? TIA。
    • 这个评论系统好丑……怎么加代码?带有 "html" writer 的 publish_string 将创建一个整个 HTML 文档,包括头部、样式指南和正文。试试这个:``` from docutils.core import publish_string, publish_parts publish_string(source='rst', writer_name='html') publish_parts(source='rst', writer_name='html')['body'] ```
    • @AdiRoiban:感谢您的解释!对于在评论系统中包含代码sn-ps,我喜欢将它们发布在gist并在此处发布链接。
    【解决方案2】:

    你应该可以这样做:

    from docutils.core import publish_string
    import jinja2
    
    html = publish_string(source=text, writer_name='html')
    node = jinja2.Markup(html)
    

    node 是 Jinja 2 节点实际包含在您的范围内。

    【讨论】:

    猜你喜欢
    • 2017-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多