-1

我正在通过 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个零都变成了空白...为什么?谢谢!

4

3 回答 3

2

如果零是唯一评估为假的东西,您可以使用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 变量的更多信息,请查看此处

于 2012-07-23T15:51:58.830 回答
2

请参阅最后的编辑以获取我的最终答案。我将剩下的留在里面,以展示提出一个好问题的重要性,并展示尝试过的内容、输入的样子以及预期的输出应该是什么。那会节省很多时间。


使用 jQuery,您可以遍历每个表格单元格,检查值并更改其输出内容。我更喜欢这个而不是更改实际数据。最好保持您的数据完好无损,只更改它在此处的显示方式。

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

您可以在这里看到它的实际效果。

更新:

如果只<td>需要更改一些 s,我建议为这些使用一个类。

$(".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>

另请参阅更新的小提琴

更新 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);
});

请参阅更新的小提琴

更新 3:

这会将<b>相关类<td>s 中标签内的所有零转换为空字符串,但保持最后一个零不变。

$(".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("");
    }
});

在这里看到它。

于 2012-07-23T16:00:55.600 回答
0

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

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

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

{{ val | default: "" }}

......科林打败了我。;) 请参阅“默认”过滤器的文档

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

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

请注意,您的 for 循环</td> 位于外部,而它需要位于内部。

于 2012-07-23T15:49:41.300 回答