как запустить этот код в шаблоне Django - PullRequest
47 голосов
/ 16 февраля 2011

это мой код:

{% for i,j in enumerate(a) %}
    {{i}} ,{{j}}
{% endfor%}

но он показывает ошибку, я думаю, что он не может запустить метод enumerate,

, так как запустить enumerate вшаблон django,

спасибо

Ответы [ 5 ]

66 голосов
/ 16 февраля 2011

Подсистема шаблонов имеет некоторые специальные конструкции, встроенные в блок for / endfor, которые позволяют вам получить доступ к текущему индексу цикла без необходимости вызова enumerate.

{% for j in a %}
    {{ forloop.counter0 }}, {{ j }}
{% endfor %}

Пока этот фрагмент решает вашНепосредственная проблема: если вы ожидаете получить доступ к встроенным компонентам Python и другим конструкциям Python внутри ваших шаблонов Django, возможно, вы неправильно понимаете «песочницу», которую он предоставляет / применяет.

12 голосов
/ 16 февраля 2011

вы можете использовать {{ forloop.counter }} или {{ forloop.counter0 }} для того же эффекта, последний имеет индекс 0, таким образом, больше похоже на enumerate.

5 голосов
/ 04 марта 2014

Шаблон Django составляет слой представления и не предназначен для логики. Из документов

Если у вас есть опыт программирования, или вы привыкли к языкам, которые смешивают программный код непосредственно с HTML, вы должны иметь в виду, что система шаблонов Django - это не просто Python, встроенный в HTML. Это сделано специально: система шаблонов предназначена для выражения презентации, а не логики программы.

Теперь, чтобы получить ту же функциональность в Django, вам нужно будет завершить свою логику в представлениях.

views.py

def my_view(request, ...):
    ....
    enumerated_a = enumerate(a);
    ....
    return render_to_response('my_template.html', {'enumerated_a ': enumerated_a }..)

Теперь enumerate функция возвращает объект перечисления, который является итеративным.
my_template.html

{% for index, item in enumerated_a %}
    {{ index }},{{ item }}
{% endfor %}

Хотя я думаю, что вы, вероятно, можете изменить его на нумерованный список и использовать его так же.

2 голосов
/ 16 февраля 2011
{% for item in a %}
    {{ forloop.counter }}, {{ item }}
{% endfor %}

Ссылка связана

0 голосов
/ 16 февраля 2011

Если, однако, вам нужно использовать функцию в шаблоне, я предлагаю вместо этого создать фильтр или тег. Для справки, проверьте http://docs.djangoproject.com/en/1.2/howto/custom-template-tags/

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