#python #django
#python #django
Вопрос:
Вот мой main.html , в настоящее время я включаю верхний и нижний колонтитулы
{% include "store/header.html" %}
{% block content %}
{% endblock content %}
{% include "store/footer.html" %}```
мой header.html пример: здесь я пытаюсь отобразить свою корзину
<div class="shopping__cart">
<div class="shopping__cart__inner">
<div class="offsetmenu__close__btn">
<a href="#"><i class="zmdi zmdi-close"></i></a>
</div>
<div class="shp__cart__wrap">
{% for item in items %}
<div class="shp__single__product">
<div class="shp__pro__thumb">
<a href="#">
<img src="{{item.product.imageURL}}" alt="product images">
</a>
</div>
<div class="shp__pro__details">
<h2><a href="product-details.html">{{item.product.title}}</a></h2>
<span class="quantity">QTY: {{item.quantity}}</span>
<span class="shp__price">${{item.product.price|floatformat:2}}</span>
</div>
<div class="remove__btn">
<a href="#" title="Remove this item"><i class="zmdi zmdi-close"></i></a>
</div>
</div>
{% endfor %}
</div>
<ul class="shoping__total">
<li class="subtotal">Subtotal:</li>
<li class="total__price">${{order.get_cart_total|floatformat:2}}</li>
</ul>
<ul class="shopping__btn">
<li><a href="cart.html">View Cart</a></li>
<li class="shp__checkout"><a href="checkout.html">Checkout</a></li>
</ul>
</div>
</div>
Я пытаюсь отобразить товары в своей корзине.
вот мое мнение:
def header(request):
category = None
categories = Category.objects.all()
products = Product.objects.all()
if category_slug:
category = get_object_or_404(Category, slug=category_slug)
products = products.filter(category=category)
data = cartData(request)
cartItems = data['cartItems']
order = data['order']
items = data['items']
context = {'items':items, 'order':order, 'cartItems':cartItems, 'categories':categories, 'products':products, 'category': category}
return render(request, 'store/header.html', context)
но я не уверен, как его отобразить, поскольку это всего лишь заголовок. возможно, мне следует подойти к нему по-другому в представлениях.
Ответ №1:
Вы можете использовать теги шаблонов. В Django есть теги шаблонов для выполнения сложных операций в шаблонах.
Что вы можете сделать, так это создать пользовательский тег шаблона, который будет принимать пользователя в качестве входных данных и возвращать набор запросов товаров корзины, который вы можете сохранить в переменной, а затем перебирать его для отображения всех товаров.
В myprojectdir/app_name/templatetags/cart.py
from django import template
from myapp.models import Customer
register = template.Library()
@register.simple_tag
def get_cart_items(user):
//Implement the filter logic to get the cart items for the user and then return th queryset
cart = Cart.objects.filter(user=user)
return cart
Затем внутри вашего шаблона вы можете сделать это
{% load cart %}
{% get_cart_items request.user as cart_items %}
{% for item in cart_items %}
<Your html code>
{% endfor %}
Поскольку Django автоматически передает request
in контекст всем шаблонам, вы должны получить доступ к текущему пользователю с помощью request.user
.
Чтобы понять, где создать файл тега шаблона, обратитесь к этому https://docs.djangoproject.com/en/3.1/howto/custom-template-tags/#code-layout
Для получения дополнительной информации о тегах шаблонов обратитесь к этому:
Вы также можете использовать тег включения вместо простого тега для большей гибкости и возможности повторного использования кода.