Python3 - FlaskのJinja2テンプレート内で自作の関数を使用する方法

2018-08-16 20:46:25 1199

はじめに

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ですでに組み込まれている関数は使えません。というか、多分定義が上書きされて元の機能が使えなくなるんだと思うけど。

これでまたアプリケーションの幅が広がったので、いろいろと試してみようと思う。

関連記事