【发布时间】:2020-05-02 03:44:25
【问题描述】:
我是 Django 初学者,所以我希望我的问题有意义。
我正在尝试了解购物车应用程序的工作原理。不涉及会话。另外,我想在主页上显示所有内容,以便订单“摘要”始终可见并在一页上更新。
正如我所说,我只是在学习 Django,所以我创建了两个模型,Item 和 Cart
'models.py'
from django.db import models
from django.contrib.auth.models import User
# Create your models here.
class Item(models.Model):
name = models.CharField(max_length=25)
price = models.DecimalField(max_digits=5, decimal_places=2)
def __str__(self):
return self.name
class Cart(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
created_at = models.DateTimeField(auto_now_add=True)
items = models.ManyToManyField(Item)
total = models.DecimalField(max_digits=5, decimal_places=2)
def __str__(self):
return 'Order number: %s' % self.id
“views.py”中的主页视图
from django.shortcuts import render
from .models import Cart, Item
# Create your views here.
def home(request):
items = Item.objects.all()
carts = Cart.objects.all()
length = len(Cart.objects.all())
cart = carts[length - 1]
cart_items = cart.items
return render(request, 'cart/home.html', {'cart': cart,
'items': items,
'cart_items': cart_items})
映射在“urls.py”中(包含在主“urls.py”中)
from django.urls import path
from . import views
urlpatterns = [
path('', views.home, name='home')
]
我已经在管理员中注册了这两个模型,尽管我知道购物车不应该是,但为了测试,我创建了一些项目和一些订单。
现在在我的模板上,我已设法显示菜单中可用的项目、当前以及最后一个订单 ID,但我无法访问购物车内的项目。
从我的基本模板中可以看出,我在视图中定义并在上下文中传递的 cart_items 变量返回 cart.Item.None,尽管它实际上包含 3 个项目。
这是 HTML:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Home page</title>
</head>
<body>
<div><h1>Menu</h1></div>
{% for item in items %}
<ul>{{ item }}</ul>
{% endfor %}
<div><h1>Order</h1></div>
{{ cart }}
{{ cart_items }}
</body>
</html>
我不知道是否必须通过 Django 模板语言从 HTML 访问,或者通过在上下文中传递变量在视图中访问
总而言之,我想在 Order id 旁边看到:“数字”,例如“Pizza 9.99, Coca Cola 3.5”。
【问题讨论】:
标签: django django-templates django-views django-queryset