#django #django-templates
#django #django-шаблоны
Вопрос:
В моем base.html
шаблоне Django у меня есть title
блок:
<html>
<head>
<title>{% block title %}{% endblock %}</title>
</head>
<body>
{% block content %}
{% endblock %}
</body>
</html>
В шаблоне страницы я использую текст из <h1>
заголовка страницы в этом блоке, поэтому он также отображается в <title>
теге, например:
{% extends 'base.html' %}
{% block content %}
<h1>{% block title %}Hello world!{% endblock %}</h1>
{% endblock %}
Все работает нормально. Но если я хочу использовать HTML-теги внутри страницы <h1>
вот так…
{% extends 'base.html' %}
{% block content %}
{% block title %}<b>Hello</b> world!{% endblock %}
{% endblock %}
… эти теги также появятся в <title>
, что недопустимо.
Есть ли способ обойти это, кроме как иметь две версии заголовка: одну внутри <h1>
и одну версию без HTML внутри {% block title %}
? Я не думаю, что есть способ удалить HTML из блока?
Комментарии:
1. Единственное, что я могу придумать, — это присвоить блоку внутри
h1
другое имя.2. Да, это — наличие двух блоков с разными именами — это то, чего я надеялся избежать. 90% страниц нужен только один
title
блок. Но у нескольких есть HTML в<h1>
.3. Вы можете использовать
striptags
фильтр шаблонов, если передаете значение из своих представлений.4. @xyres Я не передаю значение из представлений; это текст / html в шаблонах, как показано.
5. Мне интересно узнать, почему мой вопрос был отклонен…
Ответ №1:
Вы могли бы использовать cycle
вот так:
{% extends 'base.html' %}
{% block content %}
<h1>
{% block title %}
{% cycle '' '<b>' %}Hello world!{% cycle '' '</b>' %}
{% endblock %}
</h1>
{% endblock %}
Надеюсь, это поможет