【问题标题】:Markdown Template does not render HTML CorrectlyMarkdown 模板无法正确呈现 HTML
【发布时间】:2019-05-22 15:41:14
【问题描述】:

我在我的 Django 网站中创建了一个 Markdown 过滤器。我使用了库markdown2。

虽然 HTML 会呈现,但它不会完全呈现它。 代码和语法亮点、URL 和列表无法正确呈现。

模板标签文件夹

文件名:ttags.py

from django.template import Library
import markdown2

register = Library()

@register.filter('markdown_to_html')
def markdown_to_html(markdown_text):
    htmlversion=markdown2.markdown(markdown_text)
    return htmlversion

模板文件

{% extends "layout.html" %}
{% load ttags %}
{% load static from staticfiles %}

{% block content %}

<div class="content">
{{ step.description | markdown_to_html | safe }}
</div>

{% endblock %}

提供的要渲染的文本如下

##### Usage of Variables

```python
name = "David"
age = 10
```

In the above example name and age are variables that store Text and Numbers respectively.

> Always remember to use Variables in your programs to store information.

渲染输出的 HTML 代码如下

<h5>Usage of Variables</h5>

<p><code>python
name = "David"
age = 10
</code></p>

<p>In the above example name and age are variables that store Text and Numbers respectively.</p>

<blockquote>
  <p>Always remember to use Variables in your programs to store information.</p>
</blockquote>

代码语法不显示在两行中

【问题讨论】:

  • Blockquote 已解决。代码块没有出现在两行中。
  • 请使用呈现的 HTML 代码更新您的问题,而不是屏幕截图。您可能需要使用浏览器的“查看源代码”或“检查”工具来获取 HTML。
  • &lt;code&gt; name='David' print(name) &lt;/code&gt;
  • edit 将您的问题粘贴到为整个 Markdown 输入呈现的 HTML 中。
  • 问题已编辑

标签: django markdown django-template-filters


【解决方案1】:

您需要启用fenced code blocks 扩展,这不是标准的 Markdown 功能。在您的过滤器定义中这样做:

htmlversion = markdown2.markdown(markdown_text, extras=['fenced-code-blocks'])

注意添加了extras 关键字参数传递给markdown2.markdown。如果您希望语法高亮也能正常工作,您需要安装 pygments 和相关 CSS 文件的副本以定义高亮样式。

我没有使用过 Markdown2 库的经验,也从未使用过。那么我怎么能确定这是正确的呢?注意围栏代码块:

```python
name = "David"
age = 10
```

被渲染到:

<p><code>python
name = "David"
age = 10
</code></p>

防护代码块的全部内容,包括语言标识符,都被包裹在一个内联代码跨度 (&lt;p&gt;&lt;code&gt;) 中,而不是一个代码块 (&lt;pre&gt;&lt;code&gt;)。这表明 Markdown 解析器将反引号解释为 code span,而不是代码块。由于防护代码块不是原始Markdown rules 的一部分,我们只能假设解析器和大多数解析器一样,默认情况下不支持防护代码块。事实上,对documentation 的快速检查表明,需要通过扩展启用受防护的代码块才能使其工作。

【讨论】:

  • 如果你使用 Python-Markdown 启用 fenced code blocksmarkdown.markdown(some_text, extensions=['fenced_code'])
猜你喜欢
  • 2011-09-01
  • 2012-06-05
  • 2015-03-20
  • 1970-01-01
  • 2017-06-29
  • 2014-04-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多