Django 在子模板中扩展公共变量或块

Posted

技术标签:

【中文标题】Django 在子模板中扩展公共变量或块【英文标题】:Django extend common variable or block in child templates 【发布时间】:2018-06-09 02:32:17 【问题描述】:

我在基本模板中有一个公共变量或块,我想在子模板中扩展它,我该如何实现?我有以下代码。

base.html

<html>
    <head>
        <title>
            % block page_title % % endblock %
        </title>
        <meta property="og:title" content="% block page_title % % endblock %" />
        ...
    </head>
<body>
<h1> % block page_title % % endblock % </h1>
...

my_page.html

% extends 'base.html' %

% block page_title %
    Page title goes here
% endblock %

当我运行此代码时,我收到以下错误 名为“page_title”的“block”标签多次出现

【问题讨论】:

AFAIK,块必须是唯一的。你的区块page_title 出现了两次。 我该如何解决? 在每个view中,设置一个上下文变量,其中包含页面标题的值。 正如@SachinKukreja 所说,在所有这些地方使用相同的上下文变量并确保您的视图正确提供它。您可以在模板中提供一个默认值,以免将其留空。 【参考方案1】:

每当您发现自己希望某个值在模板中出现两次时,就会觉得应该在渲染上下文中提供该数据。

有很多选项,但最简单的就是在渲染模板时提供一个page_title 上下文参数:

def my_view(request):
    # View code here...
    return render(request, 'myapp/index.html', 
        'page_title': 'Your Page Title',
    )

然后在您的模板中将其用作任何其他模板变量: page_title

【讨论】:

以上是关于Django 在子模板中扩展公共变量或块的主要内容,如果未能解决你的问题,请参考以下文章

django模板语言中的extends,block和include

Django 模板系统2

如何使用 Django 的模板扩展变量?

如何使用 Django 的模板扩展变量?

有没有办法将变量传递给 Django 中的“扩展”模板?

DJango 1.8 在子模板上使用完全不同的 CSS