6

Flask ページの最小限の例に従って、コンテキスト プロセッサを構築しようとしています。

context_procesor.py

def inflect_this():
    def inflectorize(number, word):
        return "{} {}".format(number, inflectorizor.plural(word, number))
    return dict(inflectorize=inflectorize)

app.py (アプリ ファクトリ内)

from context_processor import inflect_this

app.context_processor(inflect_this)

数字に基づいて単語を変化させる以前の変化関数を使用して、単純に、ジンジャ フィルターとして既に持っていますが、コンテキスト プロセッサとして実行できるかどうかを確認したかったのです。

ここのページの下部にある例を考えると: http://flask.pocoo.org/docs/templating/、これは機能するはずですが、機能しません。私は得る:

jinja2.exceptions.UndefinedError UndefinedError: 'inflectorize' is undefined

何が起こっているのかを理解するのに十分ではありません。誰が何が悪いのか教えてもらえますか?

編集:

app.jinja_env.globals.update(inflectorize=inflectorize)

関数を追加するように機能し、app.context_processor がとにかく jinja_env.globals に中継するメソッドでメソッドをラップするよりもオーバーヘッドが少ないようです。

4

1 に答える 1

21

私はアプリファクトリを使用したことがないので、これがあなたの質問に完全に答えるかどうかはわかりません。

しかし、私はこれを青写真から試しました、そしてこれは私のために働きます。デフォルトの「アプリ」の代わりに、デコレータでブループリントオブジェクトを使用する必要があります。

thingsy / view.py

from flask import Blueprint

thingy = Blueprint("thingy", __name__, template_folder='templates')

@thingy.route("/")
def index():
  return render_template("thingy_test.html")

@thingy.context_processor
def utility_processor():
  def format_price(amount, currency=u'$'):
    return u'{1}{0:.2f}'.format(amount, currency)
  return dict(format_price=format_price)

テンプレート/thingy_test.html

<h1> {{ format_price(0.33) }}</h1>

テンプレートに予想される「$0.33」が表示されます。

お役に立てば幸いです。

于 2012-12-14T02:46:47.097 に答える