Django入门与实践-第25章:Markdown 支持

    首先,我们安装一个名为 Python-Markdown 的库:

    我们可以在 Post 视图的 model 中添加一个新的方法:

    boards/models.py

    1. from django.utils.html import mark_safe
    2. from markdown import markdown
    3. class Post(models.Model):
    4. # ...
    5. def get_message_as_markdown(self):
    6. return mark_safe(markdown(self.message, safe_mode='escape'))

    这里我们正在处理用户的输入,所以我们需要小心一点。当使用 Mardown 功能时,我们需要先让它转义一下特殊字符,然后再解析出 Markdown 标签。这样做之后,输出字符串可以安全的在模板中使用。

    现在,我们只需要在模板 topic_posts.htmlreply_topic.html 中修改一下 form。

    修改为:

      Django入门与实践-第25章:Markdown支持 - 图1

      我们还可以添加一个名为 [SimpleMD](**)** 的非常酷的 Markdown 编辑器。

      可以下载 JavaScript 库,后者使用他们的CDN:

      现在来编辑一下 base.html ,为这些额外的Javascripts声明一个block (译者注:方便其他模板继承):

      templates/base.html 查看完整文件

      1. <script src="{% static 'js/jquery-3.2.1.min.js' %}"></script>
      2. <script src="{% static 'js/popper.min.js' %}"></script>
      3. <script src="{% static 'js/bootstrap.min.js' %}"></script>
      4. {% block javascript %}{% endblock %} <!-- Add this empty block here! -->

      templates/reply_topic.html

      默认情况下,这个插件会将它找到的第一个文本区域转换为 markdown 编辑器。所以这点代码应该就足够了:

      接下来在 edit_post.html 模板中做同样的操作:

      templates/edit_post.html 查看完整文件

      1. {% extends 'base.html' %}
      2. {% load static %}
      3. {% block stylesheet %}
      4. <link rel="stylesheet" href="{% static 'css/simplemde.min.css' %}">
      5. {% endblock %}
      6. {% block javascript %}
      7. <script src="{% static 'js/simplemde.min.js' %}"></script>
      8. <script>
      9. var simplemde = new SimpleMDE();

      Django入门与实践-第25章:Markdown支持 - 图2