2013-10-11 52 views
1

我通過上下文變量爲背景單元和來自模型的數據傳遞默認顏色。但是在模板中,當我解析模型數據時,我想有條件地爲單個單元着色。如何在Django模板中有條件地着色表單元格?

<tr><td style="background-color:{{tarcol}};">{{poll.target}}</td></tr> 
<tr><td style="background-color:{{actcol}};">{{poll.actual}}</td></tr> 

的顏色取決於目標&實際的相對值,所以我得的數據進行比較,以決定顏色。 我想我不應該添加邏輯來決定視圖中的顏色,這必須在模板中完成。 有沒有更好的方法來處理?

p.s:我用這個問題作爲設計的靈感。 django table cell color based on expression

回答

1

首先創造一個加載自定義模板標籤定製管理change_list模板:

{% load i18n grp_tags admin_urls admin_static admin_list my_admin_list %} 

複製現有admin_list.py和變化:

 def items_for_result(cl, result, form): 
      if f is None: 
      ...     
      css_class = getattr(attr, 'css_class', False) 
       if css_class: 
        row_class = mark_safe(' class="%s"' % css_class(result)) 

In admin.py have something like: 

class Media: 
     css = { 
      'all': ('/static/custom_admin.css',) 
     } 
... 

def job_driver_car(self, obj): 
     return '{0} <strong>{1}</strong><br>{2}'.\ 
      format(obj.driver_type, 
        obj.driver_grade, 
        obj.car_type) 
    job_driver_car.short_description = 'Driver/Car' 
    job_driver_car.css_class = lambda obj: 'background lightyellow' \ 
     if obj.driver_grade is not None and 'NEW' in obj.driver_grade else '' 
    job_driver_car.allow_tags = True 

和CSS本身:

table tbody tr.grp-row-odd td.background, table tbody tr.grp-row-odd th.background, 
table tbody tr.grp-row-even td.background, table tbody tr.grp-row-even th.background, 
table tbody tr.grp-alt td.background, table tbody tr.grp-alt th.background { 
    background: transparent; 
} 
.lightyellow { background: #ffd090 !important; } 

我開發這個解決方案,因爲我需要根據實例對幾乎每個單元格進行着色ce值。檢查了Django == 1.6.2和django-grappelli == 2.5.2