Сессия Django - недавно просмотренное не отображается в html

я работаю над проектом с использованием фреймворка django.

У меня проблемы с отображением на html недавно просмотренных элементов, на которые пользователь (вошедший в систему) нажимал ранее.

Это мой index.html, который показывает недавно_просмотренные элементы

<div class="mt-6 px-6 py-12 bg-gray-100 rounded-xl">
        <h2 class="mb-12 text-2xl text-center">Recently Viewed Items</h2>
        
        <div class="grid grid-cols-3 gap-3">
            {% if recently_viewed_qs %}
                {% for item in recently_viewed_qs %}
                    <div>
                        <a href="{% url 'item:detail' item.id %}">
                            <div>
                                <img src="{{ item.image.url }}" class="rounded-t-xl">
                            </div>
        
                            <div class="p-6 bg-white rounded-b-xl">
                                <h2 class="text-2xl">{{ item.name }}</h2>
                            </div>
                        </a>
                    </div>
                {% endfor %}
            {% else %}
                <p>No recently viewed items.</p>
            {% endif %}
        </div>
        
    </div>

Что я получаю, так это ответ NO recently viewed items, поэтому я предполагаю, что он не входит в цикл for

Вот мой views.py (не все виды, а основные, чтобы понять проблему)

Выводы отпечатков таковы Введен в недавно_просмотренный <объект свойства по адресу 0x7f8d76b28bd0> recently viewed qs , , ]>

Я не понимаю, почему не отображается в моем html, у меня есть похожий класс, который делает почти "то же самое", который явно работает, но не использует сессию.

<div class="mt-6 px-6 py-12 bg-gray-100 rounded-xl">
    <h2 class="mb-12 text-2xl text-center">Related items</h2>

    <div class="grid grid-cols-3 gap-3">
        {% for related_item in related_items %}
            <div>
                <a href="{% url 'item:detail' related_item.id %}">
                    <div>
                        <img src="{{ related_item.image.url }}" class="rounded-t-xl">
                    </div>

                    <div class="p-6 bg-white rounded-b-xl">
                        <h2 class="text-2xl">{{ related_item.name }}</h2>
                    </div>
                </a>
            </div>
        {% endfor %}
    </div>
</div>

Спасибо тем, кто откликнется.

html изображений, показывающих

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

<div class="mt-6 px-6 py-12 bg-gray-100 rounded-xl">
        <h2 class="mb-12 text-2xl text-center">Recently Viewed Items</h2>
        
        <div class="grid grid-cols-3 gap-3">
            {% if recently_viewed %}
                {% for item in recently_viewed %}
                    <div>
                        <a href="{% url 'item:detail' item.id %}">
                            <div>
                                <img src="{{ item.image.url }}" class="rounded-t-xl">
                            </div>
        
                            <div class="p-6 bg-white rounded-b-xl">
                                <h2 class="text-2xl">{{ item.name }}</h2>
                            </div>
                        </a>
                    </div>
                {% endfor %}
            {% else %}
                <p>No recently viewed items.</p>
            {% endif %}
        </div>
        
    </div>

Исправлено, проблема была слишком легкой.

Объекты должны быть интегрированы в другое приложение под названием 'core', где находится домашняя страница моего сайта.

В нем отсутствовал контекст для недавно_просмотренных элементов.

def index(request):
items = Item.objects.all()[:6]
categories = Category.objects.all()
recently_viewed_qs = Item.objects.filter(pk__in=request.session.get("recently_viewed", []))[:3]

print(f'recently_viewed in core : {recently_viewed_qs}')


return render(request, 'core/index.html', {
    'categories': categories,
    'items': items,
    'recently_viewed':recently_viewed_qs
})
Вернуться на верх