You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Django中启用Markdown渲染表单提交的文本内容?

嗨,我来帮你搞定在Django里用Markdown渲染文本的需求~其实步骤很清晰,咱们一步步来:

1. 安装必要的依赖包

首先得装处理Markdown的库,还得加个安全过滤工具防止恶意代码,打开终端跑这行命令:

pip install markdown bleach

2. 自定义模板过滤器(最灵活的方式)

Django的模板系统支持自定义过滤器,咱们做一个能把Markdown转成安全HTML的过滤器:

  • 在你的learning_logs应用目录下,新建一个templatetags文件夹,里面放两个文件:
    • 空的__init__.py(告诉Python这是个可导入的模块)
    • markdown_tags.py(写过滤器逻辑的文件)

把下面的代码放进markdown_tags.py

from django import template
import markdown
import bleach

register = template.Library()

@register.filter(name='markdownify')
def markdownify(text):
    # 只允许这些安全的HTML标签,避免XSS攻击
    allowed_tags = [
        'a', 'abbr', 'acronym', 'b', 'blockquote', 'code',
        'em', 'i', 'li', 'ol', 'pre', 'strong', 'ul',
        'h1', 'h2', 'h3', 'p'
    ]
    # 先把Markdown转成HTML,再清理掉不安全的标签
    html_content = markdown.markdown(text)
    return bleach.clean(html_content, tags=allowed_tags, strip=True)

3. 在模板里使用过滤器

回到你的模板文件,首先在顶部加载咱们的自定义标签:

{% load markdown_tags %}

然后把原来渲染文本的那行代码替换成:

{{ entry.text|markdownify|safe }}

为啥要这么做?

  • markdownify过滤器会把用户输入的Markdown语法转成对应的HTML
  • bleach会过滤掉所有不在允许列表里的标签,防止用户提交恶意代码(比如<script>
  • |safe告诉Django这个处理后的HTML是安全的,可以直接渲染,不用转义

现在你再提交包含Markdown语法的内容,比如**加粗文本**# 一级标题或者- 列表项,页面上就会显示成格式化后的效果啦~

内容的提问来源于stack exchange,提问作者Wizard

火山引擎 最新活动