はじめに
Jinja2はフラスクのテンプレートエンジンとして、使い勝手の良い素晴らしいエンジンですが、使いたい機能や関数が制限されていたりと、いざという時に困ることが多いので、自作関数を呼び出すことができないか調べてみた。
例えば、テンプレートを呼び出した時にそのurlを取得したい場合、JavascriptやJqueryでは簡単に取得できる(たしかdocuments.href.locationとかだった気がする)が、ジンジャ2にはそのような関数は存在しない。調べた限りでは。
すると、env.globalsという記法があることを知ったのでメモ。
これ、めちゃめちゃ使える。
ページのURLを取得してみる
Flaskにはrequestが備わっており、フォームデータの取得など、様々な事ができる。そのうちの一つに、request.urlがある。
これは、明らかにURLを取得するものなので、やってみる。
main.py
from flask import Flask, request
app = Flask(__name__)
def request_url():
return request.url
app.jinja_env.globals['request_url'] = request_url
@app.route('/')
def main_page():
html = '{{ request_url() }}'
return html
こんな感じで書くと、トップページにはそのページのURLが印字されるようになります。
要は、jinjaの環境なんちゃらに自作の関数を定義させることで、使えるようになるということかなと。
なので、当然だけどjinja2ですでに組み込まれている関数は使えません。というか、多分定義が上書きされて元の機能が使えなくなるんだと思うけど。
これでまたアプリケーションの幅が広がったので、いろいろと試してみようと思う。