首页 > 解决方案 > 如何在成功消息混合中传递额外的标签

问题描述

我通过传递extra_tags在views.py中尝试了这个,但它对我不起作用。请建议为此提出另一种方法

视图.py

class CustomPasswordResetConfirmView(SuccessMessageMixin, PasswordResetConfirmView):
success_message = "Your password has been set. You may go ahead and log in now. "
extra_tags = 'alert-success'

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

登录.html

{% if messages %}
        {% for message in messages %}

        {% if message.extra_tags == 'alert-success' %}
        <!-- alert-warning-green -->
        <div class="alert-bx alert-warning-green mt-3">
           <i class="icon-checked b-6 alert-icon mr-2"></i> {{message}}
        </div>
        <!-- alert-warning-green END -->
        {% endif %}

        {% if message.extra_tags == 'alert-danger' %}
        <!-- error-alert -->
        <div class="alert-bx error-alert mt-3">
           <i class="icon-warning-triangle alert-icon mr-2"></i> {{message}}
        </div>
        <!-- error-alert END -->
        {% endif %}

        {% endfor %}
    {% endif %}

标签: django

解决方案


get_success_message返回字符串消息,不支持extra_tags.

为了支持它,您必须修改form_valid.SuccessMessageMixin

默认函数定义为:

    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

为了支持您extra_tags,您必须更改为:

    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, extra_tags=self.extra_tags)
        return response

并删除您修改的get_success_message


推荐阅读