Django:如何将分散的数据传输到模板?

时间:2014-06-01 11:30:26

标签: python django

简介

在Django中,当您想要在模板上显示的数据包含在一个对象中时,它很简单。总结步骤(实际上每个人都知道):

  1. 您编写正确的方法以在模型类中获取对象
  2. 您在视图中调用此方法,将结果传递给模板
  3. 例如,使用for循环对模板中的结果进行迭代,以便在表格中显示对象。
  4. 现在,让我们采取更复杂的情况

    • 让我们说您要显示的数据广泛分布在不同类别的不同对象上。您需要调用许多方法来获取这些数据。
    • 一旦调用这些不同的方法,就会得到不同的变量(不相似的对象,整数,字符串列表等)。
    • 尽管如此,您仍然希望将所有内容传递给模板并最终显示漂亮的表格。

    问题是:

    • 如果您将包含所需数据的所有原始对象传递给模板,则它完全没有组织,您无法以干净的方式迭代变量以获得显示表所需的内容

    问题是:

    在将复杂数据传递给模板之前,我应该如何(哪种结构)和哪里(模型?视图?)?

    我的想法(可能完全错误):

    对于需要"传播数据的每个视图"为了传递给模板,我可以在views.py中创建一个方法(如viewXXX_organize_data()),它将获取raws对象,并返回一个数据结构,其中包含有组织的数据,可以帮助我通过迭代显示表它

    关于要选择的数据结构,我将列表与词典进行了比较

    • 词典具有关键功能,因此在模板中调用{{dict.a-key-name}}而不是{{ tabl.3}}更加清晰。
    • 列表可以进行排序,所以当你需要按日期排序你要显示的元素时,字典没有帮助,arghh,再次卡住!

    你怎么看待这一切?感谢阅读,直到那里,并分享!

1 个答案:

答案 0 :(得分:1)

根据您的问题,您正在进入概念/架构领域,而不是“我的项目中的数据的这个特定视图难以在django的模板层中表示”。所以我会试着给你看鸟问题(飞行时而不是在地上),你可以自己决定。

从第一个哲学框in the django template language documentation可以清楚地看出,模板应该具有尽可能少的程序逻辑。这表明模板中使用的数据的表示应该是简单的,并且完全适应您正在尝试构建的模板(这是我对它的解释)。这种方法表明,您应该有一个层负责中介数据(模型或其他来源)的表示以及模板所需的数据,以实现您希望用户看到的最终表示。

此图层可以简单地保留在您的视图中,在viewXXX_organize_data中,或者以其他形式保留在更复杂/更精细的体系结构中(请参阅DCIHexagonal)。

在你的情况下,我会先做一些像viewXXX_organize_data()这样的事情,我会为你正在尝试构建的模板使用最合适的数据结构,同时保持与获取数据的方式无关(通过模型其他服务)等等)。 您甚至可以考虑不直接在模板中使用模型对象,并创建模板特定对象来表示数据的特定视图。

希望这有助于您做出决定。这不是一个具体的答案,但会帮助您做出决定,然后通过您的应用程序保持连贯。