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 文件中包含小脚本块?