Flask框架实现Markdown过滤器与文件读取展示

Luna
Luna
发布时间:2026-10-13| 4人浏览过
原创

本文介绍如何在Flask框架中自定义模板过滤器,将Markdown语法转换为HTML。通过安装Markdown库并注册@app.template_filter,实现md过滤器的使用。此外,结合上下文处理器注入读取文件的函数,支持在模板中直接调用并展示本地Markdown文件内容,适用于简单的文档展示场景。

Flask自定义Markdown过滤器与文件读取示例

本文详细介绍Flask框架中自定义过滤器的实现方法,提供相关代码示例供参考。

除了Flask内置的join、length、safe等常用过滤器外,框架还支持用户自定义过滤器功能。

定义Markdown过滤器

一、定义Markdown过滤器

我们需要创建一个自定义的Markdown过滤器,使其能够像safe过滤器解析HTML标签那样,解析Markdown语法。

  • 首先安装必要的依赖库。

安装依赖库


pip install Markdown==2.3.1
  • 接下来编写自定义过滤器的代码。

利用@app.template_filter('md')装饰器注册过滤器,此时即可在模板中使用名为md的过滤器。

编写过滤器代码


@app.template_filter('md')
def markdown_to_html(txt):
  from markdown import markdown
  return markdown(txt)

  • 以下是具体的使用示例。

在views模块中定义路由。

视图路由示例


@app.route('/', methods=['POST', 'GET'])
def index():
  return render_template('index.html', body='# hello')

  • 在HTML模板中直接调用该过滤器。

模板调用示例


{{ body|md|safe }}

实现文件读取功能

二、增加读取文件的功能

实现读取Markdown文件,并将其内容渲染为HTML输出。

  • 定义用于读取文件的函数。

读取文件函数定义


def read_md(filename):
  with open(filename) as md_file:
    content = reduce(lambda x, y: x+y, md_file.readline())
  return content.decode('utf-8')

  • 使用上下文管理器处理文件操作。

此时,read_md函数可以在整个应用中全局使用。

上下文处理器注入


@app.context_processor
def inject_methods():
  return dict(read_md=read_md)

  • 在模板中直接调用该函数。

模板中调用文件内容


{{ read_md('test.md')|md|safe}}

希望本文的内容对基于Flask框架的Python开发有所帮助。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。