Удалить HTML из блока шаблонов Django?

#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 %}
  

Надеюсь, это поможет