Javascript 在Django中加载网页后调用动态python函数
我在python中有一个函数,它将返回许多图像URL中的一个。我想在一个用django制作的网页上实现一个按钮,它会将图像的源代码更改为返回值。我遇到的问题是,django模板标记只有在呈现页面时才可访问,如前所述。由于实际代码无法在javascript中重新创建,是否有一种变通方法可以在每次按下按钮时访问python函数的返回数据 下面是一些代码来澄清我的问题:Javascript 在Django中加载网页后调用动态python函数,javascript,python,django,django-templates,Javascript,Python,Django,Django Templates,我在python中有一个函数,它将返回许多图像URL中的一个。我想在一个用django制作的网页上实现一个按钮,它会将图像的源代码更改为返回值。我遇到的问题是,django模板标记只有在呈现页面时才可访问,如前所述。由于实际代码无法在javascript中重新创建,是否有一种变通方法可以在每次按下按钮时访问python函数的返回数据 下面是一些代码来澄清我的问题: class Foo(models.Model): def get_image_url(): if(rando
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 }}";
}
谢谢。听起来您必须使用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视图函数中的内容