Поместите гиперссылку <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?
Надеюсь, что это ясно.
Ответы
Ответ 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))