Почему мои преобразованные HTML-теги Markdown возвращаются как текст?
Функция в моем файле views.py
конвертирует файлы Markdown и возвращает HTML в другую функцию, которая используется для отображения текущей записи (entry()
). В entry()
у меня есть словарь, который дает HTML-шаблону доступ к преобразованному содержимому. Однако, когда теги <h1>
и <p>
показываются на странице вместо того, чтобы быть скрытыми.
Так,
<h1>CSS</h1> <p>CSS is a language that can be used to add style to an <a href="/wiki/HTML">HTML</a> page.</p>
отображается вместо
CSS
CSS - это язык, который можно использовать для добавления стиля к странице HTML.
--
Как избавиться от тегов на странице и заставить их действительно использоваться в HTML-файле?
entry.html:
{% block body %}
<div class="entry-container">
<div class="left">
{{ entry }}
</div>
<div class="right">
<a href="{% url 'edit' %}" class="edit-btn">
<button class="edit">EDIT</button>
</a>
</div>
</div>
{% endblock %}
views.py:
import markdown
from . import util
def entry(request, name):
entry = util.get_entry(name)
converted = convert(entry)
if util.get_entry(name) is not None:
context = {
'entry': converted,
'name': name
}
global current_entry
current_entry = name
return render(request, 'encyclopedia/entry.html', context)
else:
return render(request, "encyclopedia/404.html")
def convert(entry):
return markdown.markdown(entry)
urls.py:
path('<str:name>', views.entry, name='entry'),
util.py:
def get_entry(title):
"""
Retrieves an encyclopedia entry by its title. If no such
entry exists, the function returns None.
"""
try:
f = default_storage.open(f"entries/{title}.md")
return f.read().decode("utf-8")
except FileNotFoundError:
return None
Django применяет фильтр для HTML-тегов в вариациях. Если вы хотите получить нефильтрованный вывод, вы должны применить фильтр safe
:
{{ entry | safe }}
Django будет автозавершать преобразованный HTML, который вы передаете в шаблон, и не будет отображать HTML-теги. Чтобы остановить это, вы можете использовать safe
templatetag:
{{ entry|safe }}
https://docs.djangoproject.com/en/4.0/ref/templates/builtins/#safe