【问题标题】:How to use a base.html for default Wagtail Page instance?如何将 base.html 用于默认 Wagtail Page 实例?
【发布时间】:2020-05-12 19:22:35
【问题描述】:

Wagtail 使用一个欢迎模板开始新项目。但是,此模板不继承自任何父模板,例如 base.html。在我们的项目中,我们之前定义了一个 base.html 包含全局 HTML 标签和 CSS/JavaScript 包含。

我们如何告诉默认 Wagtail 页面模型显示在扩展 base.html 的模板中?

【问题讨论】:

    标签: django wagtail


    【解决方案1】:

    澄清一下,有两种可能的设置,具体取决于您创建项目的方式:

    • 如果您使用wagtail start myproject 从头开始​​一个新项目,则初始迁移(部分存在于 Wagtail 本身中,部分存在于项目模板中)将为您设置一个 HomePage 模型和初始主页。此页面类型的模板位于 home/templates/home_page.html,并且已设置为从基本模板(位于 myproject/templates/base.html)继承。
    • 如果您遵循integrating Wagtail into an existing Django project 的文档,初始迁移(在这种情况下完全在 Wagtail 中)将为您提供wagtailcore.Page 类型的初始页面。您并不真正希望直接使用此页面类型(尤其是因为它没有超出标题的字段,也无法添加新的字段) - 之所以这样做,是因为还没有设置“正确的”页面模型,并且需要有 something 作为页面树的初始状态。这个想法是,一旦您在应用中设置了至少一个页面模型,您就可以创建您的真实主页,将站点记录指向它(在设置 -> 站点中),然后删除初始存根。

    尽管如此,如果您真的想为wagtailcore.Page 提供一个带有基本模板的完整模板,您可以在您的项目应用程序中的一个路径templates/wagtailcore/page.html 中创建一个模板文件。只要有问题的应用在 INSTALLED_APPS 列表中高于'wagtail.core',这将覆盖 Wagtail 提供的准系统模板。

    【讨论】:

      【解决方案2】:
      {% extends "base.html" %}
      

      将它添加到您的模板中,它将扩展基础中的任何内容。

      如果您的基本模板中包含块,则使用相同的语法

      {% block content %}
      This will appear wherever you have this same block in the base.html template
      {% endblock %}
      

      Wagtail 建立在 Django 之上,您可以在此处阅读有关其模板语言的更多信息:https://docs.djangoproject.com/en/3.0/ref/templates/language/

      【讨论】:

      • 有没有办法为 default Wagtail Page 模板执行此操作?我们最终创建了一个 HomePage 模型,如文档中所述。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多