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

Django邮件模型添加请求详情链接失效问题求助

问题原因分析
  1. 模板标签无法在字段中解析:你在content字段中写入的{% url %}是Django模板语法,数据库存储的只是字符串,渲染邮件详情时,模板引擎不会解析字段内部的模板标签,只会原样输出。
  2. HTML自动转义:Django默认会对{{ object.content }}输出的内容进行HTML转义,导致你写的<a>等标签被转成文本显示,无法渲染成可点击的链接。
  3. 拼写错误:代码中request-defail大概率是笔误,正确的URL名称应该是request-detail,这会导致即使解析也找不到对应路由。
修复步骤

1. 生成实际URL存入数据库

在创建Mail对象时,直接用Django的reverse函数生成完整的URL,而不是写入模板标签:

from django.urls import reverse

# 修正URL名称的拼写错误:request-defail → request-detail
request_url = reverse('request-detail', args=[self.get_object().id])
m = Mail(
    sender=self.request.user,
    to=self.get_object().student,
    title='Request Confirmed',
    content=f'Your request has been confirmed by {self.request.user.username}.' 
            f'\n<small class="text-muted"><a class="ml-2" href="{request_url}">Click here to view details of the request</a></small>'
)
m.save()  # 别忘了保存对象

2. 关闭模板中的HTML转义

在邮件展示模板里,使用|safe过滤器告诉Django这个字段的内容是安全的HTML,不需要转义:

<article class="media content-section">
    <img class="rounded-circle article-img" src="{{ object.sender.profile.image.url }}" alt="">
    <div class="media-body">
        <div class="article-metadata">
            <a class="mr-2" href="{% url 'user-profile' object.sender.username %}">{{ object.sender.username }}</a>
            <small class="text-muted">{{ object.sent_time }}</small>
        </div>
        <h2 class="article-title">{{ object.title }}</h2>
        <!-- 添加|safe过滤器 -->
        <p class="article-content">{{ object.content|safe }}</p>
    </div>
</article>

额外注意

  • 确保request-detail这个URL名称在你的urls.py中确实存在,并且参数匹配(这里用的是位置参数args,如果URL用的是关键字参数,需要改用kwargs={'pk': self.get_object().id})。
  • 如果content字段后续会包含用户输入的内容,直接用|safe会有XSS风险,但当前场景是后台生成的内容,安全性可控。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 08:57:14