Django 如何在模板中重复一个块

Posted

技术标签:

【中文标题】Django 如何在模板中重复一个块【英文标题】:Django How can I repeat a block within a template 【发布时间】:2021-08-03 10:43:39 【问题描述】:

我的 Django 基础模板如下所示:

#base.html

<title>% block title % My Default Title % endblock title %</title>
<meta property="og:title" content="% block og_title % My Default Title % endblock og_title %">

如果我想覆盖特定页面的默认标题:

#page.html
% extends "base.html" %
% block title % My page  Title % endblock title %
% block og_title % My page Title % endblock _ogtitle %

如何设置一次 base.html 块标题(如变量)并在我的文档中使用?然后,如果需要,我会在 page.html 中覆盖标题一次,然后它会被填充?

【问题讨论】:

【参考方案1】:

您可以在基本模板中使用变量:

<title> my_title|default:"my page title" </title>
<meta property="og:title" content=" my_title|default:"my page title" ">

在您看来,然后您传递一个 my_title 的值:

from django.shortcuts import render

def some_view(request):
    # …
    return render(request, 'some_template.html', 'my_title': 'some_title')

【讨论】:

谢谢,但是 1)我想知道您是否可以仅使用模板来实现这一点 2)它不能解决我对 base 和覆盖值中的默认值的需求(尽管我可以用 if 来解决这个问题...其他 @GEV:您可以使用 |default 模板标签:docs.djangoproject.com/en/dev/ref/templates/builtins/#default @GEV:至于将它添加到模板中,我目前不可能,因为它首先呈现“父模板”,然后只替换一些块。【参考方案2】:

回答我自己的问题:

没有好的方法可以做到这一点。这里提到了一些解决方法: How to repeat a "block" in a django template

(我提前看到了这个问题。但不确定是否有任何改变)

这是我选择的解决方法:

#base.html

<title>% block title % My Default Title % endblock title %</title>
<meta property="og:title" content="% block og_title % My Default Title % endblock og_title %">
#page.html
% extends "base.html" %
% block title % % block og_title % My page  Title % endblock og_title %% endblock title %

【讨论】:

以上是关于Django 如何在模板中重复一个块的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Django 模板中的“带有模板标签”中设置 Django 渲染块值?

如何在扩展另一个文件的 django 模板中使用带有动态内容的 html 块片段?

如何在单独的 js 文件中使用访问 django 模板变量,而不是在同一个 html 文件中包含小脚本块?

如何在django html模板中迭代列表[重复]

如何在 Django 的 base.html 中插入多个块?

我如何在Django模板标签中使用模板上下文变量的值? [重复]