【问题标题】:Django view/template boxesDjango 视图/模板框
【发布时间】:2023-03-07 14:52:01
【问题描述】:

我是 python/django 的新手(来自 PHP),有一个设计问题我不知道如何解决。

假设我们有主要内容块和一些侧栏。 侧栏显示在网站的每个页面上。但是盒子可以不同(相同的设置,但在某些页面中特定的盒子被禁用) 侧栏有几个框,比如新闻、事件、最近的任何事情、用户详细信息、统计信息等。动态数据。

除了我理解视图函数应该填充上下文并调用 content.html (这会呈现主要内容块)

虽然 context.html 应该扩展 base.html 并且 base.html 里面有侧栏。

问题是: 我如何将所有这些数据传递到侧框(我提醒一下,连接到某些模型的动态数据)? 我希望有人可以向我解释这一点。提前致谢

【问题讨论】:

    标签: python django templates view


    【解决方案1】:

    您好,欢迎来到 Django。上下文中的数据可用于所有块。您无需执行任何特定操作即可将上下文数据传递给块或包含。

    此外,您可以使用模板标签来封装您在模板级别可能需要的其他功能:http://docs.djangoproject.com/en/1.3/howto/custom-template-tags/

    【讨论】:

    • 谢谢,但这意味着,我必须在每个小视图中复制所有内容。听起来不干 :) 我确定我错过了一些重要的东西......可能 context['sidebar']=SomeGetterClass.method 可以完成这项工作。但仍然必须在每个视图中重复......仍然不好
    • 如果不确切了解您要完成的工作,很难在代码中提供准确的解决方案。但是,似乎您需要/想要做的是根据上下文中的存在有条件地在最顶层包含其他模板。这样你就不会重复任何事情。
    • 嗯,感谢关注。我会尽量说清楚一点。假设我在侧边栏上有 N 个动态框。在大多数页面中显示所有 N 个框。如果提供主要内容区域的每个视图根本不引用该框,那么明智的决定。但有时我想跳过几个框。例如在 /videos/ 我不想显示与视频相关的框。这样,我只需将变量添加到上下文中,模板将跳过该框。所以主要问题是实际上如何将数据传递到盒子中(基于base.html,而不是基于视图)......如上所述的模板标签?
    • 是的,使用模板标签,您可以从上下文向它们传递变量,也可以从上下文服务器端解析变量。同样,没有看到确切的实现,我不知道这是否是您的 解决方案。
    【解决方案2】:

    经过一些额外的研究,我发现有 4 种方法可以做我想做的事

    1) 中间件
    2) 上下文处理器
    3) 包含标签(模板标签),正如 Brendon 提到的那样。
    4) django-blocks

    我停在第三种方法上。 测试了前三个。

    决定开博客,自己写笔记...
    对此方法的更详细回顾:
    http://tigra-potd.blogspot.com/2011/04/django-sidebar-boxesblocksmodules.html

    【讨论】:

      猜你喜欢
      • 2012-05-26
      • 1970-01-01
      • 2018-04-05
      • 2018-11-24
      • 1970-01-01
      • 2018-01-10
      • 2012-11-13
      • 2015-03-24
      • 2019-03-14
      相关资源
      最近更新 更多