使用基于类的视图显示成功消息

Eli*_*era 9 django django-messages

我想在保存一行时显示一条成功的消息,使用 Django 的消息框架和基于类的视图,代码如下所示,但不显示消息。

任何帮助将不胜感激

#views.py

from django.views.generic import ListView, CreateView, UpdateView, TemplateView
from django.contrib.messages.views import SuccessMessageMixin

class CreateEmployee(SuccessMessageMixin, CreateView):
    model = Employee
    template_name = 'employees/create.html'
    form_class = frmCreate

    def get_success_url(self):
       return reverse('Employees:Create')

    def get_context_data(self, **kwargs):
        contexto = super(CreateEmployee, self).get_context_data(**kwargs)
        contexto['action'] = reverse('Employees:Create')
        return contexto

    success_message = 'Employee successful created'



#template
#create.html

<form action="{{ action }}" method="POST" role="form">
    {% csrf_token %}

    {{ form.as_p }}

    <input type="submit" value="Save" class="btn btn-success">
<form>

{% if messages %}
    <div class="col-lg-3 color03">
        <ul class="messages">
            {% for message in messages %}
                <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
            {% endfor %}
        </ul>
    </div>
{% endif %}
Run Code Online (Sandbox Code Playgroud)

Ale*_*xey 9

只需self.request像这样使用:

from django.contrib import messages
messages.add_message(self.request, messages.INFO, 'Hello world.')
Run Code Online (Sandbox Code Playgroud)


Cyb*_*mic 5

使用 Django 2.2,并根据此处的文档在基于 CLASS 的视图中对我有用:

设置.py

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

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

TEMPLATES = [
    {
        'BACKEND': #,
        'DIRS': #,
        'APP_DIRS': #,
        'OPTIONS': {
            'context_processors': [
                'django.contrib.messages.context_processors.messages',
          ],
     },
]

Run Code Online (Sandbox Code Playgroud)

“默认的存储后端依赖于会话。这就是为什么SessionMiddleware 必须启用并出现在 MIDDLEWARE 中的 MessageMiddleware 之前。

视图.py

from django.contrib.messages.views import SuccessMessageMixin

class SignUpView(SuccessMessageMixin, CreateView):
    form_class = CustomUserCreationForm
    success_url = reverse_lazy('users:login')
    template_name = 'users/register.html'
    success_message = "%(username)s was created successfully"

Run Code Online (Sandbox Code Playgroud)

网址.py

path(_('register/'), views.SignUpView.as_view(), name='register'),
Run Code Online (Sandbox Code Playgroud)

在模板中:(使用引导类)

 {% if messages %}
     {% for message in messages %}
         <div class="text-center alert alert-{{ message.tags }}">
             {{ message|safe }}
         </div>
     {% endfor %}
 {% endif %}
Run Code Online (Sandbox Code Playgroud)


mbi*_*ren 0

你必须在settings.py中设置消息存储

MESSAGE_STORAGE = 'django.contrib.messages.storage.session.SessionStorage'
Run Code Online (Sandbox Code Playgroud)

问候