django默認的模板太不靈活,想把一個數字0.15顯示成15%都得費不少勁,太不爽!!!
網上查閱了幾個模板系統,有Jinja2等等,最後發現mako能夠直接支持python的語句,最爲靈活,果斷選用。
使用過程中碰見的問題不少,記錄如下:
1. 調試技巧:如果在mako的模板顯示過程中出現問題,django的錯誤提示就一個字,“錯”,剩下的,慢慢查吧,然後我挨個刪除,挨個嘗試,就一個慘字了得。弄了幾個錯誤之後崩潰了。最後在stackoverflow上面找到了解決辦法,代碼如下:
from mako.lookup import TemplateLookup
from mako import exceptions
risk_lookup = TemplateLookup(
directories=risk_platform.settings.TEMPLATE_DIRS,
input_encoding='utf-8',
output_encoding='utf-8',
default_filters=['none_empty', 'h', ],
imports=['from risk.views import none_empty'],
)
def render_to_response(filename, ctx):
try:
tp = risk_lookup.get_template(filename)
cont = tp.render(**ctx)
return http.HttpResponse(cont)
except :
return http.HttpResponse(exceptions.html_error_template().render())
一旦在render的過程中出現異常,使用mako展示錯誤的方式來輸出。一下天清氣朗。
2. moko中的for循環使用的變量會覆蓋context中的變量,因此如下的模板代碼無法正常運行:
% for name in names:
<td>${name}</td>
% end for
<tr>${name}</td>
後面的這個${name}就無法獲取到context裏面的相關變量值了。目前我也沒有時間去查閱相關資料了,等有時間了在慢慢看吧。
3. djangomako這個包根本就無法使用,一運行就錯了(我的版本是python3.4 django_mako-0.1.3)看了看源代碼,就兩三行有用的,乾脆就不用他這個包了