python - Django 的 Misaka 模板标签 - 用双引号括起来的文本

标签 python django markdown

我想用 Github 风格的 Markdown 替换我正在构建的 Django 博客中的标准 Markdown 实现。我想使用Misaka ,并且我已经将自己的自定义模板标签放在一起。不幸的是,出了问题。

这是我的模板标签文件,位于 blog/templatetags/gfm.py 中。 __init__.py 文件位于同一文件夹中:

from django import template
from django.template.defaultfilters import stringfilter
import misaka as m

register = template.Library()

@register.filter(is_safe=True)
@stringfilter
def gfm(value):
    rendered_text = m.html(value,
                           extensions=m.EXT_FENCED_CODE,
                           render_flags=m.HTML_ESCAPE)
    return rendered_text

这是我的模板之一:

{% extends 'layout/base.html' %}

{% block header %}
{% endblock %}

{% block content %}
{% load gfm %}
{% if object_list %}
{% for post in object_list %}

<div class="post">
    <div class="page-header">
        <h1><a href="{{ post.get_absolute_url }}">{{ post.title }}</a></h1>
    </div>
{{ post.text|gfm }}
<p>Posted {{ post.pub_date }}</p>
<p>
{% for category in post.categories.all %}
    <a class="badge badge-info" href="/category/{{ category.slug }}/">{{ category.title }}</a>
{% endfor %}
</p>
</div>
{% endfor %}
<br />
<ul class="pager">
{% if page_obj.has_previous %}
<li class="previous"><a href="/{{ page_obj.previous_page_number }}/">Previous Page</a></li>
{% endif %}
{% if page_obj.has_next %}
    <li class="next"><a href="/{{ page_obj.next_page_number }}/">Next Page</a></li>
{% endif %}
</ul>
{% else %}
<div class="post">
<p>No posts matched</p>
</div>
{% endif %}

{% endblock %}

输出的文本被用双引号括起来返回,这破坏了整个事情。否则,生成的标记似乎是正确的。

我哪里出错了?我知道这不是数据库中的数据,就像我使用 pdb 来获取函数内的 valuerendered_text 的值一样,它们会正确呈现。例如,这是一篇文章的纯文本版本,由 pdb 打印:

u'A Python application:\r\n\r\n    print "Hello world"'

这是使用 Misaka 在 Markdown 中呈现的版本:

u'<p>A Python application:</p>\n\n<pre><code>print &quot;Hello world&quot;\n</code></pre>\n'

我对 Django 相当有经验,但我对自定义模板标签很陌生。

最佳答案

使用autoescape标签。

{% autoescape off %}{{ post.text|gfm }}{% endautoescape %}

或者您可以使用 safe过滤。

{{ post.text|gfm|safe }}

关于python - Django 的 Misaka 模板标签 - 用双引号括起来的文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18552703/

相关文章:

python - Google Cloud SQL w/Django - 连接速度极慢

c# - 在 .NET 中将 Markdown 转换为 HTML

markdown - Markdown 是否应该在 block 引用中保留换行符?

python - Azure ML 中混淆矩阵中每个单元格的项目数的浮点值

python - 带有类别 slug 的 django 组子类别

python - 从python的目录树中收集匹配条件的所有目录

python - Django - 缺少 1 个必需的位置参数 : 'request'

Markdown 在 GatsbyJS 中无法正确显示

python - 如何在 python 中分离字段和路径 gps 坐标?

python - 扭曲,当 react 器停止时取消阻塞threads.blockingCallFromThread