列表索引必须是整数或切片,而不是str Django

问题描述 投票:0回答:1

我遇到此错误。我是Django的新手。我正在尝试使用django发送邮件。

Tracke Back:

  response = self.process_exception_by_middleware(e, request)
  File "/home/bari/Desktop/email_send/env/lib/python3.6/site-packages/django/core/handlers/base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/home/bari/Desktop/email_send/Simple_Email_Send_Project/email_app/views.py", line 36, in send_mail
    message_body = form.changed_data["message_body"]
TypeError: list indices must be integers or slices, not str
[05/Jun/2020 17:55:22] "POST / HTTP/1.1" 500 69463

我的views.py

def send_mail(request):

    form = SendMailForm(request.POST)
    template = 'send_mail.html'
    if form.is_valid():
        subject = form.cleaned_data["subject"]
        message_body = form.changed_data["message_body"]
        email_address = form.cleaned_data["email_address"]

    try:
        mail = EmailMessage(subject, message_body, settings.EMAIL_HOST_USER, [email_address])
        mail.send()
        return render(request, template,
                      {'email_form': form, 'error_message': 'Sent mail to {}'.format(email_address)})

    except:
        return render(request, template,
                      {'email_form': form, 'error_message': 'Email Send failed. Please try again later'})

我该如何解决这个问题?帮助将受到高度赞赏...

python django
1个回答
0
投票

根据this link处的Django文档>>

form.changed_data返回模型中字段的名称,这些数据已更改为初始表单。因为您的代码中没有任何初始参数,所以我认为它是一个typo

message_body = form.cleaned_data["message_body"]
        
© www.soinside.com 2019 - 2024. All rights reserved.