Изменение строк с одинаковым значением ячейки одним и тем же цветом в 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

Вернуться на верх