send_mail() 得到参数 'fail_silently' 的多个值 Django 联系表单只传递消息而不是名称或主题

send_mail() got multiple values for argument 'fail_silently' Django contact form only passing message not name or subject

所以我正在尝试使用 django 创建一个联系表单,但它可以工作,但仅适用于消息,我正在尝试为发件人姓名和他们的电子邮件创建一个区域。

这是我的 views.py

中的工作代码
from django.shortcuts import render
from django.core.mail import send_mail
from django.conf import settings



def index(request):

   if request.method == 'POST':
       message = request.POST('message')
       send_mail('Contact Form',
        message,
        settings.EMAIL_HOST_USER,
        ['myemail@gmail.com'], 
        fail_silently=False)
   return render(request, 'app/index.html')

和html

<h3>Contact Form</h3>

<form method="post" action="{% url 'index' %}">
    {% csrf_token %}
    <input type="text" name="name" placeholder="Your Full Name." />
    
    <textarea name="message" placeholder="Message..."></textarea>
    <input type="submit" />
</form>

如果我尝试设置

name = request.POST.get('name')

消息下方 = request.POST.get('message') 然后在 send_mail 函数中的消息后命名 我收到错误 send_mail() got multiple values for argument 'fail_silently' 我查看了文档,看到了几个不同的东西,但没有一个是我需要的。

更好的方法是创建 HTML 邮件格式页面。并传递该 HTML 页面中的所有数据。此 HTML 格式可用作 send_mail 'html_message' 字段中的消息。请检查以下代码段是否相同:

views.py:

def index(request):

   if request.method == 'POST':
       message = request.POST.get('message')
       name = request.POST.get('name')
       ctx = {
           'name' : name,
           'message' : message
       }
       message = render_to_string('mail.html', ctx)
       send_mail('Contact Form',
        message,
        settings.EMAIL_HOST_USER,
        ['myemail@gmail.com'], 
        fail_silently=False, html_message=message)
   return render(request, 'app/index.html')

mail.html :

<body>
  <h1>This is HTML page for mail</h1>
  <p>{{name}}</p>
  <p>{{message}}</p>
</body>