-1

Django を使用して HTML テーブルをレンダリングしています。この表では、一部のセルまたは列に、Python コードによって生成された「0」が含まれています。

HTML でそのセルまたは列をオーバーライドし、代わりにテーブル セルに 0 ではなく空白を表示する方法はありますか?

それが役立つ場合は、jQueryも使用しています。

<tr><td> Value</td>

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

出力は、3 つのゼロを含むリストです...そのうち 2 つを空白にしたいです。

返されたものがあるとしましょう

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

ゼロが false と評価される唯一のものである場合は、defaultテンプレート フィルターを使用できます。

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

実際のユニコード文字を使用する必要がある場合があります

{{ 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>を変更する必要がある場合は、それらのクラスを使用することをお勧めします。

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

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

更新された fiddleを参照してください。

更新 3:

<b>これにより、関連するクラス s のタグ内のすべてのゼロが<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("");
    }
});

こちら を参照してください

于 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 %}

</td> for ループの外側にあることに注意してください。内側にある必要があります。

于 2012-07-23T15:49:41.300 に答える