【问题标题】:Combining multiple Django templates in a single request在单个请求中组合多个 Django 模板
【发布时间】:2010-09-29 07:38:06
【问题描述】:

我想知道是否有人可以帮助我找出解决以下问题的最佳方法。我正在构建一个使用 Django 模板来构建其 Web UI 组件的 Web 应用程序。有许多常见的 HTML 元素,例如页眉/页脚、HTML 标题、标头等。我想对这些进行一次编码,然后将它们与代表核心应用程序功能的其他模板“包含/组合”。

这可以使用 Django 模板吗?如果是这样,我该怎么做?

【问题讨论】:

    标签: django django-templates


    【解决方案1】:

    你可以使用 django 的 extends 标签。假设您有页眉和页脚。你可以制作一个模板,比如说,foo.django:

    <h1>My HTML Header</h1>
    <!-- an so on -->
    
    {% block content %}
    {% endblock %}
    
    <!-- html footer -->
    

    然后,您可以制作另一个模板,例如 bar.django:

    {% extends "foo.django" %}
    
    {% block content %}
    This overrides the content block in foo.django.
    {% endblock %}
    

    ...然后会渲染:

    <h1>My HTML Header</h1>
    <!-- an so on -->
    
    This overrides the content block in foo.django.
    
    <!-- html footer -->
    

    http://www.djangobook.com/en/1.0/chapter04/ 有关于 django 模板的良好说明。

    【讨论】:

      【解决方案2】:

      {% extends %}{% include %} 方法适用于在上下文中不需要额外信息的页面元素。

      只要您需要从数据库中向上下文中插入更多内容,模板标签就会派上用场。例如,Django 包含的 contrib.comments app 定义了一个 {% get_comment_list %} 模板标签,用于检索附加到给定模型实例的 cmets。以下是您将如何使用它:

      <div>
      {% load comments %}
      {% get_comment_list for my_instance as comment_list %}
      {% for comment in comment_list %}
        <p><a href="{{ comment.url }}">{{ comment.name }}</a> wrote:</p>
        {{ comment.comment }}
      {% endfor %}
      </div>
      

      您可以将其保存在单独的模板中,并将{% include %} 保存在其他模板中。

      对于您自己的内容,您可以编写自己的自定义模板标签。关注the documentation。只要有可能,使用simple tag 机制编写标签会很方便。您会在 djangosnippets.orgblogosphere 上找到方便的现成模板标签。

      【讨论】:

        【解决方案3】:

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-03-28
          • 2017-04-11
          • 2023-03-07
          • 1970-01-01
          • 1970-01-01
          • 2020-03-03
          • 2019-01-08
          • 2021-12-14
          相关资源
          最近更新 更多