【问题标题】:How process variables in Pelican templates?如何处理 Pelican 模板中的变量?
【发布时间】:2015-05-13 09:23:43
【问题描述】:

我在一篇鹈鹕文章中定义了一个变量,例如使用 Markdown 语法:

Motto: _"Paranoia is a virtue"_  Anonymous, 1984

然后我想在模板中使用它(例如article.html):

 {% if article.motto %}<p>{{ article.motto }}</p>{% endif %}

显然,我在 HTML 中获得了类似的东西:

 <p>_"Paranoia is a virtue"_  Anonymous, 1984</p>

有没有办法处理变量(f.i.通过 Jinja 过滤器)以获得 Markdown 处理后的文本。在这种情况下,结果应该是:

 <p><i>"Paranoia is a virtue"</i>  Anonymous, 1984</p>

【问题讨论】:

    标签: jinja2 pelican


    【解决方案1】:

    将以下内容添加到您的 pelicanconf.py 文件以定义 Jinja 过滤器以通过 markdown 传递变量:

    from markdown import Markdown
    markdown = Markdown(extensions=['markdown.extensions.extra'])
    
    def md(content, *args):
        return markdown.convert(content)
    
    JINJA_FILTERS = {
        'md': md,
    }
    

    那你就可以了

    {% if article.motto %}&lt;p&gt;{{ article.motto | md }}&lt;/p&gt;{% endif %}

    您的变量将被正确渲染。

    【讨论】:

      【解决方案2】:

      对于 3.5,没有。 Markdown 默认不处理元数据。但是当前的开发版本为此包含了一个新设置FORMATTED_FIELDS。所以,等待 3.6 或从 github 安装 dev-version。

      当然,你也可以使用 HTML 代替 markdown 语法:

      Motto: <i>"Paranoia is a virtue"</i>  Anonymous, 1984
      

      【讨论】:

        【解决方案3】:

        这能解决问题吗?

        {% if article.motto %}<p>{{ article.motto | replace("_", "<i>", 1) | replace("_", "</i>" }}</p>{% endif %}
        

        【讨论】:

          猜你喜欢
          • 2010-10-24
          • 1970-01-01
          • 2014-12-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-02-27
          • 1970-01-01
          相关资源
          最近更新 更多