2017-02-22 8 views
0

Итак, у меня есть сайт, на котором пользователи могут загружать изображения, прикрепленные к событиям, которые затем будут отображаться в макете типа instagram на странице события. Из-за того, как моя страница была разработана, я не могу просто перебирать список. Я должен вызвать каждый объект по отдельности (потому что я помещаю их в разные места по всей странице, а не просто в простой список). Индексирование сработало для этого, но если я попытаюсь открыть событие, которое меньше суммы индекса, я получаю сообщение об ошибке. Есть ли способ избежать этого? Или у кого-то есть альтернативное решение? Мне нужно иметь возможность вызывать каждый элемент в списке индивидуально, чтобы я мог индивидуально отформатировать, где он находится и где он ссылается.Django - Игнорировать ошибку индекса?

views.py:

def event_detail(request, slug): 
    Event = Event.objects.get(slug=slug) 
    image1 = Image.objects.filter(event__slug=slug)[0] 
    image2 = Image.objects.filter(event__slug=slug)[1] 
    image3 = Image.objects.filter(event__slug=slug)[2] 
    return render(request, 'events/event_detail.html', { 
     'event': event, 
     'image1': image1, 
     'image2': image2, 
     'image3': image3, 

}) 

Тогда я вызываю на объектах с {{image1.url}} и т.д.

Прямо сейчас он настроен для поддержки 3 (или более) изображения, но если в событии установлено менее 3 изображений, я получаю сообщение об ошибке.

Очень открыта альтернативным способам моделирования этого, если у кого есть идеи.

ответ

1

Вы можете отправить изображения и событие HTML страницы, как @karthikr упоминалось

def event_detail(request, slug): 
Event = Event.objects.get(slug=slug) 
images = Image.objects.filter(event__slug=slug)[:3] 
return render(request, 'events/event_detail.html', { 
    'event': event, 
    'images': images}) 

, а затем в HTML-странице можно вызвать изображения с помощью индексации Если вы хотите назвать это индивидуально, делая.

{{ images.0.url }}{{ images.1.url }}

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

+0

Это сработало! Благодаря! – Josh

3

Проблема возникает из-за того, что вы оцениваете запрос с помощью индексации. Таким образом, это естественно, если запрос не имеет 3 изображений.

Одна вещь, которую вы могли бы сделать это, справиться с этим немного по-другому:

def event_detail(request, slug): 
    Event = Event.objects.get(slug=slug) 
    images = Image.objects.filter(event__slug=slug)[:3] 
    return render(request, 'events/event_detail.html', { 
     'event': event, 
     'images': images 
}) 

Теперь вы можете сделать:

{% for image in images %} 
    {% image.url %} 
{% endfor %} 

Таким образом, [:3] бы порезать QuerySet "безопасно", и шаблон будут отображаться только объекты, присутствующие в запросе images

Редактировать:

Для размещения множества 2 ваш ищем, еще одна вещь, вы могли бы сделать, это:

def event_detail(request, slug): 
    Event = Event.objects.get(slug=slug) 
    image_set_1 = Image.objects.filter(event__slug=slug)[:2] 
    image_set_2 = Image.objects.filter(event__slug=slug)[2:4] 
    image_set_3 = Image.objects.filter(event__slug=slug)[4:6] 
    return render(request, 'events/event_detail.html', { 
     'event': event, 
     'image_set_1': image_set_1, 
     'image_set_2': image_set_2, 
     'image_set_3': image_set_3, 
}) 

Сейчас этот кусочек является «безопасным», так что вы можете сделать его везде, где вы хотите.

+0

Есть ли способ использовать вашу модель для вызова определенного изображения вместо всего списка? Например, скажем, я хочу, чтобы изображения 1 и 2 отображались вверху моей страницы, 3 и 4 были слева, а 5 и 6 - внизу. Есть ли способ обозначить изображения, которые уже переименованы в список? – Josh

+1

Вы считали нарезка списка в шаблоне? https://docs.djangoproject.com/en/1.10/ref/templates/builtins/#slice – karthikr

+0

К сожалению, это не будет делать то, что я ищу. Мне нужно иметь возможность индивидуально обращаться к изображениям, чтобы я мог поместить их в разные места.Если это невозможно, я думаю, что переоценю свой дизайн и найду что-то, что сработает. – Josh

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

  • Нет связанных вопросов^_^