小酌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——博客文章展示相关推荐

  1. 小酌Django2——博客文章发布

    小酌Django2--博客文章发布 Blog应用:博客文章发布 编写数据模型类 设计数据库和表结构是做网站的基础:在Django中,不需要通过SQL直接跟数据交互,而是完全用Python的方式创建数据 ...

  2. 微信小程序版博客——开发汇总总结(附源码)

    花了点时间陆陆续续,拼拼凑凑将我的小程序版博客搭建完了,这里做个简单的分享和总结. 整体效果 对于博客来说功能页面不是很多,且有些限制于后端服务(基于ghost博客提供的服务),相关样式可以参考截图或 ...

  3. 【爬虫】利用Python爬虫爬取小麦苗itpub博客的所有文章的连接地址并写入Excel中(2)...

    [爬虫]利用Python爬虫爬取小麦苗itpub博客的所有文章的连接地址并写入Excel中(2) 第一篇( http://blog.itpub.net/26736162/viewspace-22865 ...

  4. python小爬虫(爬取职位信息和博客文章信息)

    1.python爬取招聘信息 简单爬取智联招聘职位信息(仅供学习) # !/usr/bin/env python # -*-coding:utf-8-*- """ @Au ...

  5. 将博客文章转变为电子书

    中国站长站(mb5u.com)11月24日消息:自己的博客如何保存,如何更好地展示出来?近期,javaeye网站推出了一项新的功能,把博客制作成电子书籍. 以下,是javaeye负责人对该功能的介绍: ...

  6. 2018.7.10 个人博客文章=利用ORM创建分类和ORM的内置函数

    昨天的注册收尾工作 其实就差了和MySql联系起来的部分,这部分很简单,首先要做的就是保存用户通过from传送过来的头像文件: """ 保存头像文件 "&quo ...

  7. 技术文档的撰写_如何撰写出色的技术博客文章

    技术文档的撰写 从创意到完美结果的五个步骤 (Five steps to get from idea to polished result) I've been working in the open ...

  8. Android应用开发-小巫CSDN博客客户端UI篇

    Android应用开发-小巫CSDN博客客户端UI篇 上一篇是给童鞋们介绍整个项目的概况,从这篇博文开始,后续也会详细介绍整个客户端的开发,但不会贴很多代码,我会贴核心代码然后提供实现思路,想看里面更 ...

  9. Android应用开发-小巫CSDN博客客户端之获取评论列表

    Android应用开发-小巫CSDN博客客户端之获取评论列表 上一篇博客介绍了博文详细内容的业务逻辑实现,本篇博客介绍小巫CSDN博客客户端的最后一项功能,获取评论列表,这个功能的实现跟前面获取文章列 ...

最新文章

  1. Windows使用免费版Kiwisyslog搭建日志服务器
  2. php手机电脑,php用手机关计算机(电脑)
  3. CHM文件不能正确显示
  4. python xlsx 图片_实例11:用Python给Excel所有工作表添加图片
  5. 使用cloudera manager安装Hue服务【详细步骤】
  6. Halcon例程详解(激光三角系统标定)—— calibrate_sheet_of_light_calplate.hdev
  7. MySQL数据库重点概要总结
  8. 数据库并发一致性案例分析(存取钱)
  9. ipa解包打包工具_ios打包ipa的四种实用方法(.app转.ipa)
  10. VMware VSphere 引发的学案(三)
  11. Java Programming Test Question 2
  12. 网络爬虫、spider程序、网络蜘蛛
  13. 一定要讲给孩子们的27个小故事
  14. iPhone设备零日漏洞,5亿用户面临攻击
  15. 分享2020年线上支付接口产品讲解
  16. java图形化Swing教程(一)
  17. The type java.lang.Object cannot be resolved. It is indirectly referenced from required .class files
  18. Chap12.1圆通荣达,进退自如
  19. 发明专利申请的一些内容
  20. 学习ASP.NET的步骤

热门文章

  1. isolar bsw配置工具的基本配置CanIf
  2. vscode latex 字数统计
  3. 现在AI发展到什么阶段了
  4. 天敏SDK2500开发小计
  5. html封面设计图片手绘大全,本子封面设计手绘素描图片欣赏
  6. Informatica Big Data Management 运维命令
  7. 数字图像中手写阿拉伯数字的识别技术概览
  8. Java咖啡价格问题_【转】咖啡—根据咖啡品种选购杯具
  9. 职教云自动选题、答题并自动修改答题已用时间 脚本
  10. C++ [实验一] CMatrix类设计与实现