首页 > 解决方案 > 我从 django send_messages() 收到一个错误 AttributeError 'str' object has no attribute send_messages()

问题描述

我不知道从哪里开始寻找 send_messages(); 中的 str 。我相信我的 URL 路径配置不正确,但我没有收到 ImproperlyConf Url 错误。我已附上用于查看 URL 的代码和我尝试从中发送电子邮件的模板

#views.py

def email_invite(request):
    profile = get_object_or_404(Profile, user=request.user)
    if request.method == 'POST':
        form = EmailInviteForm(request.POST)
        if form.is_valid():
            cd = form.cleaned_data
            name = f'{cd["name"]}'
            subject = f'{cd["name"]} has sent you a invitation'
            email = f'{cd["email"]}'
            to = [f'{cd["to"]}']
            comment = f'{cd["comment"]}'
            with open(str(settings.BASE_DIR.joinpath('templates/profiles/email/email_invite_message.txt'))) as f:
                invite_message = f.read()
            html_template = get_template('profiles/email/email_invite_message.html').render()
            msg = EmailMultiAlternatives(subject, comment, invite_message, [email], [to], name)
            msg.attach_alternative(html_template, "text/html")
            msg.send()
            messages.success(request, 'Your email has been sent')
            return redirect('home')
            # return HttpResponseRedirect(reverse('profiles:find_friends'))
    else:
         form = EmailInviteForm()
    
    template = 'profiles/email_invite.html'
    context = {
        'form': form,
    }
    return render(request, template, context)

我认为是错误根源的 URL

#urls.py

  path('email-invite/', views.email_invite, name='email_invite'),

#email_invite.html

{% extends '_base.html' %}
{% load crispy_forms_tags %}

{% block extra_title %}Email an invite{% endblock extra_title %}

{% block content %}
<div class="container">
    <h1>Send a friend an invite to join you</h1>
    <p class="pages-p">
        Use the form to invite a friend or family member to sign up.

    </p>
    <form action="" method="post">
        {% csrf_token %}
        {{ form|crispy }}
        <button type="submit" class="btn btn-outline-success"><i class="fas fa-envelope"></i></button>
    </form>
</div>
{% endblock content %}

回溯错误是:

Traceback (most recent call last):
  File "/usr/local/lib/python3.8/site-packages/django/core/handlers/exception.py", line 47, in inner
    response = get_response(request)
  File "/usr/local/lib/python3.8/site-packages/django/core/handlers/base.py", line 179, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/code/profiles/views.py", line 187, in email_invite
    msg.send()
  File "/usr/local/lib/python3.8/site-packages/django/core/mail/message.py", line 284, in send
    return self.get_connection(fail_silently).send_messages([self])

Exception Type: AttributeError at /profiles/email-invite/
Exception Value: 'str' object has no attribute 'send_messages'

任何方向都会很棒。我已经搜索了文档和网络,但我并不真正理解错误消息,当我将其放入搜索时,没有出现类似的情况。

TIA

标签: django

解决方案


您将错误的参数传递给EmailMultiAlternatives. 喜欢下面的代码

msg = EmailMultiAlternatives(subject, comment, invite_message, [email], [to], name)

你只能传递这些参数

EmailMultiAlternatives(subject='', body='', from_email=None, to=None, bcc=None, connection=None, attachments=None, headers=None, alternatives=None, cc=None, reply_to=None)

推荐阅读