Простой вопрос Django: как разрешить HTML как вывод из переменной? - PullRequest
1 голос
/ 01 июня 2011

эта переменная шаблона {{object.video.description}} выводит этот текст:

Welcome to <a href="http://google.com">Saint Francis Academy</a> in the heart of Washington.

Как я могу получить ссылку для показа в качестве фактической ссылки вместо ее замены на HTML-сущности. Я попытался отфильтровать его как безопасный, но не повезло: {{object.video.description|safe}}

Ответы [ 2 ]

2 голосов
/ 01 июня 2011

Можете ли вы перейти в оболочку django и посмотреть, какой текст записан в object.video.description?

Как / где video.description определяется как строка html (я предполагаю, что < уже экранирован в &lt; в этой точке и, следовательно, безопасно не поможет),Пометка как безопасная предотвращает преобразование django < в &lt; непосредственно перед отображением в шаблоне;но не преобразует строку, содержащую &lt;, в <.

Если строка изначально сохранена с &lt; s и &gt s, вы можете преобразовать их в < и > простой заменой Python где-нибудь в вашей обработке строк.Например, по вашему мнению, сделайте что-то вроде:

htmlCodes = (('&', '&amp;'),
             ('<', '&lt;'),
             ('>', '&gt;'),
             ('"', '&quot;'),
             ("'", '&#39;'),)

def unescape(some_html_str):
    for c, html_code in htmlCodes:
        some_html_str = some_html_str.replace(html_code, c)
    return some_html_str

и затем не забудьте удалить строку в вашем представлении, прежде чем поместить ее в контекст (и все же не забывать пометить ее как безопасную).См. Как выполнить декодирование / кодирование HTML с использованием Python / Django?

Также может быть лучше / проще использовать mark_safe (from django.utils.safestring import mark_safe) в ваших представлениях, чтобыубедитесь, что только безопасные строки помечены как безопасные, вместо того чтобы ваш шаблон всегда отображал что-то безопасное.

1 голос
/ 01 июня 2011
{% load markup %}
{{ object.video.description|markdown }}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...