HTML覆盖表元素不显示任何内容

时间:2012-07-23 15:44:14

标签: python html css django

我正在通过Django呈现HTML表格。在这个表中,一些单元格或列包含由我的python代码生成的“0”。

HTML中是否有任何方法可以覆盖该单元格或列,而在表格单元格中显示空白而不是0?

我也在使用jQuery,如果有帮助的话。

<tr><td> Value</td>

{% for num in list %}
    <td> <b>{{num}}</b>
{% endfor %}</td>
</tr>

输出是一个包含3个零的列表...其中我想要两个消隐。

让我们说如果我有什么东西被归还

0
10
0
20 
0

但想要

""
10
""
20
0


    $(".dem").each(function() {
        for ( var i = 0; i<2; i++)
        {
            if ($(this).html() == "0") {
            $(this).html(" ");         
            }
            i = i+1
        }
    });

我做了那个^ ....但是它将所有3个零空白...为什么? 谢谢!

3 个答案:

答案 0 :(得分:2)

如果零是唯一评估为false的内容,则可以使用default模板过滤器:

{{ value|default:"&nbsp;" }}

您可能需要使用实际的unicode字符

{{ value|default:"\u00A0" }}

回复您的修改:

<tr><td> Value</td>

{% for num in list %}
    <td> <b>{{ num|default:"\u00A0" }}</b>
{% endfor %}</td>
</tr>

仅更改第一行:

<tr><td> Value</td>

{% for num in list %}
    <td> <b>{% if forloop.first %}&nbsp;{% else %}{{ num }}{% endfor %}</b>
{% endfor %}</td>
</tr>

有关forloop变量的更多信息,check here

答案 1 :(得分:2)

请参阅最后一次编辑以获得最终答案。我将其余部分留下来表明提出一个好问题是多么重要,并展示what was tried,输入的内容以及预期的输出应该是什么。这样可以节省很多时间。


使用jQuery,您可以迭代每个表格单元格,检查值并更改它输出的内容。我更喜欢改变实际数据。最好保留数据完整,只改变它在这里的显示方式。

$("#test td").each(function() {
    if ($(this).html() == "0") {
        $(this).html("");
    }
});

您可以在行动here中看到它。

<强>更新

如果只应更改某些<td>,我建议使用类。

$(".noZeroAllowed").each(function() {
    if ($(this).html() == "0") {
        $(this).html("");
    }
});

它适用于HTML:

<table id="test">
    <tr>
        <td class="noZeroAllowed">10</td>
        <td class="noZeroAllowed">5</td>
        <td>0</td>
        <td>1</td>
    </tr>
    <tr>
        <td class="noZeroAllowed">11</td>
        <td class="noZeroAllowed">0</td>
        <td>9</td>
        <td>7</td>
    </tr>
</table>

另见updated fiddle

更新2

如果数据不是原子数据,并且单元格中有多个值,请执行以下操作:

<table id="test">
    <tr>
        <td class="noZeroAllowed">10 0 foobar 0</td>
        <td class="noZeroAllowed">5</td>
        <td>0, 0, 0</td>
        <td>1</td>
    </tr>
</table>

然后,您需要更改Javascript以使用正则表达式。 \b表示单词边界。它不适用于像0.5这样的小数。

$(".noZeroAllowed").each(function() {
    var newStr = $(this).html().replace(/\b0\b/g, "");
    $(this).html(newStr);
});

请参阅updated fiddle

更新3:

这会将相关类<b><td>标记内的所有零变为空字符串,但保留最后一个零。

$(".noZeroAllowed").each(function() {
    var zeros = new Array;
    var b = $(this).find("b");
    for (var i = 0; i < b.length; i++) {
        $(b[i])
        if ($(b[i]).html() == "0") {
            zeros.push(b[i]);
        }
    }
    for (var i = 0; i < zeros.length - 1; i++) {
        $(zeros[i]).html("");
    }
});

here

答案 2 :(得分:0)

您可以使用Django的模板(请参阅documentation):

{% if val != 0 %}{{ val }}{% endif %}

或者,如果你想要更整洁的东西,你可以在模板中使用Django 过滤器

{{ val | default: "" }}

......科林打败了那个人。 ;)参见documentation for the 'default' filter

编辑:在回答您的评论时,您可以这样做:

{% for num in list %}
    <td><b>{{num | default: ""}}</b></td>
{% endfor %}

请注意,你的</td> 外面是for循环,而它需要在里面。