【问题标题】:Display Parent page variable on Child page with template - wagtail/django使用模板在子页面上显示父页面变量 - wagtail/django
【发布时间】:2020-12-14 02:52:30
【问题描述】:

我试图寻找解决方案,但可能错过了,可能是因为我不确定要问什么。

我是 Wagtail/Django 的新手。如何使父页面中的变量在子页面上可见?

我正在尝试制作一个包含页眉、内容和页脚的页面。我将它们附在{% block name_of_section %} 中。现在我有一个子页面(实际上是孙子,但无论如何),其中模板仅包含:

{% extends main_page.html %}
{% load wagtailcore_tags wagtailimages_tags static wagtailuserbar %}

{% block content%}
   {{ page.photo }}
   {{ page.article }}
{% endblock %}

和主页模板(当然是截断的):

{% load wagtailcore_tags wagtailimages_tags static wagtailuserbar %}
htmlcode
{% block header %}some stuff here{% endblock %}
{% block content %}stuff to be replaced in child pages here{% endblock%}
{% block footer %}{{ page.address }} {{ page.links }} {{% endblock %}}
finishing html code here

现在我遇到的问题是,当我加载子页面时,页眉、内容和页脚显示几乎正常。例外是来自页脚的那些变量地址和链接。我认为这是因为它仍然作为{{ page.address }} 传递给子页面,当然子页面没有地址,所以结果是空字符串。

我的解决方法是(可能非常错误地)在models.py 中执行此操作:

def address(self):
    getattr(HomePage.objects.first(), 'address')
    return address

因此,当主页加载时,模板会加载变量,而当子页面加载时,模板会调用方法(也可能以错误的方式 - 但有效)获取变量的值。

但是感觉不对。正确的方法是什么?

【问题讨论】:

    标签: django django-templates wagtail


    【解决方案1】:

    听起来address 并不是真正属于主页的字段,而是整个站点的全局属性。如果是这样,将其移至 Site Settings model 会更合适 - 这样您就可以使用相同的基本模板轻松地在所有页面上使用它。

    更一般地说,如果您有一些全局信息要显示在所有页面的页眉/页脚中,但又不想在每个页面类型中包含检索该信息的逻辑,inclusion template tag 是好办法:在模板标签的函数体中编写检索逻辑,然后交给模板进行渲染。然后,您只需将该标签插入到您的基本模板中。

    【讨论】:

    • 好的,这个地址听起来很合理。但是,如果它更容易改变,我想在 wagtail 管理环境中轻松编辑呢?让它...我不知道...某些页面及其子页面上的“本周笑话”,可由编辑编辑,不需要网站管理员。或者更好的例子。最后 3 篇已发表文章的链接在页脚中。每次添加一个都不能手动编辑,所以我猜是这个问题?
    • 在这种情况下,我会选择包含模板标签 - 已用更多详细信息更新了答案。
    猜你喜欢
    • 1970-01-01
    • 2015-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-28
    • 1970-01-01
    相关资源
    最近更新 更多