我正在嘗試使用自定義模板標簽來對我在 HTML 模板中的 JS 中獲得的變數運行特定函式。
這是我嘗試過的示例:
python模板標簽
def calculate_km(value, arg):
"""
Calculate the km from the source
"""
args_list = eval(arg)
layer_id = value
return f"layer_id_is:{layer_id}, args_list:{args_list}"
然后在我的 HTML js 塊中使用它,如下所示:
const args_data = "[" kmlEvent.featureData.id "," kmlEvent.latLng.lat "," kmlEvent.latLng.lng "]";
console.log(`{{single_layer.id|calculate_km: ${args_data} }}`);
這里的問題是在模板標簽內添加 JS 變數,正如您在應該回傳正常語法的args_data內部看到的那樣,因此預期該行呈現如下:stringDjango templateconsole.log
{{12|calculate_km:[12,Foo,123,456]}}
但問題是它沒有讀取變數的值,args_data而是呈現為:
{{12|calculate_km: ${args_data}}}
當然,這會回傳一個錯誤,即:
django.template.exceptions.TemplateSyntaxError: calculate_km requires 2 arguments, 1 provided
所以似乎甚至沒有讀取args_data
uj5u.com熱心網友回復:
在提供 HTTP 回應之前,Django 模板標簽在服務器端呈現。瀏覽器在回應中收到的只是 HTML 和 JavaScript。
JavaScript 在客戶端執行,在所有 Django 模板標簽(和其他節點)已經被決議和渲染之后。
不幸的是,您不能將 JavaScript 引數傳遞給 Django 模板標簽,因為執行順序不兼容。您需要將模板標簽重寫為 JavaScript 函式。由于您的代碼看起來像是由事件觸發(基于您的變數名),因此切換所有代碼以在服務器端執行可能是不可能的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/486620.html
