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

Django中发送含ID的用户邮箱链接,ID无法识别求助

解决Django邮件中ID链接无法识别的问题

问题核心在于模板未获取到实际ID参数,且硬编码URL格式错误,以下是具体修复步骤:

1. 传递ID到邮件模板

在views.py调用render_to_string时,必须将实际的id传入模板上下文,否则模板无法拿到动态ID值:

def demande_participer(request, id):
    participers = Mission.objects.get(id=id)
    benParticiper = request.user  # 直接取当前用户,无需filter

    # 把ID作为上下文参数传给模板
    template = render_to_string('Association/email_template.html', {'mission_id': id})
    email = EmailMessage(
        'Veuillez confirmer votre participation à la mission proposée',
        template,
        settings.EMAIL_HOST_USER,
        [request.user.email],
    )
    email.fail_silently = False  # 修复拼写错误:fail_silenty → fail_silently
    email.send()

2. 在模板中生成正确链接

不要硬编码URL,用Django的{% url %}标签生成符合路由规则的链接,避免格式错误:

{% load crispy_forms_tags %}
{% block content %}
Confirmé la Participation

{# 通过url标签传入mission_id,生成正确链接 #}
http://127.0.0.1:8000{% url 'demande_participer' mission_id %}

{% endblock %}

更优方案:自动生成完整绝对URL

如果不想硬编码域名和端口,可在视图中用request.build_absolute_uri生成完整链接:

from django.urls import reverse

def demande_participer(request, id):
    participers = Mission.objects.get(id=id)
    benParticiper = request.user

    # 生成带域名的完整确认链接
    confirm_url = request.build_absolute_uri(reverse('demande_participer', args=[id]))
    template = render_to_string('Association/email_template.html', {'confirm_url': confirm_url})
    # 后续邮件发送代码不变

模板中直接使用变量即可:

{% load crispy_forms_tags %}
{% block content %}
Confirmé la Participation

{{ confirm_url }}

{% endblock %}

额外提示

  • 路由<int:id>是位置参数,使用reverse时需用args=[id]传递;若路由用命名参数则传kwargs={'id': id}
  • 修复了邮件主题的拼写错误(a la→à la,proposer→proposée),保证内容规范性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 14:14:39