django шаблон доступа к элементу списка по forloop.counter - PullRequest
0 голосов
/ 13 ноября 2018

Я хочу перебрать набор запросов моей модели в шаблоне Django. Я могу сделать это просто с помощью Django for loop, но я не могу сделать это для шагов больше 1, вот мой код

 {% for map in maps %}

 {% if  forloop.counter|divisibleby:2 %}

   #Here I can access Maps with index of 1,3,5 and ..
   #How can I access map with index 2,4,6 here at the same time sth like Map[forloop.counter+1]

 {% endif %}


 {% endfor %}

На самом деле я хочу получить доступ к Map[forloop.counter+1] в моем шаблоне, но я не знаю, как это сделать

Ответы [ 3 ]

0 голосов
/ 13 ноября 2018

Вы можете объединить несколько циклов и реализовать свою собственную логику для этого, но не получить доступ одновременно.Ниже приведены все циклы из документации Django 2.1.

forloop.counter     The current iteration of the loop (1-indexed)
forloop.counter0    The current iteration of the loop (0-indexed)
forloop.revcounter  The number of iterations from the end of the loop (1-indexed)
forloop.revcounter0     The number of iterations from the end of the loop (0-indexed)
forloop.first   True if this is the first time through the loop
forloop.last    True if this is the last time through the loop
forloop.parentloop  For nested loops, this is the loop surrounding the current one

, скажите мне, какую проблему вы хотите решить?Может быть, вы можете создать собственный тег или шаблон шаблона.

0 голосов
/ 13 ноября 2018

В Django вы можете использовать {{ forloop.counter }} индекс начинается с 1 или {{ forloop.counter0 }} индекс начинается с 0.

Может быть, вы можете использовать это для доступа к индексу + 1

Я надеюсь, что этопомог.Вы можете прочитать больше здесь

0 голосов
/ 13 ноября 2018

Создайте пользовательский шаблонный фильтр, как определено здесь https://docs.djangoproject.com/en/dev/howto/custom-template-tags/#registering-custom-filters

from django import template
register = template.Library()
@register.filter
def list_item(lst, i):
    try:
        return lst[i]
    except:
        return None

Внутри вашего шаблона используйте его как:

{% for map in maps %}

 {% if  forloop.counter|divisibleby:2 %}

 {% with maps|list_item:forloop.counter+1 as another_map %}

 {{another_map.id}}

 {% endif %}

{% endfor %}

Где писать теги шаблона? Создайте каталог templatetags на том же уровне, что и models.py, views.py.Затем добавьте __init__.py и файл maps_tags.py.Напишите определение пользовательского тега в maps_tags.py.В своем шаблоне загрузите теги шаблона, написав {% load maps_tags %} вверху.Дополнительная документация на https://docs.djangoproject.com/en/dev/howto/custom-template-tags/#code-layout

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...