使用Django搭建博客网站(八)(超全超细)

接上文:上文链接

资料来自图书《Django Web应用开发实战 黄永祥》

图片墙功能

图片以列表形式显示、每张图片允许设置标题和图片描述、每页显示8张图片,每页两行,每行显示4张图片

打开album的urls.py,定义album,代码如下:


from django.urls import path
from .views import *
urlpatterns = [
    # 图片墙
    path('/.html', album, name='album'),
]

路由album设置路由变量id和page,路由变量id代表模型MyUser的主键id,用于获取某个用户(博主)的博客信息,路由变量page代表所有图片分页某一页的页数,用于获取不同页数的图片信息。

视图函数album接收并处理album的HTTP请求。

在album的views.py定义视图函数album:

from django.shortcuts import render
from django.core.paginator import Paginator
from django.core.paginator import PageNotAnInteger
from django.core.paginator import EmptyPage
from .models import AlbumInfo


def album(request, id, page):
    albumList = AlbumInfo.objects.filter(user_id=id).order_by('id')
    paginator = Paginator(albumList, 8)
    try:
        pageInfo = paginator.page(page)
    except PageNotAnInteger:
        # 如果参数page 的数据类型不是整型,就返回第一页数据
        pageInfo = paginator.page(1)
    except EmptyPage:
        # 若用户访问的页数大于实际页数,则返回最后一页的数据
        pageInfo = paginator.page(paginator.num_pages)
    return render(request, 'album.html', locals())

视图函数album将函数参数id作为模型AlnumInfo的查询条件,并以模型主键Id进行升序排列,生成数据对象albumList;然后对数据对象albumList进行分页处理,生成分页对象pageInfo,最后调用模板文件album.html生成网页内容。

模板文件album.html继承共用模板文件base.html。

album.html的代码如下:

{% extends "base.html"  %}

{% block body %}{% endblock %}

{% block content %}

{% endblock %}


{% block script %}
    
{% endblock %}

你可能感兴趣的:(使用Django搭建博客网站,django,python,后端)