タイトルで指定されているように、親Jinja2テンプレートで変数セットを子テンプレートに渡す方法について懸念しています。Jinja2のあるテンプレートから別のテンプレートに変数を渡す方法
プロジェクトの構成は以下の通りです:
- 私はAPIを構築するためにトルネードを使用しています。
app.py
スクリプトでは、/parent
を クラスParentHandler
に関連付けました。カールGETメソッドを実行すると、クラスParentHandler
のget()
メソッドが実行され、その結果がparent.html
のresponse
(dict)にレンダリングされます。レンダリングされたHTMLコードを の子テンプレートのヘッダとして使用したいので、parent.html
の最後に、 の子テンプレートからのタグを表示するブロックがあります。app.py
には、'/child'
というエンドポイントがクラスChildHanlder
に関連付けられていました。カールGETメソッドが実行されると、クラスChildHandler
のget()
方法は、テンプレートchild.html
に(辞書である)を実行し、その結果をレンダリングし、child_content
される(IはChildHandler
でParentHandler
のresponse
が届かないので、ChildHandler
しかレンダリングchild_content
)。テンプレートchild.html
はparent.html
を含んでいるので、私は期待してい挙動は(ParentHandler
、ないChildHandler
が提供する辞書response
からの値を持つ)parent.html
からHTMLコードを表示するために、独自の辞書、child_content
をレンダリングするchild.html
です。
私は上記のプロセスを実行しようとすると、残念ながら、child.html
がparent.py
からresponse
を見つけることができません。ここで
app.py
class Application(tornado.web.Application):
def __init__(self):
handlers = [
(r'/parent', ParentHandler),
(r'/child', ChildHandler)
]
jinja_load = Jinja2Loader(os.path.join(PATH, '/templates'))
settings = {
'template_path': os.path.join(PATH, '/templates')
'template_loader': jinja_load
}
tornado.web.Application.__init__(self, handlers, **settings)
parent.py
class ParentHandler(tornado.web.RequestHandler):
def get(self):
response = {"status": "200", "val": "some_value"}
try:
self.render("parent.html", response=response)
except:
self.write(response)
child.py
class ChildHandler(tornado.web.RequestHandler):
def get(self):
response = {"status": "200", "data": "some_data"}
try:
self.render("child.html", child_content=response)
except:
self.write(response)
parent.html
<div>
{% if response['status'] == 200 %}
{% set val1 = response.get('val', 0) %}
<i>{{ val1 }}</i>
{% endif %}
</div>
{% block child_content %}{% endblock %}
のchild.html
{% include 'parent.html' %}
{% from 'parent.html' import val1 %}
{% block child_content %}
<table>
{% for d in data %}
<tr>
<td>{{ d }}</td>
</tr>
{% endfor %}
{% endblock %}
しかし、私はのchild.htmlをレンダリングしようとすると、私はこのエラーで終わる:
UndefinedError: 'response' is undefined
は、誰も私を助けてくださいことはできますか?
私はresponsValをchild.pyから取得していませんが、parent.py:/ 親から子にresponseValueを渡したいと思います。 –
あなたが得ているエラーは、値を持たない親で '' response'''という名前の変数を使用しようとしていることを意味します。これは、標準の継承と非常によく似ています。 '' 'child.html'''をレンダリングするときに' '' parent.html'''をレンダリングしますが、親が実行しようとしているときは '' { 'status'] == 200%} '' '' 'response''は変数が初期化されていないので、値がないことが分かります(エントリポイント、子を通して行う必要があります)。 – Strinnityk
正しく理解できなかった場合は私を修正しますが、 '' 'parent.html'''で生成された値を' '' 'child.html'''に渡そうとしていますか? – Strinnityk