FlaskでJinja2のカスタムをフィルターを使いたい。具体的にはテンプレート中で{{ URL | urlencode }}がやりたい。
urlエンコードはwerkzeug.urlsのurl_quote_plusをつかえばいい。
>>> from werkzeug.urls import url_quote_plus >>> url_quote_plus('http://www.kzfmix.com') 'http%3A%2F%2Fwww.kzfmix.com'
Jinja2だとEnvironmentオブジェクトに新しいフィルターを突っ込めばいい
>>> from jinja2 import Environment, PackageLorder >>> env = Environment(loader=PackageLoader('testapp', 'templates')) >>> env.filters['urlencode'] = url_quote_plus >>> template = env.get_template('template.txt') >>> template.render(url='http://www.kzfmix.com') u'URL: http%3A%2F%2Fwww.kzfmix.com'
Flaskの場合にはjinja_envってのが用意されているので、ここからfiltersに突っ込めばいいだけだった。
from flask import Flask,render_template from werkzeug.urls import url_quote_plus app = Flask(__name__) app.jinja_env.filters['urlencode'] = url_quote_plus
Registering Filtersに書いてあった。