单页面的URL是:网站域名/about/,由于单页面里面的东西比较少,我们就只查询一下分类表获取所有文章分类即可。视图函数代码:
blog/views.py # 关于我们 def about(request): allcategory = Category.objects.all() return render(request, 'page.html',locals())
打开page.html页面,把里面的内容修改为自己想的要内容。把右边的二维码修改一下:
templates/page.html <img src="{% url 'index' %}static/picture/weixinqr.jpg" width="160" height="160">
至此,所有页面都实现完成。
下面我们需要进行小范围的代码优化。大家仔细观察一下,可以看到,我们每个视图函数里都有重复的查询语句。我们访问一次就得查询一次,那我们有没有方法,能让它只查询一次呢?答案是肯定的,我们先把重复的语句提取出来,单独放到一个函数里去。然后把这个函数添加到全局变量。这样,我们只需要查询一次就能实现所有视图函数都能获取到查询的数据。我们查看到,重复的有下面这几句:
blog/views.py allcategory = Category.objects.all() remen = Article.objects.filter(tui__id=2)[:6] tags = Tag.objects.all()
我们把这几句单独提取出来,单独放到另一个函数里:
blog/views.py def global_variable(request): allcategory = Category.objects.all() remen = Article.objects.filter(tui__id=2)[:6] tags = Tag.objects.all() return locals()
然后打开myblog/settings.py,找到TEMPLATES,在里面添加代码:
myblog/settings.py TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, 'templates')] , 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', 'blog.views.global_variable',#添加此处 ], }, }, ]
然后在blog/views.py里,打首页视图函数修改成:
blog/views.py def index(request): banner = Banner.objects.filter(is_active=True)[0:4] tui = Article.objects.filter(tui__id=1)[:3] allarticle = Article.objects.all().order_by('-id')[0:10] hot = Article.objects.all().order_by('views')[:10] link = Link.objects.all() return render(request, 'index.html', locals())
然后在所有的视图函数里,把有有这三句代码的全删除:
allcategory = Category.objects.all() remen = Article.objects.filter(tui__id=2)[:6] tags = Tag.objects.all()
最后得到的完整的视图函数代码如下:
blog/views.py from django.shortcuts import render from blog.models import Category,Banner, Article, Tag, Link from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger def global_variable(request): allcategory = Category.objects.all() remen = Article.objects.filter(tui__id=2)[:6] tags = Tag.objects.all() return locals() #首页 def index(request): banner = Banner.objects.filter(is_active=True)[0:4] tui = Article.objects.filter(tui__id=1)[:3] allarticle = Article.objects.all().order_by('-id')[0:10] hot = Article.objects.all().order_by('views')[:10] link = Link.objects.all() return render(request, 'index.html', locals()) #列表页 def list(request,lid): list = Article.objects.filter(category_id=lid) cname = Category.objects.get(id=lid) page = request.GET.get('page') paginator = Paginator(list, 5) try: list = paginator.page(page)#获取当前页码的记录 except PageNotAnInteger: list = paginator.page(1)#如果用户输入的页码不是整数时,显示第1页的内容 except EmptyPage: list = paginator.page(paginator.num_pages)#如果用户输入的页数不在系统的页码列表中时,显示最后一页的内容 return render(request, 'list.html', locals()) #内容页 def show(request,sid): show = Article.objects.get(id=sid) hot = Article.objects.all().order_by('?')[:10] previous_blog = Article.objects.filter(created_time__gt=show.created_time,category=show.category.id).first() netx_blog = Article.objects.filter(created_time__lt=show.created_time,category=show.category.id).last() show.views = show.views + 1 show.save() return render(request, 'show.html', locals()) #标签页 def tag(request, tag): list = Article.objects.filter(tags__name=tag) tname = Tag.objects.get(name=tag) page = request.GET.get('page') paginator = Paginator(list, 5) try: list = paginator.page(page) # 获取当前页码的记录 except PageNotAnInteger: list = paginator.page(1) # 如果用户输入的页码不是整数时,显示第1页的内容 except EmptyPage: list = paginator.page(paginator.num_pages) # 如果用户输入的页数不在系统的页码列表中时,显示最后一页的内容 return render(request, 'tags.html', locals()) # 搜索页 def search(request): ss=request.GET.get('search') list = Article.objects.filter(title__contains=ss) page = request.GET.get('page') paginator = Paginator(list, 10) try: list = paginator.page(page) # 获取当前页码的记录 except PageNotAnInteger: list = paginator.page(1) # 如果用户输入的页码不是整数时,显示第1页的内容 except EmptyPage: list = paginator.page(paginator.num_pages) # 如果用户输入的页数不在系统的页码列表中时,显示最后一页的内容 return render(request, 'search.html', locals()) # 关于我们 def about(request): return render(request, 'page.html',locals())
至此,我们所有的页面都已经完成。之后就是上线部署了。
关于项目部署,请查看文章下面的文章:
CentOS7下部署Django项目详细操作步骤
Windows server iis部署Django详细操作
Ubuntu部署Django项目方法详解
如果还有什么疑问,大家可以留言交流。完整的项源码我先不放出,自己动手实现一遍,这样才能达到学习的目的。如果实在弄不出来了,那就加我的微信:VIPdjango,获取源码。加我的时候,请发送验证"源码"。
================================================================================
如果有同学走到了这一步,恭喜你网站快要成功了,但你应该需要源码来对比自己的代码,除了联系原作者,也可以联系本人微信xoyo2371,私信给你。O(∩_∩)O哈哈~
标签:paginator,教程,list,request,Django,代码优化,objects,Article,page From: https://www.cnblogs.com/yoloooo/p/17633898.html