模板能否在 % if % 和 % else % 场景中保存块

Posted

技术标签:

【中文标题】模板能否在 % if % 和 % else % 场景中保存块【英文标题】:Can a template hold a block in an % if % and % else % scenario模板能否在 % if % 和 % else % 场景中保存块 【发布时间】:2014-08-30 11:19:03 【问题描述】:

我有一个定义了条件标头的基本模板:

% if blah %
    <h1>Title 1</h1>
% else %
    <h1>Title 2</h1>
% endif %

模板中是否有可用的技术/功能允许您在从基础扩展的模板中设置标题?

显然您不能使用传统的块标记,因为它们只能出现一次,但是您可以做些什么来有效地为每个 &lt;h1&gt; 实现一个 % block title %,以便从 if 呈现的任何标题被扩展模板改变了?

更具体地说,我在基础中得到的模板代码是;

<div class="wrapper">
    % if request.current_page.get_ancestors|length <= 1 %
        % block page_title %
        <h1> request.current_page.get_page_title </h1>
        % endblock page_title %
    % else %
        % for ance in request.current_page.get_ancestors %
            % if ance.level == 1 %
            % block page_title %
                <h1> ance.get_page_title </h1>
            % endblock page_title %
            % endif %
        % endfor %
    % endif %
</div>

编辑

基本模板的完整代码; http://pastebin.com/cyWAiWn2

扩展模板的完整代码; http://pastebin.com/ThEqff47

这个功能要求的原因是我在 django-cms 中创建了一个页面并将我的应用程序连接到该页面。在那个阶段, request.current_page.get_page_title 只会返回我创建的 django-cms 页面的标题。

如果您在该页面上做了一些事情,使挂钩的应用程序将您发送到另一个视图/模板,您实际上并没有在 django-cms 中更改页面,所以get_page_title 仍然是相同的,但是您的模板'现在渲染的 ve 几乎总是有不同的标题。

显然,您可以将新页面标题包含为&lt;h2&gt; 或其他任何内容,并将其放在base_content.html 中的&lt;h1&gt; 下方,但基本标题通常对于该级别所需的页面内容是多余的。

【问题讨论】:

【参考方案1】:

如果你只有一个这样的标题栏,那么你可以在扩展模板中使用普通的块标签来覆盖标题。

<div class="wrapper">
    % block title %
        % if request.current_page.get_ancestors|length <= 1 %
            <h1> request.current_page.get_page_title </h1>
        % else %
            % for ance in request.current_page.get_ancestors %
                % if ance.level == 1 %
                    <h1> ance.get_page_title </h1>
                % endif %
            % endfor %
        % endif %
    % endblock title %
</div>

我认为您的模板中不需要两个标题栏,您能否提供一个需要定义两个标题栏的覆盖模板的示例?

【讨论】:

我在模板中添加了两个 pastebin 链接。如您所见,基本模板根据页面属性以两种不同的方式呈现页面。我不认为单个块适合我正在寻找的东西。

以上是关于模板能否在 % if % 和 % else % 场景中保存块的主要内容,如果未能解决你的问题,请参考以下文章

和Vue来一场美丽的邂逅

和Vue来一场美丽的邂逅

相当于使用if .. else作为Django模板语言中的表达式

使用 if else 和复选框的电子邮件模板的语法错误

FreeMarker 模板中的 if-else

我的 Django 模板中的“Else if”语句出现在 HTML 标头块之后