Джанго — как передать контекст в base.html?

У меня есть well_list.html, который выглядит так:

введите здесь описание изображения

Нажав на одну из строк, вы попадете на эту страницу:

введите здесь описание изображения

На приведенной выше странице используются два HTML-файла: base.html + contextual_main.html. База имеет боковую навигацию, а последняя простирается от базы. В моем views.py я могу легко передать данные контекста в contextual_main.html следующим образом:

views.py

class ContextualMain_DetailView(DetailView):
    template_name = 'contextual_main.html'
    context_object_name = 'single_well_info'
    model = models.WellInfo

contextual_main.html

<button type="button" class="btn btn-default" data-container="body" data-toggle="popover">
  <a href="{% url 'contextual:bha' pk=single_well_info.api %}">BHA</a>
</button>

Мне также нужно внедрить контекст single_well_info в base.html. Поэтому я попытался внедрить его так же, как и с contextual_main.html, но это не сработает. Как я могу это сделать?

редактировать------------------------------------------------- --------------------

base.html:

  <body class="nav-md">
    <div class="container-fluid body">
      <div class="main_container">
        <!-- side bar -->
        <div class="col-md-3">
          <div class="left_col scroll-view">
            <!-- sidebar menu -->
            <div id="sidebar-menu" class="main_menu_side hidden-print main_menu">
              <div class="menu_section">
                <ul class="nav side-menu">
                  <li><a href="{% url 'well_list' %}"><i class="fa fa-list-ol"></i> Well List </a>
                  </li>
                  <li><a><i class="fa fa-bookmark"></i> My Wells </a>
                  </li>
                  <li><a><i class="fa fa-dashboard"></i> Dashboard </a>
                  </li>
                  <li><a><i class="fa fa-edit"></i> Contextual <span class="fa fa-chevron-down"></span></a>
                    <ul class="nav child_menu">
                      <li><a href="{% url 'contextual:bha' pk=single_well_info.api %}">BHA</a></li>
                      <li><a href="">Integrity Test</a></li>
                      <li><a href="">Casing</a></li>
                      <li><a href="">Cementing</a></li>
                      <li><a href="">Consumables</a></li>
                      <li><a href="">Daily Ops</a></li>
                      <li><a href="">Logging Data</a></li>
                      <li><a href="">Daily Cost</a></li>
                      <li><a href="">Mud</a></li>
                      <li><a href="">Equipments</a></li>
                      <li><a href="">Pumps</a></li>
                      <li><a href="">Survey</a></li>
                      <li><a href="">Time Log</a></li>
                      <li><a href="">Vol & Losses</a></li>
                      <li><a href="">Weather</a></li>
                      <li><a href="">Well Cond</a></li>
                      <li><a href="">Personnels</a></li>
                    </ul>
                  </li>
                  <li><a><i class="fa fa-clock-o"></i> Real Time <span class="fa fa-chevron-down"></span></a>
                    <ul class="nav child_menu">
                      <li><a href="">Operation</a></li>
                      <li><a href="">Beliefs and Alerts</a></li>
                      <li><a href="">Drilling Optimization</a></li>
                    </ul>
                </ul>
              </div>
            </div>
          </div>
        </div>
        <!-- /side bar -->

        <div class="right_container">
          <div class="container-fluid">
            {% block content %} {% endblock %}
          </div>
        </div>
      </div>
    </div>

  </body>

Когда я редактировал <a href=""> в base.html, моя среда разработки PyCharm распознала аргумент contextual:bha, но не распознала аргумент pk=single_well_info.api, и в этом проблема. Мне кажется, что контекст не внедряется в base.html, когда base.html расширяется с помощью вызова views.py template_name


person Eric Kim    schedule 20.07.2018    source источник
comment
Добавьте block в base.html и добавьте контекст внутри блока   -  person seuling    schedule 20.07.2018
comment
@seuling Я не понимаю, что вы говорите, потому что base.html уже имеет блок, а contextual_main.html распространяется на блок внутри base.html . Контекст уже внедрен внутрь блока, но контекст не работает вне блока.   -  person Eric Kim    schedule 20.07.2018
comment
Таким образом, вы можете добавить другой блок в свою навигацию. Или вы можете добавить свой собственный context_processor для отправки контекста в base.html, но вам не нужно передавать эти данные на другую страницу, верно?   -  person seuling    schedule 20.07.2018
comment
Это должно просто работать. Что вы подразумеваете под это не сработает? Опубликуйте соответствующие фрагменты из вашего base.html, пожалуйста.   -  person Selcuk    schedule 20.07.2018
comment
@Selcuk, пожалуйста, проверьте правку   -  person Eric Kim    schedule 20.07.2018
comment
Прочтите stackoverflow.com/questions/34902707/   -  person Márcio Moreira    schedule 18.10.2018


Ответы (1)


Вероятно, вы расширяете base.html на каждой из своих страниц. Таким образом, абсолютно необязательно передавать single_well_info_context в каждую из ваших функций/классов представления.

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

Вам нужно открыть файл settings.py и добавить новый контекст в TEMPLATE_CONTEXT_PROCESSORS:

'context_processors': [
        ...
        # add a context processor
        'my_app.context_processor.single_well_info',

    ],

single_well_info будет функцией, похожей на:

def single_well_info(request):
    return {
        'api':"Hello",
    }
person Yassine Belmamoun    schedule 20.07.2018
comment
Одна сложность, связанная с этим методом, заключается в том, что single_well_info должен быть тем же объектом, что и в views.py ContextualMain_DetailView. Как убедиться, что single_well_info в context_processor — это тот же самый экземпляр объекта, который я передал в *contextual_main.html? - person Eric Kim; 20.07.2018
comment
Вам необходимо адаптировать функцию def single_well_info(request): на основе запроса или нового параметра. Имейте в виду, что у нас нет общей картины вашего кода, чтобы помочь вам. - person Yassine Belmamoun; 20.07.2018