【问题标题】:django template includesdjango模板包括
【发布时间】:2010-10-25 08:51:09
【问题描述】:

我目前遇到了 django 模板的问题。我基本上有3个模板文件:

  • 基础
  • 故事列表
  • story_detail

Story_list 和 _detail 扩展了 Base,效果非常好。但是,list 和 detail 共享一些代码,这些代码扩展了我的侧边栏的基本模板。我基本上在两个模板中重复了一大段代码,而我的程序员说那是错误的。必须有更好的方法,我敢肯定。我试过包含,但是我在包含的文件中有:

{% block item %}
    content stuff
{% endblock %}

大约 3 个街区。问题是这些都没有被拾取/渲染。如果我将文件包含在扩展 base 的块部分中,那么它会正确转储所有内容,但如果我不将它包含在块中,我什么也得不到。 SSI是要走的路吗?我玩弄了它,但这似乎也不能正常工作。任何帮助表示赞赏。

【问题讨论】:

  • 我很困惑。为什么不把侧边栏的东西放在基地本身?

标签: python django django-templates


【解决方案1】:
{% include xxx.html %}

这个标签有效。

另一种方法是使用过滤器。过滤器调用函数进行渲染,渲染时可以使用模板。

【讨论】:

    【解决方案2】:

    通常,使用includes 不是 Django 模板的答案。让我从几个方面回答你的问题。

    首先,让我谈谈侧边栏。

    • 几乎所有常用页面都将使用该边栏吗? 将其放入Base。不要覆盖那些侧边栏块(即根本不要将它们写在您的 Story_* 模板中)。

    • 这个侧边栏是 Story_* 模板独有的吗? 制作另一个名为 Story_base 的模板并对其进行扩展。这类似于在 Java 中创建抽象超类。 (答案在我的脑海中,但措辞是来自 jpwatts 的无情的ripped off。)

    接下来,让我谈谈模板继承。假设您有一个名为Story_list 的模板扩展了Base。此时,刚刚放入{% extends "Base" %}之后,Story_list正是Base。您在Story_list 中输入的任何其他内容都将被忽略,因为模板已经完成。你现在唯一能做的就是覆盖在Base中定义的块。

    最后,请允许我联系includes。尽量避免它们。其他模板引擎,例如 PHP,似乎鼓励使用includes。但是,从长远来看,这可能会导致难以管理的模板。查看包含的 sn-p 并立即确定它在模板层次结构中的位置稍微困难一些。它们也更难重构到模板层次结构中,尤其是当您将它们包含在多个级别时(一次在Base,两次在Story_base,一次在某些Story_*,等等)。

    【讨论】:

    • 侧边栏对所有页面都是通用的。我目前将它们放在基础中,并在每个模板中扩展它。扩展是每个子模板中完全相同的代码。这就是我试图避免的。当我必须渲染这些特定模板时,我可以这样做吗?基本上,侧边栏需要某些变量才能完整。这是我想我不理解的部分。感谢您的解释和时间。
    • 当您渲染您的子模板 Story_ 时,假设您正在制作 Base 的副本,将块中的所有内容替换为 Story_ 中定义的块,然后填充在变量的值中。如果您的 Base 有一个带有 {{ my_page_name }} 变量的侧边栏,并且您使用 my_page_name = "STORY_LIST" 渲染 Story_list,那么您将在侧边栏中看到 "STORY_LIST"。
    • 只有不问问题的人才是真正的白痴 :P 不客气。 (嗯,我最好尽快发布一个问题......)
    【解决方案3】:

    你有一个{% include %}标签。

    【讨论】:

    • 是的,如上所述,它并没有像我想象的那样工作。
    • “如果我将文件包含在扩展 base 的块部分中,那么它会正确转储所有内容”听起来它可以工作。我错过了什么?
    【解决方案4】:

    如果故事模板之间存在站点范围内不需要的通用代码,我会创建一个 story_base(扩展原始 base)并让我的故事模板扩展它。

    【讨论】:

      猜你喜欢
      • 2023-03-09
      • 2010-10-02
      • 1970-01-01
      • 2013-06-10
      • 2013-08-27
      • 2011-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多