[Django]-Put a <a> hyperlink in a django message

17👍

Strings in Django templates are automatically escaped. You don’t want your raw HTML to be auto-escaped, so you should either pass the string to the safe filter:

{{ message|safe }}

or disable autoescape with the autoescape tag:

{% autoescape off %}
    {{ message }}
{% endautoescape %}
👤mipadi

68👍

If you don’t want to turn off autoescaping on all messages/templates, you can use mark_safe for that particular message:

from django.utils.safestring import mark_safe

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

And if you maybe have some unsafe parts of your message, you can use cgi.escape to escape those parts.

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

14👍

From https://docs.djangoproject.com/en/dev/ref/utils/#django.utils.html.format_html, another option would be to use format_html which will apply escaping to (unsafe) arguments, similar to the escaping in the Template system.

from django.utils.html import format_html

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

Leave a comment