响应式网站切图网上推广是什么意思
web/
2025/10/4 20:36:02/
文章来源:
响应式网站切图,网上推广是什么意思,这个是以前我自己做的一个网站,wordpress主页分栏需求
基于ListView,创建一个列表视图,用于展示BookInfo表的信息要求提供分页提供对书名,作者,描述的查询功能
示例展示:
1. 数据模型
models.py
class BookInfo(models.Model):titlemodels.CharField(verbose_name书名,max_length100)authormode…需求
基于ListView,创建一个列表视图,用于展示BookInfo表的信息要求提供分页提供对书名,作者,描述的查询功能
示例展示:
1. 数据模型
models.py
class BookInfo(models.Model):titlemodels.CharField(verbose_name书名,max_length100)authormodels.CharField(verbose_name作者,max_length100)descmodels.TextField(verbose_name介绍)create_atmodels.DateTimeField(verbose_name创建时间,auto_nowTrue)update_atmodels.DateTimeField(verbose_name更新时间,auto_now_addTrue)2. 视图
views.py
from functools import reduce
from typing import Any
from django.shortcuts import render,redirect
from django.db.models import Q
from django.views.generic import ListView
from django.views.generic.detail import DetailView
from .models import *
from .forms import *class BookListView(ListView):modelBookInfotemplate_name demo1/book_list.htmlpaginate_by 10def get_queryset(self):title self.request.GET.get(title)author self.request.GET.get(author)content self.request.GET.get(content)# 如果有任意参数不为空则构建Q对象进行查询queries [Q(titile__icontainstitle) if title else Q(),Q(author__icontainsauthor) if author else Q(),Q(desc__icontainscontent) if content else Q()]# 使用Q对象的操作符组合查询条件queryset BookInfo.objects.filter(reduce(lambda x, y: x y, queries)) if queries else BookInfo.objects.all()return querysetdef get_context_data(self, **kwargs):context super().get_context_data(**kwargs)# 保留查询参数到分页链接query_params self.request.GET.copy()if page in query_params:del query_params[page] # 移除现有的页码参数以避免冲突paginator context[paginator]page_numbers_range 5 # 您可以根据需要调整显示的页码范围大小max_index len(paginator.page_range)page self.request.GET.get(page)current_page int(page) if page else 1start_index int((current_page - 1) / page_numbers_range) * page_numbers_rangeend_index start_index page_numbers_rangeif end_index max_index:end_index max_indexpage_range paginator.page_range[start_index:end_index]context[page_range] page_rangecontext[query_params] query_params.urlencode() # 将查询参数编码为URL字符串return contextdef get(self, request, *args, **kwargs):# 如果是重定向回来的需要处理paginate_by参数if paginate_by in request.GET:try:paginate_by int(request.GET[paginate_by])if paginate_by 0: # 防止不合法的值self.paginate_by paginate_byexcept ValueError:pass # 如果转换失败忽略错误使用默认设置return super().get(request, *args, **kwargs)class BookDetailView(DetailView):modelBookInfotemplate_name demo1/book_detail.htmlcontext_object_name book注册路由(urls.py)
from django.urls import path
from .views import *urlpatterns [path(book,BookListView.as_view(),namebook-list),path(book/detail/int:pk/,BookDetailView.as_view(),namebook-detail),
]3. 页面代码
列表页:
{% extends layout.html %}{% block main %}div classpanel panel-defaultdiv classcontainerform methodGET检索:input typetext nametitle placeholder书名 value{{ request.GET.title }}input typetext nameauthor placeholder作者 value{{ request.GET.author }}input typetext namecontent placeholder内容关键字 value{{ request.GET.content }}button typesubmit搜索/buttonnbsp; a href{% url book-list %} classbtn-sm btn-danger清空查询条件/a/form/divhrdiv classpanel-bodytable classtable table-stripedtheadtrthID/thth书名/thth作者/thth说明/thth创建时间/thth更新时间/thth操作/th/tr/theadtbody{% for book in object_list %}trtd{{ book.id }}/tdtd{{ book.titile }}/tdtd{{ book.author }}/tdtd{{ book.desc }}/tdtd{{ book.create_at }}/tdtd{{ book.update_at }}/tdtda href{% url book-detail book.id %}查看详情/a/td/tr{% endfor %}/tbody/table{% if is_paginated %}div classpaginationp第 {{ page_obj.number }} 页 / 共 {{ page_obj.paginator.num_pages }} 页/p!-- 首页 --{% if page_obj.has_previous %}a href?{{ query_params }}page1首页/a{% endif %}!-- 上一页 --{% if page_obj.has_previous %}a href?{{ query_params }}page{{ page_obj.previous_page_number }}上一页/a{% endif %}!-- 中间页码显示首末3页及当前页附近的页码其余用省略号表示 --{% for num in page_obj.paginator.page_range %}{% if num page_obj.number %}span{{ num }}/span !-- 当前页不做成链接 --{% elif num page_obj.number|add:-2 and num page_obj.number|add:2 %}a href?{{ query_params }}page{{ num }}{{ num }}/a{% elif num in page_obj.paginator.page_range|slice::3 or num in page_obj.paginator.page_range|slice:-3: %}a href?{{ query_params }}page{{ num }}{{ num }}/a !-- 确保首末3页始终显示 --{% elif num page_obj.number|add:-3 or num page_obj.number|add:3 %}span.../span{% endif %}{% endfor %}!-- 下一页 --{% if page_obj.has_next %}a href?{{ query_params }}page{{ page_obj.next_page_number }}下一页/a{% endif %}!-- 尾页 --{% if page_obj.has_next %}a href?{{ query_params }}page{{ page_obj.paginator.num_pages }}尾页/a{% endif %}!-- 当前页及总页数信息 --!-- 跳转到指定页的表单 --label forjumpToPage跳转到页数:/labelinput typenumber idjumpToPage min1button onclickjumpToPage()跳转/button/div/div{% endif %}/divscriptfunction jumpToPage() {var jumpTo document.getElementById(jumpToPage).value;var currentQueryParams new URLSearchParams(window.location.search);if (jumpTo.trim() ! ) { // 确保输入有效// 保留现有查询参数并添加或更新page参数currentQueryParams.set(page, jumpTo);window.location.href window.location.pathname ? currentQueryParams.toString();} else {alert(请输入有效的页数);}}/script
{% endblock %}详情页(略)
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/86978.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!