#django
#django
Вопрос:
Я имею в виду этот фильтр среза: https://docs.djangoproject.com/en/dev/ref/templates/builtins/#slice
если у меня есть этот список a=[1, 2, 3, 4, 5]
, есть ли какой-нибудь способ взять первую половину этого списка? Что-то вроде {{ a|slice:":3" }}
.
Но вместо 3
этого я хочу размер списка a
. И a
может иметь четное или нечетное количество элементов. И я не хочу передавать длину списка как переменную в контексте из представления
последующее РЕДАКТИРОВАНИЕ
Мне было интересно, есть ли другое решение, отличное от пользовательского фильтра
Ответ №1:
Если используется в цикле for, вы можете сделать это:
{% for item in a %}
{% if forloop.counter < forloop.revcounter %}
{# first half of list #}
{% else %}
{# second half of list #}
{% endif %}
{% endfor %}
Комментарии:
1. умный ход … тем не менее, я думаю, что пока более разумно использовать пользовательский фильтр
Ответ №2:
Для этой цели вы можете создать пользовательский фильтр:
@register.filter("half_slice")
def half_slice_filter(value):
return value[:len(value)/2]
Комментарии:
1. ах да, забыл упомянуть. Я уже создал пользовательский фильтр. Меня интересовало другое решение, если это возможно. Я хочу взять как первую половину, так и вторую половину списка.