小酌Django4——博客文章展示
小酌Django4——博客文章展示
文章列表页
已发布的文章列表展示页面,展示文章标题;
交互模式下的数据读取
blog/models.py中创建数据模型后,Django会自动提供数据库抽象的API(ORM),进行增删改查操作;
使用命令python manage.py shell
进入交互模式,进行数据库操作练习:
- 该指令可以将Django环境引入到当前交互模式;
$ python manage.py shell
Python 3.7.2 (default, Dec 29 2018, 00:00:04)
Type 'copyright', 'credits' or 'license' for more information
IPython 6.5.0 -- An enhanced Interactive Python. Type '?' for help.In [1]: <
继续编写代码:
- 引入User(Django默认的)、BlogArticles(blog/models.py中编写的)对象;
- 获取User数据模型的username字段为baby_hua的对象(也可以说是 auth_user表中,username='baby_hua’的那条记录);
- 赋值后的user是一个包含多个字段值的对象实例(可以理解为User类的一个实例);类似的操作对BlogArticles同样有效;
- 查询方式如代码中实现的;对查询结果,在Django中被称为QuerySet;
In [1]: from django.contrib.auth.models import UserIn [2]: from blog.models import BlogArticlesIn [3]: user = User.objects.get(username="baby_hua")In [4]: user.username
Out[4]: 'baby_hua'In [5]: user.id
Out[5]: 1In [6]: user.password
Out[6]: 'pbkdf2_sha256$180000$f1G0ToF5qCJ1$yc+vGbCio5qIF3BsZTbYZw2OC5+Dv9tbTL0XxvKkCKw='In [7]: user.email
Out[7]: 'hua_qiang_work@163.com'In [8]: type(user)
Out[8]: django.contrib.auth.models.UserIn [9]: blogs = BlogArticles.objects.all()In [10]: blogs
Out[10]: <QuerySet [<BlogArticles: 这是一篇简单的博客5>, <BlogArticles: 这是一篇简单的博客4>, <BlogArticles: 这是一篇简单的博客3>, <BlogArticles: 这是一篇简单的博客2>, <BlogArticles: 这是一篇简单的博客1>]>In [11]: for blog in blogs:...: print(blog.title)...:
这是一篇简单的博客5
这是一篇简单的博客4
这是一篇简单的博客3
这是一篇简单的博客2
这是一篇简单的博客1In [12]: exit()
应用视图中的数据读取
如读取文章标题,可以写一个函数blog_title()
进行实现,该函数通常被写在blog/views.py
文件中;views.py是视图文件,在其中实现的类似blog_title()
的函数,我们称之为“视图函数”,视图就变成“基于函数的视图
”(后续还有“基于类的视图
”的编写方式);
from django.shortcuts import render# Create your views here.from .models import BlogArticlesdef blog_title(request):blogs = BlogArticles.objects.all()return render(request, "blog/titles.html", {"blogs": blogs})
blog_title()
函数:
- 这是一个响应用户请求的函数;
- 第一参数request,负责响应所接收到的请求;根据需求还可以增加其他参数;
render()
函数:可以将数据渲染到指定模板上:
- 第一参数必须是request,然后是模板位置 和 所传送的数据,传送的数据使用类字典的形式;
- 该函数与
render_to_response()
效果相同,区别在于render()
作为快捷方式,会自动使用RequestContext
;
编写模板
- 模板位置
blog/titles.html
是标题列表在前端展示的页面,一般被称为模板; - 每个应用都可以有一个专门的模板目录:
templates
templates
目录是Django默认存放当前应用所需模板的目录;Django会在运行时自动查找render()函数中指定的模板;- 在
blog
目录下新建子目录templates
,结构规范如下;
templatesbase.htmlblogtitles.html
templates/base.html
基础模板代码示例:
- 所有模板中的公共部分;这样其他文件中只需要编写个性部分代码;表现出“继承”的特性;
- Django模板中,
{% block name %}
表示这是一个名为name的块标签
,用来包裹自定义内容;结束标签为{% endblock %}
;
<!DOCTYPE html>
<html lang="zh-cn"><head><meta http-equiv="X-UA-Compatible" content="ie=edge"><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>{% block title %}{% endblock %}</title><link rel="stylesheet" href="http://necolas.github.io/normalize.css/"><link rel="stylesheet" href="http://libs.baidu.com/bootstrap/3.0.3/css/bootstrap.min.css">
</head><body><div class="container">{% block content %}{% endblock %}</div><script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script><script src="http://libs.baidu.com/bootstrap/3.0.3/js/bootstrap.min.js"></script>
</body></html>
templates/blog/titles.html
标题列表模板代码示例:
{% extends "base.html" %}<!-- 重写title块标签所表示的内容 -->
{% block title %}
blog titles
{% endblock %}<!-- 重写content块标签所表示的内容 -->
{% block content %}
<div class="row text-center vertical-middle-sm"><h1>我的博客</h1>
</div>
<div class="row"><div class="col-xs-12 col-md-8"><ul><!-- 这里blogs是 blog_title()函数响应请求时传入的blogs变量,引入的是QuerySet对象:包含了所有BlogArticles类的实例对象; -->{% for blog in blogs %}<!-- 双花括号 表示对变量的引用 --><li>{{ blog.title }}</li>{% endfor %}</ul></div><div class="col-xs-6 col-md-4"><h2>广告</h2><p>读书笔记</p><img width="200px"src="https://i0.hdslb.com/bfs/face/a0d8a470a7b7b1175c9cc43a88ee4adcd9a97851.jpg@68w_68h.webp"></div>
</div>
{% endblock %}
配置URL
函数和模板编写好,再配置URL,就可以通过网页访问了:
- 目的是在浏览器访问类似
http://127.0.0.1:8000/blog/
的地址时,通过URL配置,将此请求转向blog
应用的urls.py
: - 第一步:先在
mysite1/urls.py
中配置应用的URL(这个文件顶部注释介绍了如何配置应用的URL); - 第二步:再在某个应用的
urls.py
中配置该应用具体的URL;(没有urls.py文件则创建下)
mysite1/urls.py
中配置:
"""mysite1 URL ConfigurationThe `urlpatterns` list routes URLs to views. For more information please see:https://docs.djangoproject.com/en/3.0/topics/http/urls/
Examples:
Function views1. Add an import: from my_app import views2. Add a URL to urlpatterns: path('', views.home, name='home')
Class-based views1. Add an import: from other_app.views import Home2. Add a URL to urlpatterns: path('', Home.as_view(), name='home')
Including another URLconf1. Import the include() function: from django.urls import include, path2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
"""
from django.contrib import admin
from django.urls import path, includeurlpatterns = [path("admin/", admin.site.urls),path("blog/", include("blog.urls")),
]
blog/urls.py
中配置:
from django.conf.urls import url
from . import viewsurlpatterns = [# r"^$" :表示访问当前应用的根目录,对应:http://127.0.0.1:8000/blog/# views.blog_title :声明了响应这个请求的函数对象url(r"^$", views.blog_title, name="blog_title"),
]
文章标题列表显示
现在,访问http://127.0.0.1:8000/blog/
,可以看到如下界面:
小酌Django4——博客文章展示相关推荐
- 小酌Django2——博客文章发布
小酌Django2--博客文章发布 Blog应用:博客文章发布 编写数据模型类 设计数据库和表结构是做网站的基础:在Django中,不需要通过SQL直接跟数据交互,而是完全用Python的方式创建数据 ...
- 微信小程序版博客——开发汇总总结(附源码)
花了点时间陆陆续续,拼拼凑凑将我的小程序版博客搭建完了,这里做个简单的分享和总结. 整体效果 对于博客来说功能页面不是很多,且有些限制于后端服务(基于ghost博客提供的服务),相关样式可以参考截图或 ...
- 【爬虫】利用Python爬虫爬取小麦苗itpub博客的所有文章的连接地址并写入Excel中(2)...
[爬虫]利用Python爬虫爬取小麦苗itpub博客的所有文章的连接地址并写入Excel中(2) 第一篇( http://blog.itpub.net/26736162/viewspace-22865 ...
- python小爬虫(爬取职位信息和博客文章信息)
1.python爬取招聘信息 简单爬取智联招聘职位信息(仅供学习) # !/usr/bin/env python # -*-coding:utf-8-*- """ @Au ...
- 将博客文章转变为电子书
中国站长站(mb5u.com)11月24日消息:自己的博客如何保存,如何更好地展示出来?近期,javaeye网站推出了一项新的功能,把博客制作成电子书籍. 以下,是javaeye负责人对该功能的介绍: ...
- 2018.7.10 个人博客文章=利用ORM创建分类和ORM的内置函数
昨天的注册收尾工作 其实就差了和MySql联系起来的部分,这部分很简单,首先要做的就是保存用户通过from传送过来的头像文件: """ 保存头像文件 "&quo ...
- 技术文档的撰写_如何撰写出色的技术博客文章
技术文档的撰写 从创意到完美结果的五个步骤 (Five steps to get from idea to polished result) I've been working in the open ...
- Android应用开发-小巫CSDN博客客户端UI篇
Android应用开发-小巫CSDN博客客户端UI篇 上一篇是给童鞋们介绍整个项目的概况,从这篇博文开始,后续也会详细介绍整个客户端的开发,但不会贴很多代码,我会贴核心代码然后提供实现思路,想看里面更 ...
- Android应用开发-小巫CSDN博客客户端之获取评论列表
Android应用开发-小巫CSDN博客客户端之获取评论列表 上一篇博客介绍了博文详细内容的业务逻辑实现,本篇博客介绍小巫CSDN博客客户端的最后一项功能,获取评论列表,这个功能的实现跟前面获取文章列 ...
最新文章
- Windows使用免费版Kiwisyslog搭建日志服务器
- php手机电脑,php用手机关计算机(电脑)
- CHM文件不能正确显示
- python xlsx 图片_实例11:用Python给Excel所有工作表添加图片
- 使用cloudera manager安装Hue服务【详细步骤】
- Halcon例程详解(激光三角系统标定)—— calibrate_sheet_of_light_calplate.hdev
- MySQL数据库重点概要总结
- 数据库并发一致性案例分析(存取钱)
- ipa解包打包工具_ios打包ipa的四种实用方法(.app转.ipa)
- VMware VSphere 引发的学案(三)
- Java Programming Test Question 2
- 网络爬虫、spider程序、网络蜘蛛
- 一定要讲给孩子们的27个小故事
- iPhone设备零日漏洞,5亿用户面临攻击
- 分享2020年线上支付接口产品讲解
- java图形化Swing教程(一)
- The type java.lang.Object cannot be resolved. It is indirectly referenced from required .class files
- Chap12.1圆通荣达,进退自如
- 发明专利申请的一些内容
- 学习ASP.NET的步骤