I'm trying to display a bit of html in a message that's being displayed via the new Django messages framework. Specifically, I'm doing this via the ModelAdmin.message_user method, which is just a thin wrapper around messages():
def message_user(self, request, message): """ Send a message to the user. The default implementation posts a message using the django.contrib.messages backend. """ messages.info(request, message)
Everything I've tried so far seems to display escaped HTML.
self.message_user(request, "<a href=\"http://www.google.com\">Here's google!</a>")
Doesn't work, nor does:
from django.utils.safestring import mark_safe ... self.message_user(request, mark_safe("<a href=\"http://www.google.com\">Here's google!</a>"))
The display of the template code in the admin base.html template is pretty straightforward:
{% if messages %} <ul class="messagelist">{% for message in messages %}<li>{{ message }}</li>{% endfor %}</ul> {% endif %}
So I'm not exactly sure what I am doing wrong.
Thoughts or guidance greatly appreciated, thanks!
Adding a message To add a message, call: from django. contrib import messages messages. add_message(request, messages.INFO, 'Hello world.
If you leverage the messages framework, you'll still need to add a conditional in the template to display the messages if they exist or not. If I use render() to return a response from a view which is requsted by POST, then if the user refreshes the page the browser will prompt a popup if to send the form again.
Another option is to use extra_tags
keyword arg to indicate that a message is safe. Eg
messages.error(request, 'Here is a <a href="/">link</a>', extra_tags='safe')
then use template logic to use the safe filter
{% for message in messages %} <li class="{{ message.tags }}"> {% if 'safe' in message.tags %}{{ message|safe }}{% else %}{{ message }}{% endif %} </li> {% endfor %}
As noted in the following Django ticket, it should work if you use mark_safe() in combination with the SessionStorage backend: https://code.djangoproject.com/ticket/14976#comment:9
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With