2010-06-07 4 views
2

Я прошел через (болезненный) процесс написания пользовательского тега шаблона для использования в Django. Он зарегистрирован как include_tag, так что он отображает шаблон. Однако этот тег ломается, как только я пытаюсь что-то изменить.Являются ли теги шаблонов Django кэшированными?

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

Такая же проблема возникает, если я пытаюсь изменить имя отображаемого шаблона и соответственно изменить имя шаблона на диске. Он продолжает пытаться вызвать старый шаблон. Я пробовал очистить старые файлы .pyc без везения.

В целом система работает так, как будто она кэширует теги шаблона, вероятно, из-за команды register. Я прорыл бесконечные потоки, пытаясь выяснить, так ли это, но все могли найти Джеймса Беннетта, заявив here, что register ничего не делает. Пожалуйста помоги!

ответ

1

В случае, если кто-либо еще сталкивается с этим: точный механизм кеширования неясен, но перезапуск сервера django dev устраняет проблему.

2

Я прошел через (болезненный) процесс написания пользовательских шаблонов тегов для использования в Django

Я согласен, что процесс написания тег шаблона в Django является более сложным, чем это необходимо быть.

Но позвольте мне указать на некоторые из сторонних приложений, которые при установке тег шаблона - это еще одна функция (или класс) python.

http://github.com/alex/django-templatetag-sugar

http://github.com/codysoyland/django-template-repl

2

Во-первых, я не могу себе представить, что сложно о тегах включения. Написание полностью настраиваемого тега с нуля, да: это сложно. Но inclusion tags - это просто три строки кода и шаблон - что с этим сложно?

Во-вторых, все Код Python в проекте Django загружается один раз сервером [*] и остается до его перезапуска. Dev-сервер обычно обнаруживает изменения и перезагружается, чтобы перезагрузить код, но это не всегда работает. Вы должны привыкнуть проверять консоль, чтобы убедиться, что она перезагружается, и при необходимости вручную. Обратите внимание: это не имеет никакого отношения к кешированию.

[*] строго говоря, один раз за процесс, но dev-сервер в любом случае является однопроцессорным.

+0

Этот процесс был болезненным, потому что я столкнулся с ошибкой, описанной здесь в разделе «Магия», которая потребовала много времени для отладки: http://www.b-list.org/weblog/2007/dec/04/magic-tags/Оказывается, что так называемый ImportError затушевывается, потому что у моего недавно измененного каталога templatetags/был пустой файл __init__.py. Ему нужен хотя бы один персонаж. Кто знал. Тег действительно три строки, которые добавляются только к разочарованию. Код, который просто не должен ломаться! Вы абсолютно правы в сервере Django dev. Он перезагружает изменения так последовательно, что я не рассматривал их как точку отказа. – thebossman

Смежные вопросы