Фильтр Django: динамический срез

#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. ах да, забыл упомянуть. Я уже создал пользовательский фильтр. Меня интересовало другое решение, если это возможно. Я хочу взять как первую половину, так и вторую половину списка.