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

如何编写Django自定义模板标签实现TextField链接文本自定义

实现支持自定义显示文本的Django超链接模板标签

针对你的需求——将存储在SiteDataKeyValue中的带自定义显示文本的链接转换为标准HTML超链接,这里提供一套完整的自定义模板标签实现方案:

1. 创建自定义模板标签文件

在你的Django应用目录下,新建templatetags文件夹(如果没有的话),并在其中创建两个文件:

  • __init__.py(空文件即可,用于标识这是一个Python包)
  • custom_tags.py(编写自定义标签的核心文件)

2. 编写模板标签代码

在custom_tags.py中写入以下代码:

from django import template
import re

register = template.Library()

@register.filter(name='custom_urlize')
def custom_urlize(text):
    # 匹配Markdown风格的链接格式:[显示文本](链接地址)
    pattern = re.compile(r'\[([^\]]+)\]\((https?://[^\)]+)\)')
    # 替换为带nofollow属性的HTML超链接
    return pattern.sub(r'<a href="\2" rel="nofollow">\1</a>', text)

3. 在模板中使用该标签

在需要渲染动态文本的模板文件中,先加载自定义标签库,再使用过滤器处理文本:

{% load custom_tags %}

<!-- 假设site_data是从SiteDataKeyValue查询到的实例 -->
{{ site_data.value|custom_urlize }}

4. 数据存储格式

在SiteDataKeyValue的value字段中,你需要按照Markdown链接格式存储内容,例如:

需要了解更多信息?[点击这里!](https://www.google.com) 查看详情。

渲染后会生成:

需要了解更多信息?<a href="https://www.google.com" rel="nofollow">点击这里!</a> 查看详情。

额外说明

  • 该正则表达式支持http和https开头的链接,若需要支持其他协议(如ftp),可以修改正则中的https?部分。
  • 如果需要对输出的HTML进行安全验证,可结合Django的safe过滤器(确保你信任存储的内容,避免XSS风险):
    {{ site_data.value|custom_urlize|safe }}
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 16:40:41