Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django:如何将分散的数据传输到模板?_Python_Django - Fatal编程技术网

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

Python Django:如何将分散的数据传输到模板?,python,django,Python,Django,导言 在Django中,当要在模板上显示的数据包含在一个对象中时,这很容易。总结以下步骤(每个人都知道): 您可以编写正确的方法来获取模型类中的对象 在视图中调用此方法,并将结果传递给模板 例如,使用for循环在模板中迭代结果,以在表中显示对象 现在,让我们采取一个更复杂的情况 假设要显示的数据广泛分布在不同类的不同对象上。您需要调用许多方法来获取这些数据 一旦调用这些不同的方法,就会得到不同的变量(非相似对象、整数、字符串列表等) 尽管如此,您仍然希望将所有内容传递给模板,并最终显示一个漂

导言

在Django中,当要在模板上显示的数据包含在一个对象中时,这很容易。总结以下步骤(每个人都知道):

  • 您可以编写正确的方法来获取模型类中的对象
  • 在视图中调用此方法,并将结果传递给模板
  • 例如,使用
    for
    循环在模板中迭代结果,以在表中显示对象
  • <强>现在,让我们采取一个更复杂的情况

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

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

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

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

    对于需要“扩展数据”传递到模板的每个视图,我可以在views.py中创建一个方法(如
    viewXXX\u organize\u data()
    ),该方法将获取raws对象并返回一个包含有组织数据的数据结构,该数据结构将帮助我通过迭代来显示表

    关于要选择的数据结构,我比较了列表和字典

    • 字典有键,因此在模板中调用
      {{{dict.a-key-name}}
      比调用
      {{tabl.3}}
      更干净
    • 列表可以排序,所以当您需要按日期对要显示的元素进行排序时,字典没有帮助,arghh,再次卡住

    你怎么看这些?感谢您一直阅读到这里,并在此分享

    对于您的问题,您进入的是一个概念/架构领域,而不是“我的项目中数据的这个特定视图很难在django的模板层中表示”。因此,我将尝试为您提供问题的鸟瞰图(在飞行时,而不是在地面上),您可以自行决定

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

    该层可以简单地停留在您的视图中,在viewXXX中组织数据,或以其他形式呈现更复杂/详细的体系结构(请参阅或)

    在您的情况下,我将首先执行viewXXX_organize_data()之类的操作,其中我将为您尝试构建的模板使用最合适的数据结构,同时保持与您获取数据的方式(通过模型和其他服务等)的某种独立性。 您甚至可以考虑不直接在模板中使用模型对象,而是创建特定于模板的对象来表示数据的特定视图


    希望这能帮助你做出决定。这不是一个具体的答案,但肯定会帮助你做出决定,然后在整个应用程序中保持连贯性。

    我看不出你的问题有什么意义……你可以在视图中随心所欲地操作数据,并随心所欲地组织数据。在一个或多个上下文对象中,以列表、词典或其他形式出现。请给这个问题一个更好的答案title@Ryan海宁:有什么建议吗?我更喜欢这个新的。它很有帮助,谢谢。这让我很困惑,我不是在做疯狂的事情。现在我知道这是一个很好的方法,我真的很喜欢找到人们通常如何做的例子(获取异构数据并返回经过清理和排序的数据结构的方法的例子)。我想我问这些问题是因为我从Python开始,这对其他人来说应该是显而易见的:)再次感谢。我决定使用命名元组作为中间数据结构来传递给模板(实际上是几个命名元组的列表)。它工作得非常好,因为您可以迭代列表,并使用名称访问属性(优于
    [7]
    )。