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
相关产品推荐
相关产品推荐

