我在python中有一个函数,它将返回许多图像URL中的一个。我想在用django制作的网页上实现一个按钮,它会将图像的源更改为返回值。我遇到的问题是,只有在呈现页面时才能访问django模板标记,如here所述。由于真正的代码无法在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 }}";
}
感谢。
答案 0 :(得分:2)
听起来你必须使用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视图函数中的任何内容。