在 django 模板中使用相同的块根据变量显示不同的信息

Posted

技术标签:

【中文标题】在 django 模板中使用相同的块根据变量显示不同的信息【英文标题】:Using the same block in a django template to display different information depending on a variable 【发布时间】:2011-07-29 13:38:58 【问题描述】:

嘿,堆栈溢出先生! 我试图在同一个块中显示不同的信息,具体取决于变量“选择”,它只是一个 int。我计划这样做的方式类似于下面的代码:

% extends "index.html"%

%block head%
    <p><h1>Welcome to Piss && ink user</h1></p>
%endblock head%   

%block one%     
    <p>The temperature in city is temperature&deg </p>
%endblock one%

%if choice1 == 2 %
    %block two%     
        <p>The temperature in city is temperature&deg </p>
    %endblock two%
% endif %

%comment%
    %if choice1 == 2 %
        %block two%
            <p>The temperature in city is temperature&deg </p>
        %endblock%
    % endif %
%endcomment%

%block two%
    <form method="post">
    %csrf_token%
    % if new_event %
        <b><p>new_event</p></b>
    % endif %
%endblock%

现在,我遇到的问题是模板不喜欢模板中有两个同名的块。出于某种原因,它似乎并不关心正在检查 % block % 应该去哪里的 % if % 语句。我认为% if % 语句只会根据其参数执行其内部的内容,但它似乎并没有这样做。它会显示% if % 中的所有内容,无论“choice1”是什么都相等:( 有谁知道我该如何解决这个问题?谢谢

【问题讨论】:

【参考方案1】:

另一种方法(如果模板差异很大)是按照以下方式做一些事情:

% extends choice_template %

并在视图中设置choice_template。

【讨论】:

【参考方案2】:

将 if 放在块中。一个块,两个 if 语句

% block two %
    % if choice == 1 %
        <p>Some Content</p>
    % endif %
    % if choice == 2 %
        <p>Other Content</p>
    % endif %
% endblock two %

【讨论】:

【参考方案3】:

将逻辑放在块内,而不是有两个同名的块。

代替:

%if choice1 == 2 %
    %block two%     
        <p>The temperature in city is temperature&deg </p>
    %endblock two%
% endif %

%comment%
    %if choice1 == 2 %
        %block two%
            <p>The temperature in city is temperature&deg </p>
        %endblock%
    % endif %
%endcomment%

%block two%
    <form method="post">
    %csrf_token%
    % if new_event %
        <b><p>new_event</p></b>
    % endif %
%endblock%

使用:

% block two %
    % if choice1 == 2 %
        <p>The temperature in city is temperature&deg </p>
    % else %
        <form method="post">
        %csrf_token%
        % if new_event %
            <b><p>new_event</p></b>
        % endif %
    % endif %
% endblock %

【讨论】:

以上是关于在 django 模板中使用相同的块根据变量显示不同的信息的主要内容,如果未能解决你的问题,请参考以下文章

Django模板继承 - 如何为不同的块使用相同的内容

在 Django 中使用继承的块变量作为参数创建 URL

Django 模板变量和 Javascript

Django 模板变量和 Javascript

Django 模板变量和 Javascript

Django 模板变量和 Javascript