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的值都应为true。
我正在使用Django 1.3,我认为if / else和多个评估可能存在一些限制,无论哪种方式,我都有80%使用红色/绿色两个值,这一点已经足够好了。< / p>
谢谢大家。
让它像这样工作;
{% 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片段,则不需要这样做。
乌拉。
答案 0 :(得分: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>
答案 1 :(得分:0)
我只想在admin.py中这样做。
col
: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着色。