21

所以我有一个base.html:

<html>
    <body>
        <div id="header"> ... </div>
        {% block main %}{% endblock %}
        <div id="footer"> ... </div>
    </body>
</html>

我还有一个显示用户帖子的页面:

{% extends base.html %|
{% block main%}
    <h1>welcome to yours posts hangout!</h1>

      ... snazzy code here that shows all the posts ...

{% endblock%}

现在,问题是,也许我有另一个这样的页面:

{% extends base.html %|
{% block main%}
    <h1>look at all posts by all users!</h1>

      ... snazzy code here that shows all the posts by all the users ...

{% endblock%}

因为我们都属于门萨,我们可以看到我的时髦代码被重复了两次(为了重言式的乐趣!)

我不想重复这段代码——我的意思是,如果这将是一个主要的麻烦,我会的,但否则我想要一个定义了时髦代码的页面,然后将上面的小改动和(可能)在它下面。

我对模板的理解是不稳定的——我认为这是做这件事的方法,有没有更好/标准化的方法?

时髦的.html:

{% extends base.html %|
  {% block aboveSnazzy%}
  {% endblock %}

      ... snazzy code here that shows all the posts by all the users ...

  {% block belowSnazzy%}
  {% endblock %}
{% endblock%}

然后对于每个不同的部分,我可以拥有:

用户区域.html:

{% extends snazzy.html %|
  {% block aboveSnazzy%}
      <h1>welcome to yours posts hangout!</h1>
  {% endblock %}


  {% block belowSnazzy%}
      <h1>i didn't think this far ahead in the example</h1>
  {% endblock %}
{% endblock%}

其他的等等等等!

好的,所以我知道我可以只发送一个带有不同标题的参数或者你有什么 - 让我们假设上面的时髦的东西,我不知道,显示我想要的其他模板或做一些不平凡的事情。我在上面详细说明的“方式”是这样做的吗?

干杯!

4

1 回答 1

28

哟。:-)

答案取决于您的模板有多少共同点。

  • 如果您的模板确实有很多共同点,即它们是您网站某些部分的页面,或者只是具有非常共同的结构,那么您的做法就是正确的。我只是认为您应该为块使用更具描述性的名称。

    {% extends base.html %}
    {% block page_heading %}{% endblock %}
        ... snazzy code here that shows all the posts by all the users ...
    {% block extra_content %}{% endblock %}
    
  • 如果您的模板没有太多共同点,但共享一些特定的内容块,那么情况就不同了,因为很难建立一个正确继承的结构。在这种情况下,您应该使用{% include %}标记。例如,制作另一个显示帖子的模板,比如_list_posts.html,然后在子模板中使用它。

    {% extends base.html %}
    {% block main %}
    <h1>Welcome to your posts hangout!</h1>
    {% include '_list_posts.html' %}
    {% endblock %}
    

    您也可以为此使用包含标签

那么,您应该选择哪个选项?试着回答这个问题:这两个模板是否应该有一个共同的父级?如果是,请选择第一个选项。否则,请选择第二个选项。

于 2012-06-02T07:44:24.077 回答