首页 > 解决方案 > 如何从一个视图中在每个模板中显示 django 成功消息?

问题描述

在这里,我有一个功能newsletter将在项目中的每个模板中使用。这里的问题是成功消息仅显示在联系页面模板中。我已将 django 消息标记放在唯一中。它在页面{{message}}中工作base.html正常contact.html.联系人和时事通讯的相应消息在contact_page模板中正确显示,但在其他模板中不正确。其他模板也扩展base.htmlcontact.html.

我如何在每个模板中显示时事通讯成功消息。我不想{{message}}在每个模板中都写。有什么解决方案吗?

视图.py

def contact(request):
    form = ContactForm()
    if request.method == 'POST':
        form = ContactForm(request.POST)
        if form.is_valid():
            form.save()
            messages.success(request, 'Your message has been sent successfully.')
            return redirect('contact:contact_page')
    return render(request, 'contact/contact_page.html', {'form': form})


def newsletter(request):
    form = NewsletterForm()
    if request.method == "POST":
        form = NewsletterForm(request.POST)
        if form.is_valid():
            form.save()
            messages.success(request, 'Thank you for your subscription.')
            return redirect(request.META['HTTP_REFERER'])
    return render(request, 'base.html', {'news_form': form})

标签: djangodjango-views

解决方案


创建 base.html 仅包含指向样式表和 js 文件的链接。在那里你可以放置

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

就在块内容之上,并从中扩展所有其他模板。所以最好制作一个home.html文件并将新闻信呈现到那里,并将其从base.html. 参考文档


推荐阅读