2012-08-23 72 views
3

我是GAE/Python新手。如何強制重新執行jinja2模板中的函數?

我有一個調用一個客戶過濾功能的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 

當我運行這個,它被稱爲第一次啓動應用程序引擎(我有日誌條目)後訪問網站的過濾器。

當我訪問其他頁面或刷新頁面時,再也不會調用該過濾器。

我需要篩選器在每個頁面視圖上執行。

我被告知這是因爲該參數是一個常量,並且如果我將其更改爲變量,它將每次執行。在我的情況下,我需要傳遞常量,所以我試着傳遞2個參數(其中變量= currentuser,並且只存在欺騙系統每次執行過濾器)。

我收到一個錯誤,指出系統不識別第二個參數。

任何人都可以告訴我如何確保客戶過濾器每次被調用或給我一個如何傳遞2個參數的例子嗎?

回答

0

這可能不是最優雅的解決方案,但它的工作原理。

我添加了一個變化的變量作爲附加參數(在本例中是currentuser)。這意味着我必須傳遞2個參數。

我的模板語句現在的樣子:

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

我的功能看起來像這樣:

def AccessOK(xCurrentUser, PermissionID): 

我忽略了我的功能xCurrentUser參數。

如果有人有更好的解決方案,請添加它。

謝謝。