簡體   English   中英

Django模板,在單擊按鈕時在類內調用函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM