模板:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>index</title> </head> <body> <p>綜合運用列表和字典的模板文件</p> <table> <thead> <th>書名</th> <th>作者</th> <th>價格</th> </thead> <tbody> {% for book in books %} <tr> <td>{{ book.name }}</td> <td>{{ book.author }}</td> <td>{{ book.price }}</td> </tr> {% endfor %} </tbody> </table> </body> </html>
YAML:
books: - name: 西游記 author: 吳承恩 price: 88 - name: 三國演義 author: 羅貫中 price: 98 - name: 紅樓夢 author: 曹雪芹 price: 89 - name: 水滸傳 author: 施耐庵 price: 101
JSON:
{ "books": [ { "name": "西游記", "author": "吳承恩", "price": 88 }, { "name": "三國演義", "author": "羅貫中", "price": 98 }, { "name": "紅樓夢", "author": "曹雪芹", "price": 89 }, { "name": "水滸傳", "author": "施耐庵", "price": 101 } ] }
渲染以后是:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>index</title> </head> <body> <p>綜合運用列表和字典的模板文件</p> <table> <thead> <th>書名</th> <th>作者</th> <th>價格</th> </thead> <tbody> <tr> <td>西游記</td> <td>吳承恩</td> <td>88</td> </tr> <tr> <td>三國演義</td> <td>羅貫中</td> <td>98</td> </tr> <tr> <td>紅樓夢</td> <td>曹雪芹</td> <td>89</td> </tr> <tr> <td>水滸傳</td> <td>施耐庵</td> <td>101</td> </tr> </tbody> </table> </body> </html>
J2Live是一個實時的Jinja2解析器/渲染器,為它提供模板,關聯的值,單擊一個按鈕,它會為您提供精美的渲染文本。它具有一些很酷的功能,您可以請求trim
和lstrip
渲染選項,在模板中使用非標准過濾器,並使非可打印字符可見。
現在,那里有類似的工具,但都不滿足我的需求。我希望有一些東西可以用作正在進行的Jinja2教程的輔助工具,並且對我自己的小實驗也可以有所幫助。
畢竟,最好的方法就是通過實踐來從事這個項目,這是一個很好的學習機會。而且我敢肯定,你們中的很多人都會同意,在編程方面,沒有太多練習的事情了:)
因此,事不宜遲,我向您介紹J2Live!
上面的屏幕截圖顯示了J2Live的主頁,並且只有該頁面,可以從https://j2live.ttl255.com訪問。
J2Live組件
主要的3個組件是在其中輸入模板和數據的文本窗口,以及在其中顯示渲染的模板的一幀。
Jinja2模板
在這里放置模板主體。您可以直接輸入模板,也可以復制粘貼現有模板的文本。
Jinja2數據
在數據窗口中,您提供要傳遞到模板的值。這些將成為字典鍵,然后可以從模板中對其進行訪問。
JSON和YAML格式均受本機支持,因此您可以使用其中任何一種,都將自動檢測到正確的格式。
渲染模板
模板渲染的結果將顯示在此框架中。
動作按鈕
繼續,我們有樹動作按鈕:
Render template
-請求渲染模板。Copy
-將渲染模板的文本復制到剪貼板。Clear render
-清除渲染模板的文本。
如果要渲染新模板,則無需使用清除渲染按鈕。如果您請求使用Render template
新結果進行渲染,則只需覆蓋舊結果即可。
附加組件
最后,還有其他組件可提供渲染選項,擴展模板操作並影響渲染模板的顯示。
渲染選項
Trim
-刪除在Jinja2標簽之后默認添加的換行符。Lstrip
-如果有的話,在Jinja2塊之前剝離空格。Strict check
-引用未定義的變量將導致錯誤。
附加過濾器
我添加了兩個可以在模板中使用的額外過濾器。
ipaddr
-這是ipaddr
Ansible中的過濾器副本,具有相同的功能hash
-生成應用到的值的散列,以散列算法為參數,例如hash(’sha1’)
將使用sha1
算法。有關受支持算法的列表,請參見參考中的鏈接。
顯示空格
最后,Show whitespaces
switch啟用/禁用非可打印字符的呈現,例如空格,制表符和換行符。
當您嘗試了解Jinja2如何將空白添加到呈現的模板時,此選項特別有用。我在Jinja2的旅途中花了很長時間,試圖了解它的工作原理,希望借助此選項,您可以節省一些時間:)
Jinja2教程
您可以將J2Live用作我的Jinja2教程的輔助工具,只需從博客文章中復制粘貼示例模板和數據即可。
J2Live行動
我還准備了顯示兩個功能的gif文件:
在這里,我們渲染了沒有任何選項的模板,然后Trim
啟用了渲染相同的模板:
)
這是我的最愛,您可以在此處看到如何Show whitespaces
切換以清楚地顯示渲染模板中的空格,制表符和換行符:
總結思想
雖然該應用程序完全可以正常運行,但我計划隨着時間的推移向其中添加更多內容。值得注意的是,我想提供Jinja2教程中的所有示例作為可加載單元,以便您可以立即嘗試它們。
我也想開放此應用程序的源代碼,以便您可以在本地運行它,也可以添加針對您的用例定制的過濾器而瘋狂。在此之前,我需要整理一些東西並提供文檔,希望它會在接下來的幾周內准備就緒。
如果您有任何疑問或遇到任何錯誤,請隨時在Twitter @ ttl255上ping我,我將盡力提供幫助。
我希望您會發現這個小工具有用,因此請務必嘗試一下J2Live!
參考文獻
Jinja2文檔說明trim
和lstrip
選項:https : //jinja.palletsprojects.com/en/2.11.x/templates/#whitespace-control
Jinja2文檔描述了未定義的類型及其行為:https : //jinja.palletsprojects.com/en/2.11.x/api/#undefined-types
Python hashlib模塊文檔,列出了可用的哈希算法:https ://docs.python.org/3.8/library/hashlib.html#module-hashlib