在Django中加载网页后调用动态python函数
Posted
技术标签:
【中文标题】在Django中加载网页后调用动态python函数【英文标题】:Call a dynamic python function after the webpage is loaded in Django 【发布时间】:2014-08-28 14:48:01 【问题描述】:我在 python 中有一个函数,它将返回许多图像 URL 之一。我想在用 django 制作的网页上实现一个按钮,它将图像的源更改为返回值。正如here 所解释的那样,我遇到的问题是 django 模板标签仅在呈现页面时才可访问。由于无法在javascript中重新创建真实代码,是否有一种解决方法可以在每次按下按钮时访问python函数的返回数据?
这里有一些代码可以澄清我的问题:
class Foo(models.Model):
def get_image_url():
if(random.randint(0,1)):
return 'http://img1.jpg'
else:
return 'http://img2.jpg'
如果可能的话,这就是我希望它在 javascript 中的行为方式。
function updateImage()
document.getElementById("testImage").src=" foo.get_image_url ";
谢谢。
【问题讨论】:
【参考方案1】:听起来您必须为此使用 AJAX。您可以定义一个 Django 视图,该视图返回 JSON 消息,如下所示:
status: "ok",
url: "img1.jpg"
因此,在您的代码中,您可以定义一个事件处理程序(在 JavaScript 中),如下所示:
// Attach a listener to a button for a click event,
document.getElementById("testImageButton").addEventListener("click", function()
var xhr = new XMLHttpRequest();
// This URL returns the above JSON.
xhr.open("GET", "/images/random");
xhr.onloadend = function()
// Should have error handling in case response does not return correctly.
var imageResult = JSON.parse(xhr.response);
if(imageResult['status'] == 'ok')
// update the image src
document.getElementById("testImage").setAttribute("src", imageResult['url']);
xhr.send()
)
因此,唯一的“动态函数部分”是 Django 视图函数中的任何内容。
【讨论】:
以上是关于在Django中加载网页后调用动态python函数的主要内容,如果未能解决你的问题,请参考以下文章
在 Python Django 中加载 Mysqldb 模块时出错
我无法从 JQuery ajax 调用中加载部分 Django 模板
在 CPanel 中使用 Python 在 Django 管理面板中加载静态文件
在 Django 应用程序中加载 TensorFlow 模型的位置