使用 AJAX 获取 Django 视图数据

Posted

技术标签:

【中文标题】使用 AJAX 获取 Django 视图数据【英文标题】:Fetch Django view data with AJAX 【发布时间】:2018-10-06 22:04:51 【问题描述】:

目前我正在构建一个通过 AJAX 更新主页数据的应用程序。 基于this 问题,我使用(参见下面的代码/1/)ajax 来刷新我的页面。我的另一个目标是从视图中捕获某些变量并用作 JS 变量。如果我在 AJAX 请求中仅使用 Django 模板变量,我的变量不会刷新。

第一次尝试:

Django 视图:

def fetch_data (request):

    query_1=Objects.all()
    query_2=Objects.all()

    #From these  queries I colect data and push  them to lists.

    context= 
                'variable_1': variable_1,
                'variable_2': variable_2,
                'time_variable': time_variable #changing in every minute
           

    return render(request, 'app/index.html', context)

AJAX:

这里我使用 AJAX 请求。我每分钟都运行它以将我的页面重新加载到我的页面中。我的问题是我想加载只是让我们说time_variable 在AJAX 中再次使用它。如果我在 AJAX 重新加载时像使用单个模板变量 (time_variale|safe) 一样使用它,我会一次又一次地获得相同的变量,而不是因为刷新而获得新变量。我如何捕获 Django 变量?

setInterval(function()
    if(new Date().getSeconds() === 0)      
        $.ajax(
        url:'% url 'fetch_data' %',
        success: function (data)
              $('body').html(data); #This working, the data refreshing
              var="time_variable|safe"; #Here I always get the same in every minutes despite the variable get new value in every minute in the view.
           
        );
  
,1000)

【问题讨论】:

我不明白为什么你会认为 JS 内部的硬编码值会因为 Ajax 调用而改变。 这只是一个想法,我分享了它,我意识到,它不起作用。你知道有什么建议吗? time_variable|safe 在页面呈现时计算,而不是在运行 javascript 时计算。您需要将新的时间变量与您的 json 一起传回 您正在调用 AJAX 请求以仅刷新 html 模板的正文,但它不会刷新您的变量。为了也刷新变量,您可以创建另一个视图,该视图将以 JSON 格式返回您的变量。然后在您的 javascript 部分中,您可以创建另一个 AJAX 请求,该请求将调用 JSON-view 并从中获取变量的值。 【参考方案1】:

解决方案 1

从服务器获取 JSON 格式的数据并更新变量和 HTML。需要一个新视图来向 AJAX 请求提供数据。

    setInterval(function()
    if(new Date().getSeconds() === 0)      
        $.ajax(
        url:'% url 'fetch_data' %',
        success: function (data)
              response_json = JSON.parse(data)

              $('body').html(response_json.html_data); #This working, the data refreshing
              var=response_json.variable_value; #Here I always get the same in every minutes despite the variable get new value in every minute in the view.
           
        );
    
   ,1000)

解决方案 2

每隔一段时间重新加载页面,这不是一个推荐的建议,因为它只会降低后端的性能并且效率低。

【讨论】:

以上是关于使用 AJAX 获取 Django 视图数据的主要内容,如果未能解决你的问题,请参考以下文章

使用AJAX获取Django后端数据

通过ajax获取django的queryset数据

从 django 视图上的 AJAX 调用获取请求时出现错误 404

Django通过ajax获取请求发出两个请求

django基础知识之Ajax:

django之jquery完成ajax