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

在Django的send_mail函数内用if-elif报错,寻求解决方法

修复Django send_mail参数中的语法错误

你遇到的错误是因为Python不允许在函数参数列表内部直接编写if/elif这类流程控制语句,参数列表里只能放置参数值或合法的表达式,不能插入语句块。

修复方法一:提前计算参数值(推荐,逻辑清晰)

先在send_mail外部根据条件算出recipient_list的值,再传入函数:

# 先确定收件人邮箱
if inquiry_user == self.request.user:
    recipient_list = [post.user.email]
elif post.user == self.request.user:
    recipient_list = [inquiry_user.email]
else:
    # 处理其他边界情况,避免变量未定义报错
    recipient_list = []

# 调用send_mail
send_mail(
    subject='New message', 
    message='Access to http://localhost:3000/messagerooms', 
    from_email=settings.EMAIL_HOST_USER, 
    recipient_list=recipient_list
)

注意:recipient_list要求是列表类型,即使只有一个邮箱,也建议用[邮箱字符串]的形式,符合Django的参数规范。

修复方法二:使用三元表达式(适合简单二选一场景)

如果只有两种分支情况,可以用三元表达式直接在参数位置生成值:

send_mail(
    subject='New message', 
    message='Access to http://localhost:3000/messagerooms', 
    from_email=settings.EMAIL_HOST_USER, 
    recipient_list=[post.user.email] if inquiry_user == self.request.user else [inquiry_user.email]
)

这种写法更简洁,但如果有更多分支或需要处理边界情况,还是第一种方法更易维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 22:47:09