2012-10-18 1 views
1

Я иногда получаю доступ к контексту, предоставляя 'takes_context = True' для тегов Django; Обычно, чтобы удовлетворить запрос.Есть ли производительность для ярлыков Django с использованием take_context?

Но есть ли последствия для работы.

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

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

Либо это, либо вы застряли с узлами, которые вы получаете в первый раз, и в этом случае вам не следует возвращать узлы на основе чего-либо в контексте (в этом случае, в чем смысл?).

Может кто-нибудь прояснить это для меня? Я использую Django 1.4.2.

ответ

1

Узлы создаются при загрузке шаблона. Когда он отображается, контекст просто передается методу рендеринга узла. Единственное отличие simple_tag: takes_context аргумент make делает итоговый код пропуска кода Node.render вместе с вашей функцией. Нет, нет никаких последствий для использования takes_context.

+0

Означает ли это, что все определенные классы узлов созданы? Даже если теги не используют его? – Chris2048

+0

* Классы * создаются, когда загружаются модули, содержащие их. Насколько мне известно, это происходит, когда '' {% load xxx%} 'встречается при разборе шаблона. Узел * экземпляры * создаются, когда соответствующий тег встречается во время загрузки/разбора шаблона. – atereshkin

+0

Я предполагаю, что экземпляр создан только в том случае, если тег использует этот узел? – Chris2048