Django base.html 块覆盖

Django base.html block overwriting

提问人:nigel239 提问时间:11/15/2023 最后编辑:nigel239 更新时间:11/15/2023 访问量:47

问:

我想定义并附加到 base.html 模板中定义的块。

假设我有以下模板

<!DOCTYPE html>
<html>
    <head>
        <title>My Project</title>
        {% block append_to_me %}{% endblock %}
    </head>

    <body>
    {% block content %}{% endblock content %}
    </body>
</html>

然后,我将使用以下模板作为我的视图, 我的视图呈现了一些 Wagtail 组件,这些组件可能会 想要使用 append_to_me 块。

这不仅适用于 wagtail 块,也适用于普通的 django 模板标签

{% extends "base.html" %}

{% block content %}
    <h2>Content for My App</h2>
    <p>Stuff etc etc.</p>
    {# I want it to not matter where I use this. #}
    {% my_custom_tag %}
{% endblock content %}

哪里会做这样的事情:{% my_custom_tag %}

@register.simple_tag(takes_context=True)
def my_custom_tag(context):
    objects = Preload.objects.all()
    for object in objects:
        append_to_header_block(object.html)

Wagtail 块示例:

class MyBlock(blocks.StructBlock):
    title = blocks.CharBlock()
    content = blocks.RichTextBlock()

    class Meta:
        template = 'myapp/myblock.html'

myapp/myblock.html

{% add_to_header IMG "img/my-img.jpeg" %}
...

我还希望能够保留以前调用函数的内容, 以免覆盖之前的内容。add_to_header

我只是无法弄清楚我将如何实现这一点,因为有几个问题:

  • 评估顺序,我很确定 base.html 的内容会在任何其他模板之前呈现。
    • 也许这可以通过以某种方式从任何地方覆盖块来解决;每次都打电话?不知何故,这将是我的问题。append_to_meblock.super
  • Wagtail 块甚至可能不知道它们没有在 base.html 中使用,因为它们的多功能性。

关于我将如何实现这一点的任何想法? 我什至不确定这是否可能,但我很想听听你对此的看法。

python django django-templates wagtail 模板tags

评论

0赞 CoffeeBasedLifeform 11/15/2023
我不太确定你想做什么。是否希望代码仅向区块添加内容?如果是这样,那为什么不呢?您还可以查看 InclusionTags 并让标签模板覆盖该块。append_to_me{% block append_to_me %}{{ block.super }}{% my_custom_tag %}{% endblock %}
0赞 nigel239 11/15/2023
是的,我确实想附加它。我觉得我的问题很清楚?如果我能覆盖它;我会的,但在这种情况下这是不可能的。我不能从我自己的模板标签中覆盖块,我也不能从wagtail块本身覆盖它,因为我不能从我的模板标签中做;出于显而易见的原因。这不符合我的需求。@CoffeeBasedLifeformextends base.html
0赞 CoffeeBasedLifeform 11/15/2023
但是在模板中,您已经覆盖了内容块。是什么阻止您覆盖块并在那里调用标签?这是我不清楚的。如果您根本无法更改任何模板,以便在正确的块中调用标签,那么您就不走运了,因为标签不知道它们在哪个块中;他们只是输出 HTML。append_to_me
0赞 nigel239 11/15/2023
该模板是帮助可视化设置的示例。我无法从组件内部覆盖。标记可能是组件内部的多个模板。

答: 暂无答案