如何向django表单发送消息

时间:2015-07-25 18:31:14

标签: python django

最初我用PHP编写了一个脚本,因为我把html放在.php文件中,所以在向数据库添加数据时很容易显示一条消息。

现在我想在Django中做同样的事情。我有简单的表单,并查看添加数据。添加完成后,我想在“发送”按钮下面显示一些div信息,所以我不想加载任何其他模板。我想在同一个模板中显示消息,我的表单在哪里。

没有ajax可以吗?这该怎么做?

4 个答案:

答案 0 :(得分:4)

Django为此类Flash消息提供内置消息支持。

您可以在视图中添加如下成功消息:

messages.success(request, 'Profile details updated.')

在模板中,您可以按如下方式呈现它:

{% if messages %}
<ul class="messages">
    {% for message in messages %}
    <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
    {% endfor %}
</ul>
{% endif %}

此链接中记录了此信息: https://docs.djangoproject.com/en/1.8/ref/contrib/messages/

答案 1 :(得分:0)

如何将变量传递给模板?

(@ views.py)

return render(request, "some_app/some_template.html", context={
        'sent': True
    })

然后在某处 (@ some_template.html)

{% if sent %}
<div> blah blah</div>
{% endif %}

编辑:修正错别字:/

答案 2 :(得分:0)

如果您使用的是基于类的视图,请使用已实现的mixin

from django.contrib.messages.views import SuccessMessageMixin
from django.views.generic.edit import CreateView
from myapp.models import Author

class AuthorCreate(SuccessMessageMixin, CreateView):
    model = Author
    success_url = '/success/'
    success_message = "%(name)s was created successfully"

答案 3 :(得分:0)

这是使用联系人页面的基于类的视图的基本版本。它在原始表单上方显示成功消息。

mywebapp / forms.py

### forms.py
from django import forms

class ContactForm(forms.Form):
    contact_name = forms.CharField(label='Your Name', max_length=40, required=True)
    contact_email = forms.EmailField(label='Your E-Mail Address', required=True)
    content = forms.CharField(label='Message', widget=forms.Textarea, required=True)

mywebapp / views.py

### views.py
from django.contrib.messages.views import SuccessMessageMixin
from django.core.mail import EmailMessage
from django.core.urlresolvers import reverse_lazy
from django.template.loader import get_template
from django.views.generic import TemplateView, FormView
from mywebapp.forms import ContactForm

class ContactView(SuccessMessageMixin, FormView):
    form_class = ContactForm
    success_url = reverse_lazy('contact')
    success_message = "Your message was sent successfully."
    template_name = 'contact.html'

    def form_valid(self, form):
        contact_name = form.cleaned_data['contact_name']
        contact_email = form.cleaned_data['contact_email']
        form_content = form.cleaned_data['content']
        to_recipient  = ['Jane Doe <info@example.com>']
        from_email = 'John Smith <postmaster@example.com>'
        subject = 'Website Contact'

        template = get_template('contact_template.txt')
        context = {
            'contact_name': contact_name,
            'contact_email': contact_email,
            'form_content': form_content
        }
        content = template.render(context)

        email = EmailMessage(
            subject,
            content,
            from_email,
            to_recipient,
            reply_to=[contact_name + ' <' +contact_email + '>'],
        )
        email.send()
        return super(ContactView, self).form_valid(form)

模板/ contact.html

### templates/contact.html
{% extends 'base.html' %}
{% block title %}Contact{% endblock %}
{% block content %}

{% if messages %}
<ul class="messages">
    {% for message in messages %}
    <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
    {% endfor %}
</ul>
{% endif %}

<form role="form" action="" method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">Submit</button>
</form>
{% endblock %}

模板/ contact_template.txt

### templates/contact_template.txt
### used to render the body of the email

Contact Name: {{contact_name}}
Email: {{contact_email}}
Content: {{form_content}}

配置/ urls.py

### config/urls.py
from mywebapp.views import *
urlpatterns = [
    url(r'^about/', AboutView.as_view(), name='about'),
    url(r'^contact/$', ContactView.as_view(), name='contact'),
    url(r'^$', IndexView.as_view()),
]