Изменение строк с одинаковым значением ячейки одним и тем же цветом в HTML-таблице - проект Django
Я создал таблицу в html-файле для моего проекта Django, и исходные данные основаны на следующем списке (Это очень длинный список, поэтому я перечисляю только несколько строк):
mylist=[{'StartDate': '2021-10-02', 'ID': 11773, 'Receiver': Mike, 'Days':66 },{'StartDate': '2021-10-03', 'ID': 15673, 'Receiver': Jane, 'Days':65}, ... {'StartDate': '2021-10-5', 'ID': 34653, 'Receiver': Jack, 'Days':63}]
Мой Html файл:
<table class="table table-striped" id="dataTable" width="100%" cellspacing="0">
<thead>
<tr>
<th>StartDate</th>
<th>ID</th>
<th>Name</th>
<th>Days</th>
</thead>
<body>
{% for element in mylist %}
<tr>
<td>{{ element.StartDate}}</td>
<td>{{ element.ID }}</td>
<td>{{ element.Receiver }}</td>
<td>{{ element.Days }}</td>
</tr>
{% endfor %}
</tbody>
</table>
Я хочу сделать все строки с одинаковым значением ID одинакового цвета. Пожалуйста, подскажите, что мне нужно добавить в <td>{{ element.ID }}</td>. Спасибо!
Все, что мы хотим передать как контекст, мы должны держать внутри view, в котором мы хотим его использовать. Это более читабельно, когда у нас все больше и больше кода.
Что мы собираемся сделать, так это определить цвет для цифр 0-9. Я выберу пока светлый colors, вы можете изменить его по своему усмотрению.
views.py:
def table2022(request):
mylist = sheet_instance.get_all_records()
colors = {'0': 'aqua', '1': 'beige', '2': 'burlywood', '3': 'lightgrey', '4': 'silver', '5': 'skyblue', '6': 'lightblue', '7': 'lightpink', '8': 'lightgreen', '9': 'lawngreen'}
context = {'mylist': mylist, 'colors': colors}
return render(request, 'table2022.html', context)
Теперь, поскольку в шаблонах не так просто использовать Python, нам нужно создать пользовательские Template Tag. Начнем с создания папки в вашем приложении, назовем ее custom_tags.py. Она должна быть создана в папке YourProject/your_app/templatetags/, поэтому мы должны также создать папку templatetags в ней.
custom_tags.py:
from django import template
register = template.Library()
@register.filter(name='get_color')
def get_color(colors, number):
return colors[str(number)[-1]]
your_template.html:
{% load custom_tags %}
...
{% for element in mylist %}
<tr>
<td>{{ element.StartDate }}</td>
<td style="background-color: {{ colors|get_color:element.ID }}">
{{ element.ID }}
</td>
<td>{{ element.Receiver }}</td>
<td>{{ element.Days }}</td>
</tr>
{% endfor %}
Тег get_color по сути берет весь ID, затем извлекает только последнее число и превращает его в строку. После этого он использует единственное число как ключ в словаре colors и передает соответствующее значение в шаблон, где оно станет валидным html-цветом.
Пользовательские теги используются для "внедрения" некоторого Pythonic кода непосредственно в шаблон. Не используйте их слишком часто, потому что большинство кода должно быть в стандартных файлах, таких как views.py и models.py. Но иногда нет лучшего способа :)
Для получения более подробной информации о Tags ознакомьтесь с Django's DOCS