Django для прерывания счетчика цикла - PullRequest
26 голосов
/ 14 июня 2009

Надеюсь, это быстрый / легкий. Я знаю способ обойти это с помощью пользовательского тега шаблона, но мне было любопытно, есть ли другие методы, которые я просматривал. Я создал функцию галереи для своего блога, и у меня есть страница со списком галерей, которая разбивает на страницы все мои галереи. Теперь я не хочу показывать все фотографии каждой галереи в этом списке, так как если в каждой галерее даже 20 изображений, то это 100 изображений на странице, если я разбиваю страницы на 5 сообщений. Это было бы расточительным и неправильным путем.

Вопрос, который у меня возникает, есть ли способ просто показать 3 фотографии из набора фотографий? То, что я хотел бы сделать, но я не думаю, возможно, что-то вроде (псевдокод):

{% for photos in gallery.photo_set %}
   {% if forloop.counter lt 3 %}
     <img src="{{ photos.url }}">
   {% endif %}
{% endfor %}

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

В любом случае, несколько разных вариантов, так что я решил опросить аудиторию, чтобы узнать, как вы это сделаете. Любое мнение приветствуется. Лично я наслаждаюсь тем, что есть множество способов снять шкуру с этой кошки.

Ответы [ 2 ]

76 голосов
/ 14 июня 2009

Использование:

{% for photos in gallery.photo_set|slice:":3" %}
1 голос
/ 14 июня 2009

Это лучше сделать в коллекции gallery.photo_set. Твердо закодированная "3" в шаблоне - плохая идея в долгосрочной перспективе.

class Gallery( object ):
   def photo_subset( self ):
       return Photo.objects.filter( gallery_id = self.id )[:3]

С помощью функции просмотра вы можете выбрать 3 случайные фотографии или 3 самые последние фотографии.

   def photo_recent( self ):
       return Photo.objects.filter( gallery_id = self.id ).orderby( someDate )[:3]

   def photo_random( self ):
       pix = Photo.objects.filter( gallery_id = self.id ).all()
       random.shuffle(pix)
       return pix[:3]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...