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

Django模板:如何将关联日期字段注入同对象的富文本字段?

解决Django富文本字段中模板变量的渲染问题

方法一:利用Django模板引擎二次渲染(适合需要复杂模板逻辑的场景)

直接使用|safe过滤器仅能让HTML内容生效,无法解析其中的模板变量。要实现变量替换,需用Django模板系统对富文本内容进行二次渲染:

  1. 导入必要模块
    在视图文件顶部添加:
from django.template import Template, Context
  1. 修改视图函数
    获取活动和日期数据后,将富文本内容作为模板传入上下文变量渲染:
def activity(request, slug):
    template = 'event/activity.html'
    activity = Activity.objects.get(slug=slug)
    date = Date.objects.filter(activity=activity, date__gte=DATE_TODAY)[:1].get()
    
    # 解析富文本中的模板变量
    intro_template = Template(activity.introduction)
    intro_context = Context({'date': date})
    rendered_introduction = intro_template.render(intro_context)
    
    context = {
        'activity': activity,
        'date': date,
        'rendered_introduction': rendered_introduction
    }
    return render(request, template, context)
  1. 修改模板代码
    使用渲染后的内容,保留|safe确保HTML标签生效:
{{ rendered_introduction|safe }}

方法二:简单字符串替换(适合仅需替换单个/少数变量,安全性更高)

若无需复杂模板逻辑,仅替换日期变量,直接用字符串替换更安全,可避免模板注入风险:

  1. 修改数据库占位符
    将富文本中的{{ date.date }}替换为自定义占位符,比如{activity_date}:

Wednesday six weeks before Easter Sunday – {activity_date}, – is a Christian holy day of fasting,

  1. 修改视图函数
    对富文本内容做字符串替换,同时格式化日期显示:
def activity(request, slug):
    template = 'event/activity.html'
    activity = Activity.objects.get(slug=slug)
    date = Date.objects.filter(activity=activity, date__gte=DATE_TODAY)[:1].get()
    
    # 替换占位符为格式化后的日期
    formatted_date = date.date.strftime('%Y年%m月%d日')
    rendered_introduction = activity.introduction.replace('{activity_date}', formatted_date)
    
    context = {
        'activity': activity,
        'date': date,
        'rendered_introduction': rendered_introduction
    }
    return render(request, template, context)
  1. 模板代码同方法一
{{ rendered_introduction|safe }}

注意事项

  • 方法一存在模板注入风险,仅当富文本由可信用户(如管理员)输入时使用,防止恶意用户插入危险模板代码。
  • 方法二的字符串替换更安全,适合公开用户提交内容的场景,还可自定义日期格式(如%m/%d/%Y)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 12:50:18