Рубрики
Без рубрики

Показать сообщение в просмотре на основе классов – Django

Вы хотите добавить сообщение после того, как пользователь отправил форму django: post, создать/обновить/удалить методы …. с меткой Django, Python, Middleware.

Вы хотите добавить Сообщение После Пользователь отправить Форма Джанго: Пост , Создать/обновить/удалить методы

Предварительные условия

У вас должны быть ниже конфигурации в ваших настройках, чтобы показать сообщения в Django :

# settings.py

INSTALLED_APPS = [
    "django.contrib.messages",
]

MIDDLEWARE = [
    "django.contrib.sessions.middleware.SessionMiddleware",
    "django.contrib.messages.middleware.MessageMiddleware",
]

TEMPLATES = [
    {
        "OPTIONS": {
            "context_processors": [
                "django.contrib.messages.context_processors.messages",
          ],
     },
]

Добавить сообщение

Вы можете обновить свои собственные методы или классы для добавления сообщений, однако лучше использовать то, что Django предоставляет уже: Успехмсагемиксин Анкет

Успехмсагемиксин добавляет атрибут сообщения успеха к FormView на основе классов:

from django.contrib import messages


class SuccessMessageMixin:
    """
    Add a success message on successful form submission.
    """
    success_message = ''

    def form_valid(self, form):
        response = super().form_valid(form)
        success_message = self.get_success_message(form.cleaned_data)
        if success_message:
            messages.success(self.request, success_message)
        return response

    def get_success_message(self, cleaned_data):
        return self.success_message % cleaned_data

Пример кода

В качестве экземпляра я покажу Просмотры , URL и Шаблон :

Взгляды

#views.py

from django.contrib.messages.views import SuccessMessageMixin
from django.urls import reverse_lazy
from django.views.generic.edit import UpdateView

from .forms import BookCreateForm


class BookUpdateView(SuccessMessageMixin, UpdateView):
    """
    List all Book objects, update a Book object in database and add a success
    message into template.
    """
    model = Book
    form_class = BookUpdateForm
    success_url = reverse_lazy('books:book-update')
    template_name = 'books/update.html'
    success_message = "%(book)s was updated successfully"

URL

# urls.py

from django.utils.translation import ugettext_lazy as _

from .views import BookUpdateView


path(_('book/update/'), BookUpdateView.as_view(), name='book-update'),

Шаблон



 {% if messages %}
     {% for message in messages %}
         
{{ message|safe }}
{% endfor %} {% endif %}
{% csrf_token %} {{ form }}

Все сделано!

Оригинал: “https://dev.to/serhatteker/show-message-in-class-based-views-django-4a4d”