Как следует из названия, я использую Google App Engine и Django.
У меня довольно много идентичного кода в моих шаблонах, и я хотел бы уменьшить его, включив файлы шаблонов. Итак, в моем основном каталоге приложения у меня есть файл обработчика python, основной шаблон и шаблон, который я хочу включить в свой основной шаблон.
Я бы подумал, что включение {% include "fileToInclude.html"%} будет работать само по себе, но это просто ничего не включает. Я предполагаю, что мне нужно что-то настроить, возможно, используя TEMPLATE_DIRS, но я не могу понять это самостоятельно.
Обновлено:
Я пытался:
TEMPLATE_DIRS = (os.path.join(os.path.dirname(__file__), 'templates'), )
Но безрезультатно. Я попробую и другие возможности.
Да; и я также поместил файл в корневой каталог. Я пробовал включать как fileToInclude.html, так и templates / fileToInclude.html.
Вы используете шаблоны Django 0.96 (включенные в App Engine) или один из помощников App-Engine-Django (в этом случае, какой?)






Во-первых, вам следует рассмотреть возможность использования наследование шаблона, а не тега include, который часто подходит, но иногда намного уступает шаблонному наследованию.
К сожалению, у меня нет опыта работы с App Engine, но по моему опыту работы с обычным Django я могу сказать вам, что вам нужно настроить список TEMPLATE_DIRS так, чтобы он включал папку, из которой вы хотите включить шаблон, как вы указали.
Я обнаружил, что он работает «из коробки», если я сначала не загружаю шаблоны и не визуализирую их с помощью объекта Context. Вместо этого я использую стандартный метод, показанный в Руководство по AppEngine.
Чтобы обойтись без включения, я сделал следующее:
def render(file, map = {}):
return template.render(
os.path.join(os.path.dirname(__file__), '../templates', file), map)
table = render("table.html", {"headers": headers, "rows": rows})
final = render("final.html", {"table": table})
self.response.out.write(final)
У меня такая же проблема, и я отследил ее в пакете ext.webapp. В template.py вы найдете этот комментарий в строке 33:
Django использует глобальные настройки для каталога, в котором ищет шаблоны. Это неестественно в контексте модуля webapp, поэтому наш метод загрузки принимает полный путь к шаблону, и мы устанавливаем эти настройки на лету автоматически. Потому что мы должны устанавливать и использовать глобальные настройки для каждого вызов метода, этот модуль не является потокобезопасным, хотя это не проблема для приложений.
См. Строку 92 в том же файле. Вы можете увидеть, как шаблоны dirs сжаты:
directory, file_name = os.path.split(abspath)
new_settings = {
'TEMPLATE_DIRS': (directory,),
'TEMPLATE_DEBUG': debug,
'DEBUG': debug,
}
ОБНОВЛЕНИЕ: вот обходной путь, который сработал для меня - http://groups.google.com/group/google-appengine/browse_thread/thread/c3e0e4c47e4f3680/262b517a723454b6?lnk=gst&q=template_dirs#262b517a723454b6
существует ли файл "templates / fileToInclude.html"?