[英]Django template, calling a function inside a class on button click
我正在嘗試在用戶單擊按鈕時在一個類中調用函數。 這是我的看法:
def index(request):
#return HttpResponse ('Hello world!')
return render(request, "Articol/index.html", {'WallStreet': WallStreet.objects.all(), 'Add': CreateWallStreetArticle()})
因此,在模板上,這是按鈕的代碼:
<button id="about-btn"> Click to add new articles to the database</button>
<script>
$(document).ready( function() {
$("#about-btn").click( function(event) {
{{ Add.AddArticle() }};
});
});
</script>
因此,如您所見,該函數位於類CreateWallStreetArticle()的內部使用我擁有的代碼,當我按下按鈕並且不了解調用函數AddArticle()的方式時,它什么也沒有發生
如果在視圖上我將返回渲染更改為此:
return render(request, "Articol/index.html", {'WallStreet': WallStreet.objects.all(), **'Add': CreateWallStreetArticle().AddArticle()**})
它調用該函數,但不單擊按鈕,當我重新加載頁面時,它會自動調用它:-)
謝謝!
假設index
視圖內有一些JS代碼,則需要做兩件事:
1)您錯誤地調用了AddArticle函數-它應該只是{{ Add }}
(由於它位於字典中,因此將get
CreateWallStreetArticle()
)
2)您需要將代碼標記為Django不會逃脫JS的安全對象:您可以通過將{{ Add }}
放入{% autoescape off %}{{ Add }}{% endautoescape %}
。
注意:由於多種原因,不建議使用此方法。 一個原因是安全性,另一個原因是邏輯分離。 假設當然有可能,最好直接在模板中包含任何{{ Add }}
。
我認為正確的方法是使用Ajax。 Ajax代表異步Javascript,而這正是我們所需要的。 您要做的是將js函數綁定到您的按鈕,該按鈕會將ajax請求發送到您提供的url,該url將映射到您的urls.py
並調用所需的視圖。 在視圖中,您可以運行所需的任何python代碼,並返回包含所需數據的json響應。
我建議您閱讀Django ajax教程Tango ,它提供了django usign與ajax用法的基本示例,例如按鈕示例。 如果您有任何疑問,請隨時提問。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.