Django模版过滤器Markdown

Django有很多内置的模板过滤器,允许你修改模板中的变量。过滤器看起来{{variable|my_filter}}。

带参数的过滤器类似于{{variable|my_filter:"foo"}}。您可以对一个变量应用任意多的过滤器,例如,{{variable|filter1|filter2}},它们中的每一个都将应用于前面生成的输出。

创建一个自定义过滤器,以便能够在博客文章中使用markdown语法,然后在模板中将文章内容转换为HTML。

使用pip安装markdown模块

bash 复制代码
python -m pip install Markdown

编辑blog_tags.py

python 复制代码
from django import template
from django.utils.safestring import mark_safe
import markdown

register = template.Library()

@register.filter(name='markdown')
def markdown_format(text):
    return mark_safe(markdown.markdown(text))

blog_tags的代码在自定义模版标签时创建,更多内容请看

Django自定义模版标签-CSDN博客

为了避免函数名和markdown模块之间的冲突,我们将函数名命名为markdown_format,并将过滤器名命名为markdown,以便在模板中使用,例如{{variable|markdown}}。

Django会转义过滤器生成的HTML代码。使用Django提供的mark_safe函数将结果标记为模板中呈现的安全HTML。

📌t默认情况下,Django不会信任任何HTML代码,并且会在将其放入输出之前进行转义。唯一的例外是那些被标记为可安全转义的变量。

现在,在帖子列表和详细信息模板中加载模板标记模块。

在blog/post/list.html和blog/post/detail.html模板的顶部{% extends %}标签之后添加以下一行:

{% load blog_tags %}

编辑 post/detail.html模版
{{ post.body|linebreaks }}
替换为
{{ post.body|markdown }}

编辑post/list.html 模版
{{ post.body|truncatewords:30|linebreaks }}
替换为
{{ post.body|markdown|truncatewords_html:30 }}

📌truncatewords_html过滤器在一定数量的单词之后截断字符串,避免未关闭的HTML标记。

有关自定义过滤器更多信息,请查看如何编写自定义的模板标签和过滤器 | Django 文档 | Django (djangoproject.com)

相关推荐
AAA简单玩转程序设计13 小时前
Python 基础再升级!5 个超实用小技巧,写代码快人一步
python
dagouaofei14 小时前
2026 年工作计划汇报 PPT:多种 AI 方案对比评估
人工智能·python·powerpoint
唐叔在学习14 小时前
用python实现类AI自动执行终端指令
后端·python·自动化运维
前端程序猿之路14 小时前
AI大模型应用开发之容器化部署
人工智能·python·语言模型·云原生·eureka·ai编程·改行学it
创新技术阁14 小时前
CryptoAiAdmin项目数据库表自动创建和初始化
后端·python·fastapi
Blossom.11814 小时前
多模态视频理解实战:从0到1构建视频-文本对齐大模型
人工智能·python·深度学习·神经网络·重构·音视频·知识图谱
轻竹办公PPT14 小时前
2026 年年度工作计划 PPT:AI 自动生成方案横向对比
人工智能·python·powerpoint
执笔论英雄14 小时前
【RL】op_compute_log_probs 计算过程
人工智能·pytorch·python
Hiweir ·14 小时前
ROS Noetic教程------VSCode创建ROS话题通讯--发布方的简单流程
vscode·python·ros noetic·ros noetic教程
deephub14 小时前
dLLM:复用自回归模型权重快速训练扩散语言模型
人工智能·python·语言模型·大语言模型