Как ссылаться на набор объектов в представлении Django из шаблона? - PullRequest
0 голосов
/ 03 января 2019

У меня есть данные в базе данных в таком виде:

collection_name|manufacturer|product_type|description|image_url
----------------------------------------------------------------
Testing        |FakeCo      |Bed         |pretty nice|/img/1.jpg
Testing        |FakeCo      |Desk        |pretty bad |/img/2.jpg
Testing        |FakeCo      |Nightstand  |pretty ok  |/img/1.jpg
Testing        |FakeCo      |Draws       |pretty nice|/img/3.jpg

Изначально я использовал цикл for для отображения полей каждого результата, который в итоге выглядит примерно так: this:.

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

Я попытался использовать наборы в моем представлении django, поскольку другой ответ предполагал, что это устранит дубликаты и решит мою проблему.

Мой взгляд на Джанго:

def collection_detail(request, name=None):
    template = loader.get_template('/webapps/my_webapp/furniture_site/main_page/templates/main_page/product-detail.html')
    products = product.objects.filter(collection_name=name)
    collection_name = []
    manufacturer = []
    description = []
    image_url = []
    for product in products:
        collection_name.append(product.collection_name)
        manufacturer.append(product.manufacturer)
        description.append(product.description)
        image_url.append(product.image_url)
    collection_name = set(collection_name)
    manufacturer = set(manufacturer)
    description = set(description)
    image_url = set(image_url)
    context={'products': products}
    return HttpResponse(template.render(context))

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

Например, в моем шаблоне используйте:

                {% for instance in products %}
                {{ instance.collection_name }} Collection <br />
                {% endfor %}

ничего не возвращает, как и

                {% for instance in products %}
                {{ collection_name }} Collection <br />
                {% endfor %}

Как правильно ссылаться на элементы, возвращаемые через представление в шаблоне?

В конечном итоге я пытаюсь получить результат, подобный следующему (описание примечания и название коллекции используются только один раз, а дублированные URL-адреса изображений не возвращаются).

enter image description here

Ответы [ 2 ]

0 голосов
/ 03 января 2019

Прежде всего, вы не передаете правильные данные в ваш шаблон.

Вам необходимо передать collection_name, manufacturer, description и image_url в вашем контексте.

context = {
    'products': products,
    'collection_name': collection_name,
    'manufacturer': manufacturer,
    'description': description,
    'image_url': image_url
}

Теперь вы можете получить к ним доступ в своем шаблоне, например:

{% for instance in collection_name %}
    {{ instance }} Collection <br />
{% endfor %}

То же самое для остальных.

0 голосов
/ 03 января 2019

Он должен отображать только один объект в цикле.Тем не менее, вы можете использовать first в вашей интерполяции.

Как это:

{{ instance.collection_name|first }}

РЕДАКТИРОВАТЬ

Вам нужно передать collection_name, поскольку вы инициализировали его как пустой списокпоэтому это переменная, которую вы можете использовать только когда передаете ее в context.

 context={'products': products, 'collection_name': collection_name}
...