Сессия 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
})