Джанго расширяет проблему - дочерний шаблон не отображается - PullRequest
5 голосов
/ 31 октября 2010

Я уже настроил необходимые вещи для работы с шаблонами extends в django. вот мои коды:

в settings.py

def my_dir():
    import os.path
    return os.path.abspath(os.path.dirname(__file__))
TEMPLATE_DIRS = ( my_dir() + '/app/templates', ) #dynamic template directory

в base.html - находится в app / templates / site

....
<div id="SideBar" class="FloatLeft">
{% block sidebar %} {% endblock %}
</div>
....

в sidebar.html - находится в app / templates / site

{% extends "site/base.html" %}
{% block sidebar %}
   some code here
{% endblock %}

Я также попробовал тег {% include "site / sidebar.html"%} в base.html, чтобы проверить каталог шаблона, и да, тег include работает ...

в чем проблема в {% extends%}? почему он не определяет свой родительский шаблон ..

пожалуйста, помогите мне, ребята .. ваша помощь очень ценится ... я все еще жду ответа .. tnx

Ответы [ 7 ]

9 голосов
/ 31 октября 2010

Какой шаблон вы визуализируете в своем представлении? Это должен быть child , а не родитель.

1 голос
/ 31 октября 2010

Я не уверен, в чем проблема, но вы должны проверить следующие пункты:

  • Тэг {% extends%} должен быть первым в файле шаблона (и поставить пробелпосле строки, чтобы быть уверенным)
  • Я думаю, что ссылка на базовый шаблон относится к вам TEMPLATE_DIR.Попробуйте разные вещи, например, поместите оба шаблона на одном уровне и т. Д.
  • Проверьте все теги в обоих шаблонах, чтобы убедиться, что они все правильно отформатированы
  • Проверьте кодировку файлов.Если это UTF-8, попробуйте отключить спецификацию в обоих файлах.
  • Возможно, это проблема с настройкой каталога.Попробуйте жестко закодировать абсолютный путь, чтобы проверить это.

Это проблемы, которые я могу себе представить, но не могу гарантировать, что он будет работать.

0 голосов
/ 15 июня 2018

Ответ, который дал Дэниэл Роузман, точен, но есть быстрый и простой способ обойти это, если указание на ваш дочерний шаблон нецелесообразно (как это может быть не в более сложных проектах).

ВВ своем дочернем шаблоне удалите теги {% extends ""%}, которые указывают на вашего родителя.

В родительском шаблоне замените {% block content%} на {% include "path / to /child / template "%}

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

0 голосов
/ 31 октября 2010

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

TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.Loader',
    'django.template.loaders.app_directories.Loader',
#     'django.template.loaders.eggs.Loader',
)
0 голосов
/ 31 октября 2010

Используйте os.path.join для объединения 2 каталогов.

import os.path
TEMPLATE_DIRS = (
    os.path.join(os.path.dirname(__file__), 'templates'),
)

Здесь я предполагаю, что templates - это каталог, в котором вы храните свои шаблоны.Теперь для доступа к шаблонам это базовый каталог для них.Поэтому для расширения base.html в каком-то другом файле сделайте вот так -

{% extends "base.html" %}
...
{% endblock %}
0 голосов
/ 31 октября 2010

Ваша основная проблема заключается в том, что вы забыли запятую в настройке TEMPLATE_DIRS. Попробуйте это:

TEMPLATE_DIRS = ( my_dir() + '/app/templates', )

Пожалуйста, не обращайте внимания на ответ Чешира.

0 голосов
/ 31 октября 2010

Есть много проблем.Краткий ответ: «Нет, вы не можете менять шаблоны на лету, и даже если бы вы могли, вы бы сделали это точно не так, как сейчас»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...