3 votes

Django affiche la liste des erreurs sous forme de chaîne de caractères au lieu du html

J'essaie de personnaliser la liste des erreurs par défaut dans Django. J'ai essayé ce qui suit les docs mais le problème est que le prétendu html est affiché en tant que texte au lieu de html : enter image description here

Je ne sais pas vraiment pourquoi cela se produit, car le code est pratiquement un copier-coller de la documentation. Code :

forms.py

class DivErrorList(ErrorList):
    def __str__(self):
        return self.as_divs()

    def as_divs(self):
        if not self: return ''
        return '<div class="test">%s</div>' % ''.join(['<div class="error">%s</div>' % e for e in self])

vues.py

def addUser(request):    
    add_user_form = AddUserForm()
    messages.warning(request, 'message')

    if request.method == 'POST':
        add_user_form = AddUserForm(request.POST, error_class=DivErrorList)

        if add_user_form.is_valid():
            user = add_user_form.save()
            customer_group = Group.objects.get(name = 'group_name')
            user.roles.add(customer_group)
            messages.success(request, 'message')
            return redirect('users')

        else:
            messages.error(request, 'message')

    context = {
        'add_user_form': add_user_form,
    }

    return render(request, 'users/backend/user/user_add.html', context)

html

<div class="w-full mt-6">
    {% include 'components/typography/form_label.html' with label='Gjenta passord' %}
    {{ add_user_form.password2 }}
    {{ add_user_form.password2.errors }}
</div>

4voto

thebjorn Points 3878

Vous devez marquer la chaîne comme "sûre", c'est-à-dire ceci :

return '<div class="test">%s</div>' % ''.join(['<div class="error">%s</div>' % e for e in self])

devrait être

return mark_safe('<div class="test">%s</div>' % ''.join(['<div class="error">%s</div>' % e for e in self]))

donde mark_safe vient de :

from django.utils.safestring import mark_safe

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X