最初我用PHP编写了一个脚本,因为我把html放在.php文件中,所以在向数据库添加数据时很容易显示一条消息。
现在我想在Django中做同样的事情。我有简单的表单,并查看添加数据。添加完成后,我想在“发送”按钮下面显示一些div信息,所以我不想加载任何其他模板。我想在同一个模板中显示消息,我的表单在哪里。
没有ajax可以吗?这该怎么做?
答案 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()),
]