I'm working on a project using Django, some JavaScript and Tachyons. I have the following in a template file:
<tbody class="lh-copy">
{% for alarm in alarm_list %}
<tr>
<td class="pv3 pr3 bb b--black-20 bg-light-green {{ alarm.id }}-td">{{ alarm.agent.name }}</td>
<td class="pv3 pr3 bb b--black-20 bg-light-green {{ alarm.id }}-td">{{ alarm.profile_name }}</td>
<td class="pv3 pr3 bb b--black-20 bg-light-green {{ alarm.id }}-td">{{ alarm.is_active }}</td>
<td class="pv3 pr3 bb b--black-20 bg-light-green {{ alarm.id }}-td">{{ alarm.created }}</td>
<td class="pv3 pr3 bb b--black-20 bg-light-green {{ alarm.id }}-td">{{ alarm.message }}</td>
<td class="pv3 pr3 bb b--black-20 bg-light-green {{ alarm.id }}-td">{{ alarm.alrmtype }}</td>
<td class="pv3 pr3 bb b--black-20 bg-light-green {{ alarm.id }}-td">{{ alarm.acknowledged }}</td>
<td class="pv3 pr3 bb b--black-20 bg-light-green {{ alarm.id }}-td">{{ alarm.is_hidden }}</td>
{% if alarm.is_active %}
<script language="javascript">
const alarmValElementList{{ alarm.id }} = document.getElementsByClassName("{{ alarm.id }}-td");
for (let i=0; i < alarmValElementList{{ alarm.id }}.length; i ++) {
alarmValElementList{{ alarm.id }}[i].classList.remove("bg-light-green");
alarmValElementList{{ alarm.id }}[i].classList.add("bg-light-red");
};
</script>
{% endif %}
</tr>
{% endfor %}
</tbody>
I'm accessing the element alarm from alarm_list and using a template "if" to insert JavaScript code that tells the HTML element to remove the current background color and add another one. I'm not happy to use alarmValeElementList{{ alarm.id }} as a dynamic variable name but I can't think of another way to do this.
Is there a better way to implement this?
ETA:
This looks better I think as it got rid of the dynamic variable name:
<script language="javascript">
let alarmValElementList = [];
</script>
{% for alarm in alarm_list %}
<tr>
<td class="pv3 pr3 bb b--black-20 bg-light-green alarm-val-td">{{ alarm.agent.name }}</td>
<td class="pv3 pr3 bb b--black-20 bg-light-green alarm-val-td">{{ alarm.profile_name }}</td>
<td class="pv3 pr3 bb b--black-20 bg-light-green alarm-val-td">{{ alarm.is_active }}</td>
<td class="pv3 pr3 bb b--black-20 bg-light-green alarm-val-td">{{ alarm.created }}</td>
<td class="pv3 pr3 bb b--black-20 bg-light-green alarm-val-td">{{ alarm.message }}</td>
<td class="pv3 pr3 bb b--black-20 bg-light-green alarm-val-td">{{ alarm.alrmtype }}</td>
<td class="pv3 pr3 bb b--black-20 bg-light-green alarm-val-td">{{ alarm.acknowledged }}</td>
<td class="pv3 pr3 bb b--black-20 bg-light-green alarm-val-td">{{ alarm.is_hidden }}</td>
{% if alarm.is_active %}
<script language="javascript">
alarmValElementList = document.getElementsByClassName("alarm-val-td");
for (let i=0; i < alarmValElementList.length; i ++) {
alarmValElementList[i].classList.remove("bg-light-green");
alarmValElementList[i].classList.add("bg-light-red");
};
</script>
{% endif %}
</tr>
{% endfor %}
But, I am wondering if there is not a better way to do this possibly?