Блоки внутри блоков - PullRequest
       6

Блоки внутри блоков

1 голос
/ 16 июля 2010

У меня проблемы с отображением вложенных блоков в шаблоне.

например.

   {% for category in categories %}

         //code to display category info 

         {% products = products.object.filter(category = category) %}
         {% for product in products%}
              //code to display product info
         {% endfor %}
   {% endfor %}

Я получаю ошибку "Недопустимый тег блока: 'endfor'".

Есть идеи?

Ответы [ 3 ]

1 голос
/ 16 июля 2010

Нельзя назначать переменные в системе шаблонов Django.Ваши две попытки:

{% products = products.object.filter(category = category) %}

и

{% products = category.get_products %}

являются недопустимым синтаксисом Django.

Некоторые системы шаблонов Python похожи на PHP: они позволяют встраивать код Pythonв файлы HTML.Джанго не работает таким образом.Django определяет свой собственный упрощенный синтаксис, и этот синтаксис не включает присваивание.

Вы можете сделать это:

{% for category in categories %}

     //code to display category info 
     {% for product in category.get_products %}
          //code to display product info
     {% endfor %}
{% endfor %}
0 голосов
/ 16 июля 2010
{% products = products.object.filter(category = category) %}

не распознается как допустимый тег в системе шаблонов django. Поэтому django жалуется на отсутствие endfor, хотя {% для x в y%) не является ошибкой.

Это должно работать

 {% for category in categories %}
     {% for product in products.object.all %}
         //code to display product info
     {% endfor %}
 {% endfor %}

Но это не то, чего вы хотите достичь. Просто вы не можете фильтровать product.objects с аргументом category.

Вы должны написать свой собственный тег, который принимает аргументы для фильтрации или переосмыслить вашу проблему.

0 голосов
/ 16 июля 2010

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

{% for product in category.products %}
...