摘要:文章目錄商品列表頁邏輯代碼商品列表頁的數據渲染商品詳細頁實現商品收藏商品列表頁邏輯代碼的定義視圖函數商品列表獲取請求參數變量是商品搜索功能的關鍵字,它與模型的字段進行模糊匹配,因此查詢條件為。
commodity的views.py定義視圖函數commodityView
from django.core.paginator import Paginator, PageNotAnInteger,EmptyPagefrom django.http import HttpResponsefrom django.shortcuts import renderfrom .models import *def commodityView(request): title = "商品列表" classContent = "commoditys" firsts = Types.objects.values("firsts").distinct() typesList = Types.objects.all() # 獲取請求參數 t = request.GET.get("t","") s = request.GET.get("s","sold") p = request.GET.get("p",1) n = request.GET.get("n","") commodityInfos = CommodityInfos.objects.all() if t: types = Types.objects.filter(id=t).first() commodityInfos = commodityInfos.filter(types=types.seconds) if s: commodityInfos = commodityInfos.order_by("-"+ s) if n: commodityInfos = commodityInfos.filter(name_contains=n) pagintor = Paginator(commodityInfos,6) try: pages = pagintor.page(p) except PageNotAnInteger: pages = pagintor.page(1) except EmptyPage: pages = pagintor.page(pagintor.num_pages) return render(request,"commodity.html",locals())
(1)變量n是商品搜索功能的關鍵字,它與模型CommodityInfos的字段name進行模糊匹配,因此查詢條件為name__contains=n。
(2)變量t是查詢某個分頁的商品信息,它以整型格式表示,代表模型Type的主鍵id
(3)變量s是設置商品的排序方式,如果請求參數s為空,則默認變量s等于字符串sold
(4)變量p是設置商品信息的頁數,默認變量p等于1
commodity.html
{% extends "base.html" %}{% load static %}{% block content %} <div class="commod-cont-wrap"> <div class="commod-cont w1200 layui-clear"> <div class="left-nav"> <div class="title">所有分類</div> <div class="list-box"> {% for f in firsts %} <dl> <dt>{{ f.firsts }}</dt> {% for t in typesList %} {% if t.firsts == f.firsts %} <dd><a href="{% url "commodity:commodity" %}?t={{ t.id }}&n={{ n }}">{{ t.seconds }}</a></dd> {% endif %} {% endfor %} </dl> {% endfor %} </div> </div> <div class="right-cont-wrap"> <div class="right-cont"> <div class="sort layui-clear"> <a {% if not s or s == "sold" %}class="active" {% endif %} href="{% url "commodity:commodity" %}?t={{ t }}&s=sold&n={{ n }}">銷量</a> <a {% if s == "price" %}class="active" {% endif %} href="{% url "commodity:commodity" %}?t={{ t }}&s=price&n={{ n }}">價格</a> <a {% if s == "created" %}class="active" {% endif %} href="{% url "commodity:commodity" %}?t={{ t }}&s=created&n={{ n }}">新品</a> <a {% if s == "likes" %}class="active" {% endif %} href="{% url "commodity:commodity" %}?t={{ t }}&s=likes&n={{ n }}">收藏</a> </div> <div class="prod-number"> <a href="javascript:;">商品列表</a> <span>></span> <a href="javascript:;">共{{ commodityInfos|length }}件商品</a> </div> <div class="cont-list layui-clear" id="list-cont"> {% for p in pages.object_list %} <div class="item"> <div class="img"> <a href="{% url "commodity:detail" p.id %}"> <img height="280" width="280" src="{{ p.img.url }}"></a> </div> <div class="text"> <p class="title">{{ p.name }}</p> <p class="price"> <span class="pri">¥{{ p.price|floatformat:"2" }}</span> <span class="nub">{{ p.sold }}付款</span> </p> </div> </div> {% endfor %} </div> </div> </div> <div id="demo0" style="text-align: center;"> <div class="layui-box layui-laypage layui-laypage-default" id="layui-laypage-1"> {% if pages.has_previous %} <a href="{% url "commodity:commodity" %}?t={{ t }}&s={{ s }}&n={{ n }}&p={{ pages.previous_page_number }}" class="layui-laypage-prev">上一頁</a> {% endif %} {% for page in pages.paginator.page_range %} {% if pages.number == page %} <span class="layui-laypage-curr"><em class="layui-laypage-em"></em><em>{{ page }}</em></span> {% elif pages.number|add:"-1" == page or pages.number|add:"1" == page %} <a href="{% url "commodity:commodity" %}?t={{ t }}&s={{ s }}&n={{ n }}&p={{ page }}">{{ page }}</a> {% endif %} {% endfor %} {% if pages.has_next %} <a href="{% url "commodity:commodity" %}?t={{ t }}&s={{ s }}&n={{ n }}&p={{ pages.pages.next_page_number }}" class="layui-laypage-next">下一頁</a> {% endif %} </div> </div> </div> </div>{% endblock content %} {% block script %} layui.config({ base: "{% static "js/" %}" }).use(["mm","laypage","jquery"],function(){ var laypage = layui.laypage,$ = layui.$, mm = layui.mm; $(".list-box dt").on("click",function(){ if($(this).attr("off")){ $(this).removeClass("active").siblings("dd").show() $(this).attr("off","") }else{ $(this).addClass("active").siblings("dd").hide() $(this).attr("off",true) } })});{% endblock script %}
效果圖
commodity的views.py定義視圖函數detailView
def detailView(request, id): title = "商品介紹" classContent = "datails" commoditys = CommodityInfos.objects.filter(id=id).first() items = CommodityInfos.objects.exclude(id=id).order_by("-sold")[:5] likesList = request.session.get("likes", []) likes = True if id in likesList else False return render(request, "details.html", locals())
details.html
{% extends "base.html" %}{% load static %}{% block content %} <div class="data-cont-wrap w1200"> <div class="crumb"> <a href="{% url "index:index" %}">首頁</a> <span>></span> <a href="{% url "commodity:commodity" %}">所有商品</a> <span>></span> <a href="javascript:;">產品詳情</a> </div> <div class="product-intro layui-clear"> <div class="preview-wrap"> <img height="300" width="300" src="{{ commoditys.img.url }}"> </div> <div class="itemInfo-wrap"> <div class="itemInfo"> <div class="title"> <h4>{{ commoditys.name }}</h4> {% if likes %} <span id="collect"><i class="layui-icon layui-icon-rate-solid"></i>收藏</span> {% else %} <span id="collect"><i class="layui-icon layui-icon-rate"></i>收藏</span> {% endif %} </div> <div class="summary"> <p class="reference"><span>參考價</span> <del>¥{{ commoditys.price|floatformat:"2" }}</del></p> <p class="activity"><span>活動價</span><strong class="price"><i>¥</i>{{ commoditys.discount|floatformat:"2" }}</strong></p> <p class="address-box"><span>送 至</span><strong class="address">廣東 廣州 天河區</strong></p> </div> <div class="choose-attrs"> <div class="color layui-clear"><span class="title">規 格</span> <div class="color-cont"><span class="btn active">{{ commoditys.sezes }}</span></div></div> <div class="number layui-clear"><span class="title">數 量</span><div class="number-cont"> <span class="cut btn">-</span> <input onkeyup="if(this.value.length==1){this.value=this.value.replace(/[^1-9]/g,"")}else{this.value=this.value.replace(//D/g,"")}" onafterpaste="if(this.value.length==1){this.value=this.value.replace(/[^1-9]/g,"")}else{this.value=this.value.replace(//D/g,"")}" maxlength="4" type="" id="quantity" value="1"> <span class="add btn">+</span></div></div> </div> <div class="choose-btns"> <a class="layui-btn layui-btn-danger car-btn"> <i class="layui-icon layui-icon-cart-simple"></i>加入購物車</a> </div> </div> </div> </div> <div class="layui-clear"> <div class="aside"> <h4>熱銷推薦</h4> <div class="item-list"> {% for item in items %} <div class="item"> <a href="{% url "commodity:detail" item.id %}"> <img height="280" width="280" src="{{ item.img.url }}"> </a> <p> <span title="{{ item.name }}"> {% if item.name|length > 15 %} {{ item.name|slice:":15" }}... {% else %} {{ item.name|slice:":15" }} {% endif %} </span> <span class="pric">¥{{ item.discount|floatformat:"2" }}</span> </p> </div> {% endfor %} </div> </div> <div class="detail"> <h4>詳情</h4> <div class
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/119071.html
摘要:文章目錄基礎模板設計首頁模板設計和的定義相應的視圖函數配置媒體資源的路由信息基礎模板設計在項目的文件夾新建文件該文件用于存放每個網頁頂部的代碼母嬰商城請輸入需要的商品 ...
摘要:前言由于寫的文章已經是有點多了,為了自己和大家的檢索方便,于是我就做了這么一個博客導航。 前言 由于寫的文章已經是有點多了,為了自己和大家的檢索方便,于是我就做了這么一個博客導航。 由于更新比較頻繁,因此隔一段時間才會更新目錄導航哦~想要獲取最新原創的技術文章歡迎關注我的公眾號:Java3y Java3y文章目錄導航 Java基礎 泛型就這么簡單 注解就這么簡單 Druid數據庫連接池...
摘要:有必要建一個資源服務器存放靜態資源。一些用戶級別的數據輕量可以考慮存儲在中。存儲的是值,可以通過來對和對象之間的轉換如果我們的數據是在后臺傳過去或者轉換而成的,在前臺上并沒有做什么改變的話。 移動商城項目總結 移動商城項目是我第二個做得比較大的項目,該項目系統來源于傳智Java168期,十天的視頻課程(想要視頻的同學關注我的公眾號就可以直接獲取了) 通過這次的項目又再次開闊了我的視野,...
目錄 一、禪道 一、測試工具背景 二、測試管理工具 三、測試工具介紹 四、禪道介紹 五、禪道操作 7. 創建發布 8. 測試團隊 二、缺陷報告 三、測試報告 一、概要 二、測試過程 三、缺陷分析 四、測試總結 四、接口測試以及用例編寫 五、Fiddler 好文推薦 一、禪道 一、測試工具背景 當測試環境搭建完成后,測試人員將在自己搭建的環境上執行測試用例,開展測試工作。測試人員在執行測試用例的過...
閱讀 3455·2023-04-26 02:31
閱讀 3620·2021-11-23 09:51
閱讀 1285·2021-11-17 09:33
閱讀 2434·2021-11-16 11:45
閱讀 2566·2021-10-11 11:12
閱讀 2406·2021-09-22 15:22
閱讀 2712·2021-09-04 16:40
閱讀 2568·2021-07-30 15:30