在Django中网页加载后调用动态Python函数
我在用Python写一个函数,这个函数会返回很多图片的链接。我想在用Django做的网页上加一个按钮,点击这个按钮后,网页上的图片就能换成这个函数返回的链接。不过,我遇到了一个问题,就是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 个回答
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视图函数里面的内容。