2009-04-05 2 views
13

Позволь мне предисловие я только начинал Python, так что если это действительно простой вопрос^_^Django шаблон - Новая переменная Декларация

У меня есть HTML-файл со следующим содержанием:

 {%for d in results%} 
     <div class="twt"> 
      <img src="{{ d.profile_image_url }}" width="48px" height="48px" /> <span> {{ d.text }} </span> 
      <span class="date">{{ d.created_at }}</span> 
     </div> 
    {% endfor %} 

который работает хорошо, но я также хотел бы объявить переменную на этой странице. Скажем, для этого примера мы можем указать RowNumber, который будет увеличиваться для каждого отображаемого d, выплевывая текущий RowNumber.

Я попытался сделать:

{{ RowNumber = 0}} 
{{ RowNumber ++ }} 

Но это, кажется, не позволяют мне заявить RowNumber.

+0

Название должно быть вместо 'Джанго template'. – muhuk

ответ

20

Проверьте documentation на петлю for.

Он автоматически создает переменную с именем forloop.counter, которая содержит текущий индекс итерации.

Что касается большего вопроса о том, как объявлять переменные, в Django нет готового способа сделать это, и это не считается отсутствующей функцией, а функцией. Если вы действительно хотели это сделать, это возможно с custom tags, но по большей части философия, которую вы хотите отслеживать, состоит в том, что в основном все, что вы хотите сделать, что потребует этого, должно быть сделано в представлении, и шаблон должен быть зарезервирован для очень простых логика. Например, для вашего примера суммирования можно использовать фильтр add. Аналогично, вы можете использовать create your own filters как с тегами.

+1

Спасибо, что, если мне действительно нужно иметь новую переменную? например, суммирование итогов определенных параметров ... – TimLeung

+0

Тогда вам придется использовать настраиваемый тег или фильтр. Язык шаблонов Django просто не позволяет вам объявлять новые переменные. – mipadi

+0

Язык шаблонов Django был разработан, чтобы избежать стиля кодирования «in-template» для PHP, ASP, JSP и т. Д., Поэтому это объявление, как заявили Паоло и Мипади, намеренно отсутствует. Дух шаблонов заключается в том, что любая логика обработки, например добавление, должна выполняться в функции просмотра. –

7

Если вы хотите установить любую переменную внутри шаблона Django, вы можете использовать this small template tag I've written.

+0

Пробовал это и получил: TemplateSyntaxError: 'set_var' не является допустимой библиотекой тегов: библиотека шаблонов set_var не найдена, попробовал google.appengine._internal.django.templatetags.set_var. – slashdottir

+0

похоже, что вы забыли добавить свое приложение Django в «INSTALLED_APPS» внутри settings.py –

2

В шаблоне:

{% for outer_obj in outer_list %} 
    {% for inner_obj in inner_list %} 
     {% increment_counter forloop.counter0 forloop.parentloop.counter0 outer_list.count %} 
    {% endfor %} 
{% endfor %} 

Templatetag:

@register.simple_tag 
def increment_counter(outer, inner, outer_loop_length): 
    return outer + inner * outer_loop_length + inner * (outer_loop_length - 1) 

Результат: 0 1 2 3 ...

Смежные вопросы