/ share / 4'str'对象上的AttributeError没有属性'get'

时间:2018-06-26 10:32:58

标签: python django attributeerror

我正在尝试使用gmail smtp服务器使用django发送电子邮件,我在 setting.py 中写入设置。这是我的其他代码,但是我在/ share / 4'str'对象处出现AttributeError没有属性“获取”?请帮助我解决该错误。

**forms.py**

from django import forms 

class EmailPostForm(forms.Form):
    name = forms.CharField(max_length=100)
    email = forms.EmailField()
    to = forms.EmailField()
    comment = forms.CharField(widget=forms.Textarea, required=False)

views.py

def share_email(request, id):
    post = get_object_or_404(Post, id=id)
    sent = False
    if request.method == 'POST':
        form = EmailPostForm(data=request.method)
        if form.is_valid():
            cd = form.cleaned_data
            post_url = 
            request.build_absolute_uri(post.get_absolute_url())
            subject = '{} ({}) recommend you reading "{}"'.format(cd['name'], cd['email'], post.title)
            message = 'Read "{}" at {}\n\n{}\'s comments: {}'.format(post.title, post_url, cd['name'], cd['comment'])
            send_mail(subject, message, 'admin@gmail.com', cd['to'])
            sent = True
    else:
        form = EmailPostForm()
    return render(request, 'blog/post/share_post.html', {'post': post, 'form': form, 'sent': sent})

url.py

urlpatterns = [path('share/<int:id>', views.share_email, name='share_post'),]

share_post.html

 {% extends 'blog/base.html' %}
    {% block title %}
     Share Post
    {% endblock %}
    {% block content %}
    {% if sent %}
        <h2>E-mail successfully sent</h2>
        <p>{{ post.title }} is successfully dent by email</p>
    {% else %}
        <h2>Share {{ post.title }} by email</h2>
        <form action="{% url 'blog:share_post' post.id %}" method="post">
        {{ form.as_p }}
        {% csrf_token %}
        <input type="submit" value="Send Email">
        </form>
    {% endif %}
    {% endblock %}

1 个答案:

答案 0 :(得分:4)

这里:

form = EmailPostForm(data=request.method)

您想要request.POST,而不是request.method

作为旁注:a successful post should be followed by a redirect(以防止重新加载页面以重新发布相同的数据)。您可以使用contrib.messages app设置会话中的消息,然后将其显示在下一页。