Javascript 在Django中加载网页后调用动态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

我在python中有一个函数,它将返回许多图像URL中的一个。我想在一个用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 }}";
}

谢谢。

听起来您必须使用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视图函数中的内容