3

私はGAE/Pythonの初心者です。

カスタマーフィルター関数を呼び出すjinja2テンプレートがあります。

呼び出しは次のようになります。

{% if constant-parameter|AccessOK %} 
    <li><a href="/tokens-step1">Tokens</a></li>
{% endif %} 

レンダリングテンプレートと呼ばれるページでフィルターを定義しました。

TEMPLATE_DIR = os.path.join(os.path.dirname(__file__), 'templates')
jinja_environment = \
    jinja2.Environment(autoescape=True, loader=jinja2.FileSystemLoader(TEMPLATE_DIR))
jinja_environment.filters['AccessOK'] = AccessOK

これを実行すると、アプリエンジンを起動した後、最初にWebサイトにアクセスしたときにフィルターが呼び出されます(ログエントリがあります)。

他のページにアクセスしたり、ページを更新したりしても、フィルターが再度呼び出されることはありません。

すべてのページビューで実行するフィルターが必要です。

これは、パラメーターが定数であり、変数に変更すると毎回実行されるためだと言われています。私の場合、定数を渡す必要があるので、2つのパラメーターを渡してみました(これにより、変数= currentuserであり、システムをだまして毎回フィルターを実行させるためだけに存在します)。

システムが2番目のパラメーターを認識していないことを示すエラーが表示されます。

顧客フィルターが毎回呼び出されるようにする方法や、2つのパラメーターを渡す方法の例を教えてもらえますか?

4

1 に答える 1

0

これは最も洗練されたソリューションではないかもしれませんが、機能します。

追加のパラメーター(この場合はcurrentuser)として変更変数を追加しました。これは、2つのパラメーターを渡す必要があることを意味しました。

テンプレートステートメントは次のようになります。

{% if currentuser|AccessOK(constant-parameter) %} 
    <li><a href="/tokens-step1">Tokens</a></li>
{% endif %} 

そして私の関数は次のようになります:

def AccessOK(xCurrentUser, PermissionID):

そして、関数のxCurrentUserパラメーターを無視します。

誰かがより良い解決策を持っているなら、それを追加してください。

ありがとう。

于 2012-08-24T23:27:46.503 に答える