2

python 2.6,在 Redhat 6.3 上使用 Django 1.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”

对于大于 7 的数字,它总是会计算为这个表达式,即使第一个 if 语句对于大于 9 的任何东西都应该为真。

我正在使用 Django 1.3,我认为 if/else 和多重评估可能存在一些限制,无论哪种方式,我都有 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

这假设您有三个名为:

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 回答