谁应格式化我的数据以供显示?

时间:2010-01-27 07:49:44

标签: django

我有一个django视图,这个视图返回一个用ajax调用异步填充的表。

从设计的角度来看,我应该遵循哪一个:

  1. 通过ajax调用的django视图将表的内容作为json响应返回,包含每个单元格的html标记。 javascript回调处理程序获取内容并将它们打包到表格单元格中。
  2. 通过ajax调用的django视图返回关于应该进入表的内容的纯数据,再次作为json响应。异步javascript回调获取数据,使用适当的标记对其进行格式化,并将其放入表中。
  3. 换句话说,谁应该负责单元格内容的标记格式化?视图还是javascript?

    我很想说第一个,因为视图已经返回标记内容。如果它返回包含标记内容的json,则没有太大区别。

    我想听听你的观点。

6 个答案:

答案 0 :(得分:3)

如果您正在填充整个表格,您可以将表格放在自己的模板中,并通过ajax / json返回表格的html。

您需要编辑原始模板以包含表格模板:

 {% include "myapp/_table.html" %}

在视图中,将渲染的模板作为json变量返回,javascript将替换为:

 return { 'table': render_to_string("myapp/_table.html", context) }

这种方法很适合您总是想要更新整个表,并且表的呈现不需要完整的上下文。我不确定性能是什么,但它是一种更新部分页面的简洁方法,因为你只定义了一次表。

答案 1 :(得分:2)

这取决于(经常)。

如果仅在此处和现在请求数据,那么只需让它在服务器端使用已经呈现标准视图的同一组模板进行渲染就会更容易且更不容易出错。

如果你能想到用例,在其他地方需要数据的地方(比如自动完成字段),最好让JavaScript完成工作并创建一个干净,可重用的JSON导出。

这些选项会增加所有其他答案,最后由您决定。

答案 2 :(得分:1)

在诸如Django的MVP系统中,View决定应显示哪些数据,并且Presenter决定如何显示它。因此,JavaScript应该进行大量的格式化,除非事实证明难以做到这一点。

答案 3 :(得分:1)

练习Unabstrusive javascript是一件好事,有些人也称之为Hijax

因此,您首先要有一个标准页面,它将表格与页面的其余部分一起显示,并在特定的django-template块中显示表格。

一旦你有了这个,你可以在“如果不是ajax”中包含django模板的extends部分,所以你只能在ajax响应中获得所需的表部分,你可以在客户端加载到所需的div。

在服务器上维护标记两次并在客户端使用javascript维护标记是不必要和冗余的。

因此,我更喜欢服务器redering的第一个选项,而客户端只加载渲染的html。

答案 4 :(得分:1)

之前我曾多次遇到过这种情况,我通常选择后者,视图返回纯JSON。

但是,您选择的方法肯定取决于几个因素,其中一个因素是目标设备(以及它们的CPU /网络限制)。纯JSON通常会导致较小的有效负载,因此可能是移动设备的最佳选择。

公开内容的HTML和JSON版本也是有意义的。如果您希望在某个时刻为您的站点创建一个非常轻量级的API,这将特别有用。

最后,您可以使用John Resig的micro-templatingClosure Templates等库来简化客户端HTML的生成。

答案 5 :(得分:0)

我会选择第一选择,正确的是它为用户呈现更多优点:页面立即加载(不等待异步调用),不需要JS(例如移动设备)