Django模板,在按钮单击时调用类中的函数

时间:2016-01-04 11:31:54

标签: javascript jquery python django python-3.x

我正在尝试在用户单击按钮时调用类中的函数。 这是我的观点:

<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>

因此,在模板上,这是按钮的代码:

return render(request, "Articol/index.html", {'WallStreet': WallStreet.objects.all(), **'Add': CreateWallStreetArticle().AddArticle()**})

因为你可以看到函数在类CreateWallStreetArticle()中 使用我所拥有的代码,当我按下按钮并且我无法理解调用函数 AddArticle()

的方法时,它什么都不会发生。

如果在视图上我将返回渲染更改为:

DROP FUNCTION IF EXISTS `P_AVG`;
DELIMITER $$
CREATE FUNCTION P_AVG(tblName CHAR(64)) RETURNS INT
BEGIN 
    DECLARE cnt INT;
SELECT COUNT(*) INTO cnt FROM tblName;
return cnt;
END$$
DELIMITER ;

它调用该函数但不是单击按钮,当我重新加载页面时它会自动调用它而我不希望: - )

谢谢!

2 个答案:

答案 0 :(得分:0)

假设$datum视图中有一些JS代码,您需要做两件事:

1)您错误地调用了AddArticle函数 - 它应该只是index{{ Add }} get,因为它在字典中

2)您需要将代码标记为Django无法逃脱JS的安全:您可以通过将CreateWallStreetArticle()转换为{{ Add }}来实现此目的。

注意:出于多种原因,不建议使用此方法。一个原因是安全性,另一个原因是逻辑分离。假设当然可以直接在模板中包含{% autoescape off %}{{ Add }}{% endautoescape %},最有可能更好。

答案 1 :(得分:0)

我认为正确的方法是使用Ajax。 Ajax代表异步Javascript,这正是我们所需要的。您需要做的是将js函数绑定到您的按钮,该按钮将向您提供的网址发送ajax请求,该网址将映射到您的urls.py并调用您需要的视图。在视图中,您可以运行所需的任何python代码,并返回包含所需数据的json响应。

我建议您阅读Tango with Django ajax tutorial,它提供了使用django usign的基本示例,如按钮示例。如果您有任何疑问,请随时向他们提问。