2

python 2.6、Redhat6.3上のDjango1.3.1

Djangoでは、値に応じてテーブルセルの背景色を変更するにはどうすればよいですか。たとえば、10を超える場合は赤、7から9の間はオレンジ、7未満の場合は緑などです。

データは非djangoデータベース/モデルからのものです。

テーブルを反復処理するために標準テンプレートを使用していますが、これにカスタムテンプレートを使用しても問題はありません。

私は次のように見えます

リンク

これはセルの色の変更を扱いますが、範囲内ではなく、セルの具体的な値に基づいているようです。

ビューに次のテストコードを使用する

def dashboard(request):
  if request.user.is_authenticated():
      user = request.user.first_name
  else:
      return redirect('/bcpm/login')


  table_headers = ['Colmun1','Column2','Column3']
  table_data = [['test1',2,3],['test2',2,4],['test3',5,5]]
  page_title = 'Dashboard'

  template_dict = {'header_list':table_headers, 'page_title':page_title,
                         'results':table_data,'username':user}
  return render_to_response('dashboard.html',template_dict)enter code here

および次の汎用テーブルテンプレート:

<table border=1 width=98% style="margin-left:12px;">
        <tr>
            {% for item in header_list %}
            <th>{{ item }}</th>
            {% endfor %}
        </tr>


            {% for row in results %}
            <tr>
                {% for line in row %}
                <td>{{line}}</td>
                {% endfor %}
            </tr>
            {% endfor %}

    </table>

ありがとう。


ほぼ解決しました。

以下のbrianbuckの助けを借りて、私は次のことを考え出しました。

def dashboard(request):
    if request.user.is_authenticated():
        user = request.user.first_name
    else:
       return redirect('/login'

    table_headers = ['Column1','Column2','Column3']
    table_data = [['name','thing',8],['name','thing',5]]
    page_title = 'Dashboard'

    template_dict = {'header_list':table_headers, 'page_title':page_title,
                         'results':table_data,'username':user}
    return render_to_response('dashboard.html',template_dict)

テンプレート内;

<table border=1 width=68% style="margin-left:12px;">
        <tr>
            {% for item in header_list %}
            <th>{{ item }}</th>
            {% endfor %}
        </tr>


            {% for element in results %}
          <tr>
            <td> {{ element.0 }} </td>
            <td> {{ element.1 }} </td>
            {% if element.3 > 7 %} <td class="red"> {{ element.3 }} </td> 
            {% else %} <td class="green"> {{ element.3 }} </td> {% endif %}
          </tr>
            {% endfor %}

    </table>
{% endif %}

{%ifまたは%}を実行するように設定しようとすると、実際には実行できませんでした。

「7以上8以下」

最初のifステートメントが9より大きい値に対して真である必要がある場合でも、常に7より大きい数値についてこの式に評価されます。

私はDjango1.3を使用していますが、if / elseと複数の評価にはいくつかの制限があると思います。どちらにしても、赤/緑の2つの値で80%動作し、今のところ十分です。

皆さん、ありがとうございました。


このように機能するようになりました。

{% for element in results %}
            <tr>
            <td> {{ element.0 }} </td>
            <td> {{ element.1 }} </td>
            <td> {{ element.2 }} </td>
            <td> {{ element.3 }} </td>
            {% if element.4 > 8 %} <td class="red"> {{ element.4 }} </td>
            {% else %}{% if element.4 > 8 or element.4 >= 5 %} <td class="orange"> {{ element.4 }} </td>
            {%else %}{% if element.4 < 5 %}<td class="green"> {{ element.4 }} </td>
            {% endif %}{% endif %}{% endif %}

            <td> {{ element.5 }} </td>

elifをサポートするバージョンのDjangoを使用している場合、またはdjangoのインストールを拡張するために使用できるdjangoスニペットをいくつか追加する場合は、これは必要ありません。

フラ。

4

2 に答える 2

4

これは、次の名前の 3 つのクラスがあることを前提としています。

td.red {
    backgroundColor: red;
}
td.orange {
    backgroundColor: orange;
}
td.green {
    backgroundColor: green;
}

...

Django 1.3 にはありませんelifので、おそらくもう少しぎこちなくする必要があります。

<td class="
    {% if val >= 10 %}red{% endif %}
    {% if val >= 7 or val <= 9 %}orange{% endif %}
    {% if val < 7 %}green{% endif %}">
    {{ val }}
</td>
于 2013-01-25T22:30:25.777 に答える
0

これを admin.py でのみ実行したかったのです。

  • あなたの列が呼ばれているとしましょうcol
  • 値が 0 より大きい場合は列を緑に設定し、逆の場合は赤に設定します。
def TableAdmin(admin.ModelAdmin)
    def col_(self, obj):
        green_style = "<script>document.querySelectorAll('.green_table_elem').forEach(elem => { elem.parentElement.style.background = 'green'; })</script>"
        red_style = "<script>document.querySelectorAll('.red_table_elem').forEach(elem => { elem.parentElement.style.background = 'red'; })</script>"
        
        if obj.col > 0:
            return mark_safe(f'<div class="green_table_elem">{obj.col}</div> {green_style}')
        else:
            return mark_safe(f'<div class="red_table_elem">{obj.col}</div> {red_style}')
    
    list_display = ('col_',)

tdこれは、一部の回答のように追加された div ではなく、(列) 自体に色を付けます。

于 2020-11-03T02:15:26.303 に答える