Django模板块:如何重用它们以及如何将HTML传递给它们?

Django模板块:如何重用它们以及如何将HTML传递给它们?,django,django-templates,template-engine,Django,Django Templates,Template Engine,作为一名熟悉Ruby的前端开发人员,我正在尝试学习Django模板系统 这似乎是我习惯的一个由内而外的版本。我很难理解它的相反思想:在Django中,您将模板的某些部分标记为可重写,而不是声明可重用块并在必要时包含它们 有两件事我不明白 使用Ruby的Padrino,我将声明一个部分(模板化HTML的可重用片段),然后将其包含在多个位置。无论我在哪里调用它,它都会输出它的HTML 根据Django的说法,每个块只能在页面上使用一次:最后,请注意,不能在同一模板中定义具有相同名称的多个块标记 我

作为一名熟悉Ruby的前端开发人员,我正在尝试学习Django模板系统

这似乎是我习惯的一个由内而外的版本。我很难理解它的相反思想:在Django中,您将模板的某些部分标记为可重写,而不是声明可重用块并在必要时包含它们

有两件事我不明白

  • 使用Ruby的Padrino,我将声明一个部分(模板化HTML的可重用片段),然后将其包含在多个位置。无论我在哪里调用它,它都会输出它的HTML

    根据Django的说法,每个块只能在页面上使用一次:最后,请注意,不能在同一模板中定义具有相同名称的多个块标记

  • 我发现Padrino的另一个非常有用的特性是,partials可以接受HTML并在其中的某个位置输出(产生)它。下面是几个例子,一个是帕德里诺,一个是杰德

    请注意,partails HTML不是作为字符串(通过参数笨拙地传递),而是通过嵌套使用模板语言

  • Padrino(Ruby)示例 使用Padrino,我可以将HTML模板代码传递到部分:

    \u container.erb

    <div class="container <%= myclass %>">
      <div class="container-inner">
        <%= yield %>
      </div>
    </div>
    
    <%= partial 'container', locals: { myclass: 'container--header' } do %>
      <h1><%= Sitename %></h1>
      <p>Welcome to my humble place</p>
    <% end %>
    
    结果HTML

    <div class="container container--header">
      <div class="container-inner">
        <h1>Sitename</h1>
        <p>Welcome to my humble place</p>
      </div>
    </div>
    
    <div class="article">
      <div class="article-wrapper">
        <h1>Hello world</h1>
        <p>This is my</p>
        <p>Amazing article</p>
      </div>
    </div>
    
    
    你好,世界
    这是我的

    精彩文章

    Django有可能吗? 问题:

  • 如何在Django中多次重用块?我想声明一段模板代码,并将其包含在页面的多个位置
  • 如何将HTML(模板代码)传递到块中?我想用不同的内容重复使用它
  • 我试图介绍的用例是一个可重用的partial/mixin/block,它将充当站点每个部分的容器包装器

    请注意,使用Padrino,我甚至可以通过在包含partial时传递一个参数来创建partial,这样我就可以为partial的每个实例选择应该使用哪个包装标签(div、nav、header…):

    <% partial 'container', myclass: 'container--header', tag: 'nav' %>
    
    
    
    我想知道如何用Django做到这一点

    在您的回答中,请评论是否可以同时使用a)基本Django功能;b) 一些Django扩展


    谢谢。

    我对帕德里诺不熟悉,所以我不能100%确定我是否了解你在找什么

    然而,Django模板块肯定不是Padrino的partials的等价物。从你的描述来看,我认为应该是相同的

    在大纲中,要创建自定义模板标记,请执行以下操作:

  • 在Django应用程序中创建一个templatetags模块,其中包含一个包含标记Python代码的文件,例如

    yourapp/
        models.py
        templatetags/
            __init__.py
            mytemplatetags.py
    
  • 在该文件中,创建一个名为
    register
    的变量,它是
    django.template.Library
    的实例:

    # mytemplatetags.py
    
    from django import template
    
    register = template.Library()
    
  • 在该文件中,为所需的每个自定义标记编写一个函数

  • 对于包含模板片段的标记,您需要编写一个

    包含标记可以接受参数,参数可以包括HTML(但只能作为字符串)。

    签出:
    # mytemplatetags.py
    
    from django import template
    
    register = template.Library()