Подтвердить что ты не робот

Поместите гиперссылку <a>в сообщении django

Я использую сообщения django, и я хочу разместить в нем гиперссылку.

view.py:

from django.contrib import messages

def my_view(request):
    messages.info(request,"My message with an <a href='/url'>hyperlink</a>")

Очевидно, что на моей странице я вижу код html и никакой гиперссылки. Как обрабатывать сообщение как код htlml?

Надеюсь, что это ясно.

4b9b3361

Ответ 1

Строки в шаблонах Django автоматически экранируются. Вы не хотите, чтобы ваш необработанный HTML был автоматически экранирован, поэтому вы должны либо передать строку в фильтр safe:

{{ message|safe }}

или отключить autoescape с тегом autoescape:

{% autoescape off %}
    {{ message }}
{% endautoescape %}

Ответ 2

Если вы не хотите отключать автозапуск на всех сообщениях/шаблонах, вы можете использовать mark_safe для этого конкретного сообщения:

from django.utils.safestring import mark_safe

messages.info(request, mark_safe("My message with an <a href='/url'>hyperlink</a>"))

И если у вас могут быть некоторые небезопасные части вашего сообщения, вы можете использовать cgi.escape, чтобы избежать этих частей.

from cgi import escape
messages.info(request, mark_safe("%s <a href='/url'>hyperlink</a>" % escape(unsafe_value)))

Ответ 3

Из https://docs.djangoproject.com/en/dev/ref/utils/#django.utils.html.format_html другой вариант должен состоять в использовании format_html, который будет применять экранирование к (небезопасным) аргументам, подобно экранированию в системе Template.

from django.utils.html import format_html

messages.info(request, format_html("My {} <a href='/url'>{}</a>", some_text, other_text))