2013-04-03 35 views
4

我試圖用pyjade生成一個列表,像這樣:使用Python代碼

ul 
    - for i, (label, link) in enumerate(tabs) 
    li(class="selected" if i == selected_index else "") 
     a(href=link)= label 

但我看到這個錯誤:

UndefinedError: 'enumerate' is undefined

我必須嵌入Python代碼爲玉錯誤。什麼是正確的方法來做到這一點?

+0

綜觀[的文檔的pyjade](https://github.com/SyrusAkbary/pyjade),我沒有看到一個Python可以直接嵌入的例子......因爲pyjade似乎主要作爲某種包裝器或解析器來處理Jade Template Syntax 。是否可以嘗試使用'for'或'each'循環[如Jade文檔中所述](http://naltatis.github.com/jade-syntax-docs/#for)? – summea

+0

哦!來自scalade,我認爲pyjade允許你嵌入python代碼,因爲scalade允許你嵌入scala代碼。 Pyjade實際上是否支持任意的javascript表達式?或者它只挑出了一些轉換成Python模板等效? –

+0

查看[pyjade文檔中的一個示例](https://github.com/SyrusAkbary/pyjade#example),看起來您可以將JavaScript嵌入[通常的Jade模板語法方式](http:// jade -lang.com/);在這種情況下,我認爲你不必擔心JavaScript的Python方面。 – summea

回答

1

否; pyjade不允許將任意python代碼嵌入到jade中。改用玉的語法。

4

玉用我稱之爲「隱枚舉法」 - 它列舉列表中的數值簡單地通過增加多一個變量,i,比有值解壓:for item, i in list_like(對於類型的字典,你可以做for key, val in dict_like

下面顯示的是使用元組拆包和「隱枚舉」,一起PyJade測試2.0.2

- var selected_index = 0 
- var tabs = [('hello', '/world'), ('citizens', '/please/respect_your_mother'), ('thank_you', '/bye')] 
ul 
    // unpack `tabs` and tack on the variable `i` to hold the current idx 
    for label, link, i in tabs 
     li(class="selected" if (i == selected_index) else "") 
      a(href="#{link}") #{label} 

注意您的例子:如「標準」翡翠代碼更常見,截至記者發稿,PyJade做不是支持三元運算符分配。 (variable= (condition)? value_if_true : value_if_false

1

您應該使用添加函數的方式將模板環境用於您使用pyjade編譯jade文件的模板語言。

對於燒瓶中使用這個神社應該把你的__init__.py是:

app.jinja_env.globals.update(enumerate=enumerate) 
0

你可以做到這一點與pypugjs(pyjade的繼任者)

li(class=("selected" if i == selected_index else ""))