Django расширяет общую переменную или блокирует в дочерних шаблонах

У меня есть общая переменная или блок в базовом шаблоне, который я хочу расширить в дочерних шаблонах, как мне этого добиться? У меня есть следующий код.

base.html

<html>
    <head>
        <title>
            {% block page_title %} {% endblock %}
        </title>
        <meta property="og:title" content="{% block page_title %} {% endblock %}" />
        ...
    </head>
<body>
<h1> {% block page_title %} {% endblock %} </h1>
...

моя_страница.html

{% extends 'base.html' %}

{% block page_title %}
    Page title goes here
{% endblock %}

Когда я запускаю этот код, я получаю следующую ошибку: тег «блок» с именем «page_title» появляется более одного раза.


person Saifullah khan    schedule 28.12.2017    source источник
comment
Насколько я знаю, блоки должны быть уникальными. Ваш блок page_title появляется дважды.   -  person schwobaseggl    schedule 28.12.2017
comment
Как я могу достичь решения?   -  person Saifullah khan    schedule 28.12.2017
comment
в каждом view установите контекстную переменную со значением заголовка страницы.   -  person Sachin    schedule 28.12.2017
comment
Как утверждает @SachinKukreja, используйте одну и ту же переменную контекста во всех этих местах и ​​убедитесь, что ваши представления предоставляют ее правильно. Вы можете указать значение по умолчанию в шаблоне, чтобы никогда не оставлять его пустым.   -  person schwobaseggl    schedule 28.12.2017


Ответы (1)


Всякий раз, когда вы обнаружите, что хотите, чтобы значение дважды появлялось в шаблоне, это пахнет так, как будто эти данные должны быть предоставлены в вашем контексте рендеринга.

Для этого есть много вариантов, но самый простой — просто указать параметр контекста page_title при рендеринге шаблона:

def my_view(request):
    # View code here...
    return render(request, 'myapp/index.html', {
        'page_title': 'Your Page Title',
    })

А затем используйте его в своем шаблоне как любую другую переменную шаблона: {{ page_title }}

person David M.    schedule 28.12.2017