新しい Django メッセージ フレームワークでメッセージに HTML を出力するにはどうすればいいですか? 質問する

新しい Django メッセージ フレームワークでメッセージに HTML を出力するにはどうすればいいですか? 質問する

新しい Django メッセージ フレームワークを介して表示されるメッセージに、HTML を少し表示しようとしています。具体的には、ModelAdmin.message_user メソッドを使用してこれを行います。これは、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)

これまで試したものはすべて、エスケープされた HTML を表示するようです。

self.message_user(request, "<a href=\"http://www.google.com\">Here's google!</a>")

動作しません。以下も動作しません:

from django.utils.safestring import mark_safe
...
self.message_user(request, mark_safe("<a href=\"http://www.google.com\">Here's google!</a>"))

管理 base.html テンプレート内のテンプレート コードの表示は非常に簡単です。

    {% if messages %}
    <ul class="messagelist">{% for message in messages %}<li>{{ message }}</li>{% endfor %}</ul>
    {% endif %}

だから、自分が何を間違っているのかよく分かりません。

ご意見やご指導をいただければ幸いです。ありがとうございます!

ベストアンサー1

もう一つの選択肢はextra_tagsメッセージが安全であることを示すキーワード引数。例:

messages.error(request, 'Here is a <a href="/">link</a>', extra_tags='safe')

次にテンプレートロジックを使用して安全なフィルターを使用します

{% for message in messages %}
    <li class="{{ message.tags }}">
    {% if 'safe' in message.tags %}{{ message|safe }}{% else %}{{ message }}{% endif %}
    </li>
{% endfor %}

おすすめ記事