单页面的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())
至此,我们所有的页面都已经完成。之后就是上线部署了。
关于项目部署,请查看文章下面的文章: