【问题标题】:django ajax load() - possible to update two or more divs, with part of the returned django view context?django ajax load() - 可以更新两个或多个 div,并带有返回的 django 视图上下文的一部分?
【发布时间】:2010-01-09 13:30:18
【问题描述】:

我是用load方法替换ONE div的内容

$( '#ajax_tbody_result' ).html( ' ' ).load(url);

现在我想知道是否可以调用 url,获取返回值,将它们拆分并更新模板中的两个或多个 div。

因此,解决方案是从返回的 django 上下文中获取一些对象,将其拆分并使用正确的内容更新 div。这是返回的上下文:

context = {
            'object_list' : contact_list_page,
            'headers': headers,
            'filter_by_classification_form': filter_by_classification_form,            
            'filter_by_address_form': filter_by_address_form,
            'filter_by_company_form': filter_by_company_form,
            'urlquerystring_previous_page' : urlquerystring_previous_page,
            'urlquerystring_next_page' : urlquerystring_next_page,
        } 

编辑:解决方案:

将 jquery get 请求的 html 响应拆分为多个部分,并更新 .html 中的相应部分。你可以这样做:

$.get(url, function(results){
      var table = $("table", results);
      var spans = $("span.step-links", results);

      //update the ajax_table_result with the return value
      $('#ajax_table_result').html(table);
      $('.step-links').html(spans);

    }, "html");

结果对象是渲染为 .html 的 django 模板。从这个 .html 返回我获取我需要的东西(表格和带有 id 步骤链接的跨度)并更新我页面中的相应对象。

【问题讨论】:

  • 我认为这更像是一个 jquery 问题而不是 django 问题。
  • 更简单的方法可能是创建一个 url->view->template 来查看每个 div 的外观。您可以分成两个视图,或使用查询字符串来确定在一个视图中完成的操作。然后你可以回到你的 .load() 方法并为适当的 div 加载相应的 url。
  • 是的,我想过这个。但这会导致两个 ajax 调用,这对我来说似乎不是很整洁。

标签: django jquery


【解决方案1】:

使用

$.get(url, [{key:value}], function(data){
    //data is the entired contents of going to that url.
    //split it up here and do your stuff

    $('#div1').html(piece1);
    $('#div2').html(piece2);
});

http://docs.jquery.com/Ajax/jQuery.get

编辑:更仔细地查看您的问题,您还需要为您使用 url 调用的视图创建一个 django 模板,该模板将为 javascript 函数提供您想要的所有信息。

【讨论】:

  • 我刚刚偶然发现docs.jquery.com/Ajax/jQuery.getJSON。用get还是getJSON哪个更好?
  • 如果您在 javascript 中处理 JSON,则使用 getJSON。但您必须让您的视图返回 JSON。 django 有一些函数可以返回 JSON 格式的数据,但我认为这不适用于该上下文。 (这取决于您需要该上下文的哪些部分)
  • 好的,谢谢。我的视图返回一个 ajax 调用的模板。使用您的部分代码: .html(piece1) 。我是在 django 上下文还是在返回的模板的一部分上引用?我的视图是这样返回的: return render_to_response(template, context, context_instance = RequestContext( request ) )
  • 你能用 ajax/get 函数的 url 输出更新你的问题吗?数据=那个输出。然后你可以把它分成piece1和piece2,或者你需要把它分开。
  • 没错。我只是不知道如何操作返回的数据对象,它实际上是一个 html 渲染的 django 模板。
【解决方案2】:

给出这个答案我感觉自己打破了记录,但你真的想看看jQuery Taconite Plugin。它可以满足您的要求,而且还多 500%。查看示例并感到惊讶。我不会轻易使用这个词,但这是一个真正优雅的解决方案。

【讨论】:

  • 那么你如何在 django 中使用它?
  • 抱歉延迟;我很少再用 SO 了。在 jQuery 中使用 taconite 只需要创建一个 URL 映射和视图来处理请求。由于响应是 XML 格式的,因此很容易创建格式错误的响应,所以我有一个支持类来将它与 Django 一起使用。给我发电子邮件(在我的个人资料中列出),我会给你发一份。文件顶部有一些轻量级文档。
猜你喜欢
  • 2018-01-08
  • 2013-08-11
  • 2021-09-14
  • 2018-12-11
  • 2019-02-21
  • 2012-01-30
  • 1970-01-01
  • 1970-01-01
  • 2016-10-14
相关资源
最近更新 更多