Как отобразить django успешных сообщений в каждом шаблоне из одного представления? - PullRequest
0 голосов
/ 16 февраля 2020

Здесь у меня есть одна функция для newsletter, которая будет использоваться в каждом шаблоне в проекте. Проблема в том, что сообщение об успехе отображается только в шаблоне страницы контакта. Я поместил django тег сообщения {{message}} только на base.html. Работает нормально на странице contact.html. Соответствующее сообщение для контакта и новостной рассылки корректно отображается в шаблоне contact_page, но не в других шаблонах. Другие шаблоны также расширяют base.html, как contact.html.

Как отобразить сообщение об успехе рассылки в каждом шаблоне. Я не хочу писать {{message}} в каждом шаблоне. Есть ли какое-то решение для этого?

views.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})

1 Ответ

0 голосов
/ 16 февраля 2020

создать базу. 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. См. до c

...