Skip to main content
 首页 » 编程设计

python之基于表达式的django表格单元格颜色

2024年08月29日29zfyouxi

python 2.6,Redhat 6.3 上的 Django 1.3.1

在 Django 中,我将如何根据它的值更改表格单元格的背景颜色,例如如果它超过 10 则为红色,在 7 和 9 之间为橙色,低于 7 为绿色等。

数据来自非 Django 数据库/模型。

我正在使用标准模板遍历表格,但为此使用自定义模板不会有问题。

我看到了以下内容

Link

处理更改单元格颜色,但它似乎基于单元格中的具体值,而不是在一个范围内。

对 View 使用以下测试代码

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 的帮助下,我得出了以下结论, 在 View 中:

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 or %} 当我尝试将其设置为执行

“大于等于7或者小于等于8”

对于大于 7 的数字,它总是对该表达式求值,即使第一个 if 语句对于大于 9 的任何值都应为真。

我正在使用 Django 1.3,我认为 if/else 和多重评估可能存在一些局限性,无论哪种方式,我有 80% 使用两个值 red/green 并且目前已经足够好了。

谢谢大家


让它像这样工作;

{% 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 片段,则不需要这样做。

万岁。

请您参考如下方法:

这假设您有三个类:

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>