我一直在制作一个包含列表视图和表单视图的网站。我有一个 form.py ,如下所示:
from django import forms
class ContactForm(forms.Form):
name = forms.CharField(required=True)
email = forms.EmailField(required=True)
message = forms.CharField(required=True)
Run Code Online (Sandbox Code Playgroud)
和views.py:
from django.shortcuts import render
from .forms import ContactForm
from django.views.generic import ListView
from django.views.generic.edit import FormMixin
from blog.models import Post
from django.core.mail import EmailMessage
class PostListAndFormView(FormMixin,ListView):
queryset = Post.objects.all().order_by("-date")[:2]
template_name = 'personal/index.html'
form_class = ContactForm
success_url = 'personal/index.html'
Run Code Online (Sandbox Code Playgroud)
此视图还处理您可以忽略的列表视图功能。
我的 HTML 模板是:
<form action="/" method="post">
{% csrf_token %}
{{ form }}
<input type="submit" value="SEND MESSAGE" />
</form>
Run Code Online (Sandbox Code Playgroud)
最后是 urls.py :
from django.conf.urls import url,include
from . import views
from homepage.views import PostListAndFormView
urlpatterns = [
url(r'^$', PostListAndFormView.as_view(), name='PostListAndFormView'),
]
Run Code Online (Sandbox Code Playgroud)
我想要做的是从表单中获取数据,并将包含输入数据的电子邮件发送到我的地址。有人帮我做这件事。
不知道为什么你把列表视图和表单视图混淆了。从你的模型来看,它是一个博客应用程序。通常在博客应用程序中,文章/帖子列表页面不包含任何带有电子邮件字段的表单,除了文章详细信息或联系我们页面。与使用 mixin 相比,我更喜欢将其分成不同的类。
我的回答基于 Daniel Greenfeld 的示例,稍加修改。
在 yourapp/forms.py 中:
from crispy_forms.helper import FormHelper
from crispy_forms.layout import Submit
import floppyforms as forms
class ContactForm(forms.Form):
name = forms.CharField(required=True)
email = forms.EmailField(required=True)
subject = forms.CharField(required=True)
message = forms.CharField(widget=forms.Textarea)
def __init__(self, *args, **kwargs):
self.helper = FormHelper()
self.helper.add_input(Submit('submit', 'Submit'))
super(ContactForm, self).__init__(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
在 yourapp/views.py 中:
from django.views.generic.list import ListView
from django.views.generic.edit import FormView
from django.conf import settings
from django.core.mail import send_mail
from yourapp.models import Post
from yourapp.forms import ContactForm
class PostListView(ListView):
model = Post
def get_context_data(self, **kwargs):
context = super(ArticleListView, self).get_context_data(**kwargs)
context['latest_articles'] = Post.objects.all()[:5]
return context
class ContactFormView(FormView):
form_class = ContactForm
template_name = "myapp/email_form.html"
success_url = '/email-sent/'
# this is what you want
def form_valid(self, form):
message = "{name} / {email} said: ".format(
name=form.cleaned_data.get('name'),
email=form.cleaned_data.get('email'))
message += "\n\n{0}".format(form.cleaned_data.get('message'))
send_mail(
subject=form.cleaned_data.get('subject').strip(),
message=message,
from_email='contact-form@myapp.com',
recipient_list=[settings.LIST_OF_EMAIL_RECIPIENTS],
)
return super(ContactFormView, self).form_valid(form)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4786 次 |
| 最近记录: |