You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django项目的Markdown内容中添加跨应用的内部链接

Django Markdown内容内部跨应用路由跳转实现方案

你可以通过自定义Python-Markdown扩展的方式实现需求,具体步骤如下:

步骤1:编写自定义链接解析扩展

修改你项目中的markdown_extras.py文件,新增内部路由解析逻辑:

import re
from django.urls import reverse
from markdown.extensions import Extension
from markdown.inlinepatterns import LinkInlineProcessor, LINK_RE

# 自定义内部链接处理器
class DjangoInternalLinkProcessor(LinkInlineProcessor):
    def getLink(self, data, index):
        href, title, index, handled = super().getLink(data, index)
        # 匹配你定义的内部路由格式:应用名:路由名 参数
        internal_route_pattern = r'^(\w+):(\w+)\s+([\w-]+)$'
        match_res = re.match(internal_route_pattern, href)
        if match_res:
            app_name, route_name, param = match_res.groups()
            try:
                # 调用Django reverse生成正确的路由地址
                href = reverse(f"{app_name}:{route_name}", args=(param,))
            except:
                # 路由匹配失败时保留原内容,避免报错
                pass
        return href, title, index, handled

# 注册扩展
class DjangoInternalLinkExtension(Extension):
    def extendMarkdown(self, md):
        # 优先级设为170,高于默认的链接处理器(默认优先级160)
        md.inlinePatterns.register(
            DjangoInternalLinkProcessor(LINK_RE, md),
            "django_internal_link",
            170
        )

步骤2:修改Markdown渲染函数

在你已有的markdown()渲染函数中引入上述扩展:

def markdown(content):
    import markdown as md
    return md.markdown(
        content,
        extensions = [
            # 保留你之前用到的其他Markdown扩展,如fenced_code、toc等
            DjangoInternalLinkExtension() # 新增内部路由解析扩展
        ]
    )

效果验证

配置完成后,你写的Markdown内容 I recommend [this product](main:product best-product) for you. 会被自动解析为正确的链接:

I recommend <a href="/products/best-product">this product</a> for you.

适配优化

  • 如果你的路由需要传递多个参数,只需要修改正则匹配规则,支持空格分隔多个参数,reverse时传入对应参数列表即可。
  • 如果需要生成带域名的全路径链接,可以在reverse时传入request对象,或者通过Django sites框架获取当前站点域名拼接即可。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 06:24:02