1. 总路由:
urlpatterns = [ path('admin/', admin.site.urls), path('', include(('index.urls', 'index'), namespace='index')),
]
2. 首页的字路由:
urlpatterns = [ # path('', indexView, name='index'), path('', indexClassView.as_view(), name='index'), #如果路由的视图为视图类,视图类必须由调用函数方法as_view(),这是对视图类进行实例化处理。 indexClassView 是首页view 的类名 ]
3. view.py 函数编写
class indexClassView(TemplateView): #继承TemplateView
template_name = 'index.html' # 模板name
template_engin = None
content_type = None #属性值为None则使用text/html作为响应内容的数据格式
# extra_context 继承父类,模板渲染方式:<title>{{title}}</title>
extra_context = {'title':'我是首页的标题', 'classContent': ''}
def get_context_data(self, **kwargs):
context =super().get_context_data(**kwargs) # super() 就是用来调用父类函数。 get_context_data()
context['commodityInfos'] = CommodityInfos.objects.order_by('-sold').all()[:8]
types = Types.objects.all()
# 宝宝服饰
cl = [x.seconds for x in types if x.firsts == '儿童服饰']
print(type(cl))
context['clothes'] = CommodityInfos.objects.filter(types__in=cl).order_by('-sold')[:5] # 集合去查取前5条数据, 倒排序
# 奶粉辅食
fl = [x.seconds for x in types if x.firsts == '奶粉辅食']
context['food'] = CommodityInfos.objects.filter(types__in=fl).order_by('-sold')[:5]
# 宝宝用品
gl = [x.seconds for x in types if x.firsts == '儿童用品']
context['goods'] = CommodityInfos.objects.filter(types__in=gl).order_by('-sold')[:5]
return context
# 定义HTTP的GET请求处理方法
# 参数request代表HTTP请求信息
# 若路由设有路由变量,则可从参数kwargs里获取
def get(self, request, *args, **kwargs):
print("进来了")
pass
context = self.get_context_data(**kwargs)
return self.render_to_response(context)
# 不同的请求执行不同的方法不会报错
def post(self, request, *args, **kwargs):
pass
context = self.get_context_data(**kwargs)
return self.render_to_response(context)
4. 模板渲染(django 默认模板引擎)
# 正常的模板文件分为3部分:
a.头部: 这部分是通用的单独创建个文件为base.html
1.语法包含:
1.1:static 调用静态资源:{%static 'css/main.css'%} 或 {%static 'imags/log.jpg'%}
1.2:url 生成路由地址:<a href="{%url 'index:index'%}"> 。 第一个index表示总路由的namespace的值,第二个index代表应用name="index"的路由地址。
1.3:load 加载静态类 : 一般写在<head>里{% load static %}
1.4:title 变量渲染:<title>{{title}}</title> view中 extra_context = {'title': '我是你爹', 'classContent': ''}
1.5: {% block content %}{% endblock content %} : 给内容模板继承渲染用的
1.6:{% extends 'base.html' %} 继承base.html模板
1.7:{% block content %} 中间写body 相关标签数据 {% endblock content %}
# 参考《精通Django3 Web开发》