о модулях в файле шаблона в торнадо

В демонстрациях торнадо, приложении под названием blog, в templates/home.html такой код:

{% extends "base.html" %}

{% block body %}
{% for entry in entries %}
    {{ modules.Entry(entry) }}
{% end %}
<div><a href="/archive">{{ _("Archive") }}</a></div>
{% end %}

Я хочу знать, откуда берутся «модули». Думаю должно понравиться:

{% module Entry(entry) %}

поэтому я изменил код, и он работает.

Кто-нибудь знает, откуда берутся «модули» в файле шаблона? Спасибо.


person user1223153    schedule 21.02.2012    source источник


Ответы (2)


Вы можете найти комментарий к RequestHandler.__init__:

# UIModules are available as both `modules` and `_modules` in the
# template namespace.  Historically only `modules` was available
# but could be clobbered by user additions to the namespace.
# The template {% module %} directive looks in `_modules` to avoid
# possible conflicts.

Я думаю, что это могут быть какие-то коды, написанные в старой версии торнадо :) Поэтому вместо этого мы должны использовать {% module %}.

person fred.yu    schedule 12.12.2012

в RequestHandler.__init__ :

self.ui["_modules"] = ObjectDict((n, self._ui_module(n, m)) for n, m in
                             application.ui_modules.iteritems())
self.ui["modules"] = self.ui["_modules"]

в RequestHandler.render_string:

args.update(self.ui)
args.update(kwargs)
return t.generate(**args)

RequestHandler — это подкласс вашего Handler, а в render_string есть модули.

person lepture    schedule 09.03.2012