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

Django渲染含uid/token的邮件模板时出现NoReverseMatch报错如何解决

问题根因

你的排查方向是正确的,问题就出在视图层生成uid的代码行:
Django 3.1及更高版本中,urlsafe_base64_encode() 函数返回值为bytes类型,而模板中{% url %}标签生成激活路由时,要求传入的uidb64参数必须是字符串类型,类型不匹配导致路由反向解析失败。

修复方案

修改视图中传递uid的代码,将编码后的bytes值转成字符串即可:

# 原代码
'uid': urlsafe_base64_encode(force_bytes(user.pk)),
# 修改为
'uid': urlsafe_base64_encode(force_bytes(user.pk)).decode('utf-8'),

修改后传递到邮件模板的uid就是符合路由正则规则的字符串,路由反向解析即可正常执行,不会再触发NoReverseMatch报错。你提供的路由配置、模板参数命名、token生成逻辑均无问题,无需额外调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 00:18:04