首先,我们页面很多地方是相似的,这里就创建一个基础模板,不同的地方,对模板内容的block进行修改即可;对于相同的地方,我们就使用include包含即可
创建基础模板templates
利用基础模板,创建好可以修改的位置,以后使用的模板,就直接继承他就好
{% block title %}{% endblock %} {% block headerjs %}{% endblock %}
{% include 'top.html' %}{% block main %}{% endblock %}
{% block footer %}{% endblock %}
创建顶层模板templates
我们发现,顶层位置上存在很多一样的代码,创建一个顶层模板,以后直接插入就好
子应用中创建模板
我们在Django中分类模板的根据,是通过不同的页面,创建不同的子应用,在不同的子应用下创建templates/子应用名。
{% extends 'base.html' %}
{% block title %} 商品列表页 {% endblock %}
{% block main %}
{% endblock %}{% block footerjs %}
{% endblock %}
views
from django.shortcuts import render# Create your views here.# 商品列表页
def index(request):return render(request,'goodsapp/index.html')
根urls
from django.contrib import admin
from django.urls import path,includeurlpatterns = [path('admin/', admin.site.urls),path('',include('goodsapp.urls')),
]
子urls
# netshop\goodsapp\urls.py
from django.contrib import admin
from django.urls import path,include
from goodsapp import views
urlpatterns = [path('',views.index),
]
我们需要修改前端的各个路径;并且,把各个所需要的文件放入文件夹中(根目录的)
配置上传文件与静态资源settings
# 静态资源文件配置
STATIC_URL = 'static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR,'static'),]
# Default primary key field type
# https://docs.djangoproject.com/en/4.0/ref/settings/#default-auto-fieldDEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'# 配置上传文件
MEDIA_URL= 'media/'
MEDIA_ROOT = os.path.join(BASE_DIR,'media')
配置上传的资源根urls
我们需要上传文件的时候,需要配置一下根路由
#访问上传的资源
from django.conf import settings
from django.conf.urls.static import static
if settings.DEBUG:urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
修改base.html路径
{% load static %}
{% block title %}{% endblock %} {% block headerjs %}{% endblock %}
当前效果展示
图片无法显示的原因是,图片放在top.html中,这里我们需要修改top.html
修改top.html
{% load static %}
修改商品goods.html
观察上述代码可发现,对于商品的展示,我们选择了一个商品对应一个div去展示,这样非常不方便。我们首先,只保留第一个div,剩余删掉,用循环的方式去改变。顶部的菜单栏也是如此
templates模板修改
{% extends 'base.html' %}
{% block title %} 商品列表页 {% endblock %}
{% block main %}
{% for category in categoryList %}- {{category.cname}}
{% endfor %}
{% for goods in goodsList %} {% endfor %}
{% endblock %}{% block footerjs %}
{% endblock %}
模型model.py
添加查询函数
# 商品表
class Goods(models.Model):gname = models.CharField(max_length=100, verbose_name='商品名称')gdesc = models.CharField(max_length=100, verbose_name='商品描述')# DecimalFiled:数字字段,可以设置整数位与小数位oldprice = models.DecimalField(max_digits=5, decimal_places=2, verbose_name='商品原价')price = models.DecimalField(max_digits=5, decimal_places=2, verbose_name='商品现价')# 创建外键,关联商品分类表category = models.ForeignKey(Category, on_delete=models.CASCADE)# 获取商品图片def getImgUrl(self):# 获取第一个库存——>颜色——>urlreturn self.inventory_set.first().color.colorurldef __str__(self) -> str:return self.gname