テンプレート#
Quart は、よくドキュメント化されている Jinja テンプレートエンジンを使用します。Quart は、標準的なコンテキストと、Jinja のデフォルト設定にいくつかの標準的なフィルターを追加します。Quart は、アプリレベルとブループリントレベルでカスタムフィルター、テスト、コンテキストを定義する機能も追加します。
テンプレートを使用する際には、render_template() と render_template_string() の2つの関数を使用する必要があります。どちらの関数も await する必要があります。どちらの関数の戻り値も文字列であり、ルートレスポンスを直接形成するか、または他の方法で組み合わせることができます。どちらの関数も、コンテキストとしてテンプレートに渡す追加のキーワード引数を可変数とります。例えば、
@app.route('/')
async def index():
return await render_template('index.html', hello='world')
Quart 標準追加機能#
標準コンテキストには、config、request、session、gが含まれており、これらのオブジェクトはcurrent_app.configおよびglobalsで定義されているものを参照します。これらは期待通りにアクセスできます。
@app.route('/')
async def index():
return await render_template_string("{{ request.endpoint }}")
標準的なグローバル関数は、url_for() と get_flashed_messages() です。これらは期待通りに使用できます。
@app.route('/')
async def index():
return await render_template_string("<a href="{{ url_for('index') }}>index</a>")
フィルター、テスト、グローバル、コンテキストの追加#
テンプレートで使用するためのフィルターを追加するには、デコレータとしてtemplate_filter()またはapp_template_filter()を使用するか、関数としてadd_template_filter()またはadd_app_template_filter()を使用します。これらは、フィルターがAny値を受け取り、strを返すことを期待します。例:
@app.template_filter(name='upper')
def upper_case(value):
return value.upper()
@app.route('/')
async def index():
return await render_template_string("{{ lower | upper }}")
テストとグローバルは、フィルターではなくテストとグローバルメソッドを使用するだけで、非常に同様の方法で動作します。
ただし、コンテキストプロセッサには、ブループリントごとに指定できるという追加機能があります。これにより、ブループリントにルーティングされるリクエストに対してのみコンテキスト情報が存在するようにすることができます。context_processor()はデフォルトでブループリントにルーティングされたリクエストにコンテキスト情報を追加し、app_context_processor()はアプリへのすべてのリクエストに情報を追加します。例:
@blueprint.context_processor
async def blueprint_only():
return {'context': 'value'}
@blueprint.app_context_processor
async def app_wide():
return {'context': 'value'}