Diango博客--2.博客从“裸奔”到“有皮肤”

文章目录

    • 0.思路引导
    • 1.更改视图函数,从数据库中获取数据
    • 2.网上下载模板,添加静态文件
    • 3.修改模板Templates中css、js文件的加载路径
    • 4.修改模板,引入模板变量,获取数据库数据

0.思路引导

前文的Hello World 级别的视图函数特别简单,且毫无美感,本文有以下两个重点:
1)将借用网上的模板文件,丰富模板内容;
2)从数据库中获取数据,并推送到模板文件的模板变量中。
在这里插入图片描述

1.更改视图函数,从数据库中获取数据

文件位置:blog/views.py

from django.shortcuts import render
from .models import Postdef index(request):post_list = Post.objects.all().order_by('-created_time')return render(request, 'blog/index.html', context={'post_list': post_list})

2.网上下载模板,添加静态文件

网上下载静态文件,地址:戳这里

先在 blog 应用下建立一个 static 文件夹,然后在 static目录下建立一个 blog 文件夹,把下载的博客模板中的 css 和 js 文件夹连同里面的全部文件一同拷贝进这个目录;

然后将下载文件中的index.html中代替模板Templates里边的index.html;

此时运行pipenv run python manage.py runserver,打开浏览器如下:
在这里插入图片描述可以看到,首页显示的样式非常混乱,原因是浏览器无法正确加载 CSS 等样式文件。需要修改CSS 和 JavaScript 等静态文件的加载路径。

3.修改模板Templates中css、js文件的加载路径

文件位置:templates/blog/index.html

+ {% load static %}
<!DOCTYPE html>
<html><head><title>Black &amp; White</title><!-- meta --><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1"><!-- css -->- <link rel="stylesheet" href="css/bootstrap.min.css"><link rel="stylesheet" href="http://code.ionicframework.com/ionicons/2.0.1/css/ionicons.min.css">- <link rel="stylesheet" href="css/pace.css">- <link rel="stylesheet" href="css/custom.css">+ <link rel="stylesheet" href="{% static 'blog/css/bootstrap.min.css' %}">+ <link rel="stylesheet" href="{% static 'blog/css/pace.css' %}">+ <link rel="stylesheet" href="{% static 'blog/css/custom.css' %}"><!-- js -->- <script src="js/jquery-2.1.3.min.js"></script>- <script src="js/bootstrap.min.js"></script>- <script src="js/pace.min.js"></script>- <script src="js/modernizr.custom.js"></script>+ <script src="{% static 'blog/js/jquery-2.1.3.min.js' %}"></script>+ <script src="{% static 'blog/js/bootstrap.min.js' %}"></script>+ <script src="{% static 'blog/js/pace.min.js' %}"></script>+ <script src="{% static 'blog/js/modernizr.custom.js' %}"></script></head><body><!-- 其它内容 -->- <script src="js/script.js' %}"></script>+ <script src="{% static 'blog/js/script.js' %}"></script></body>
</html>

注意:这里 - 表示删掉这一行,而 + 表示增加这一行。

运行服务器后,显示效果如下:
在这里插入图片描述

4.修改模板,引入模板变量,获取数据库数据

目前我们看到的只是模板中预先填充的一些数据,我们得让它显示从数据库中获取的文章数据。下面来稍微改造一下模板:
1)在模板 index.html 中找到一系列 article 标签:

templates/blog/index.html...
<article class="post post-1">...
</article><article class="post post-2">...
</article><article class="post post-3">...
</article>
...

2)将 index.html 中多余的 article 标签删掉,只留下一个 article 标签,然后写上下列代码:

...
{% for post in post_list %}<article class="post post-{{ post.pk }}">...</article>
{% empty %}<div class="no-post">暂时还没有发布的文章!</div>
{% endfor %}
...

3)修改article 标签中的具体内容

<h1 class="entry-title"><a href="single.html">Adaptive Vs. Responsive Layouts And Optimal Text Readability</a>
</h1>
<div class="entry-meta"><span class="post-category"><a href="#">django 博客教程</a></span><span class="post-date"><a href="#"><time class="entry-date"datetime="2012-11-09T23:15:57+00:00">2017511</time></a></span><span class="post-author"><a href="#">追梦人物</a></span><span class="comments-link"><a href="#">4 评论</a></span><span class="views-count"><a href="#">588 阅读</a></span>
</div>

改为

<h1 class="entry-title"><a href="single.html">{{ post.title }}</a>
</h1>
<div class="entry-meta"><span class="post-category"><a href="#">{{ post.category.name }}</a></span><span class="post-date"><a href="#"><time class="entry-date"datetime="{{ post.created_time }}">{{ post.created_time }}</time></a></span><span class="post-author"><a href="#">{{ post.author }}</a></span><span class="comments-link"><a href="#">4 评论</a></span><span class="views-count"><a href="#">588 阅读</a></span>
</div>

标签中

<div class="entry-content clearfix"><p>免费、中文、零基础,完整的项目,基于最新版 django 1.10 和 Python 3.5。带你从零开始一步步开发属于自己的博客网站,帮助你以最快的速度掌握 django开发的技巧...</p><div class="read-more cl-effect-14"><a href="#" class="more-link">继续阅读 <span class="meta-nav"></span></a></div>
</div>

改为:

<div class="entry-content clearfix"><p>{{ post.excerpt }}</p><div class="read-more cl-effect-14"><a href="#" class="more-link">继续阅读 <span class="meta-nav"></span></a></div>
</div>

4)运行服务器后,显示效果如下:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/452531.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

抽象

人类在认识复杂现象的过程中使用的最强有力的思维工具是抽象。人们在实践中认识到&#xff0c;在现实世界中一定事物、状态或过程之间总存在着某些相似的方面(共性)。把这些相似的方面集中和概括起来&#xff0c;暂时忽略它们之间的差异&#xff0c;这就是抽象。或者说抽象就是…

程序员的成长从开窍开始系列 一、如何摆脱低级错误的困扰

最近&#xff0c;有两位Google Maps API的初学者向我请教他们按照最简单例子写的程序为什么不能正常的运行。 其中一位用GTalk跟我交流&#xff0c;我仔细了看了他的代码&#xff0c;没看出问题&#xff0c;把代码保存在本地&#xff0c;打开Firefox的错误控制台&#xff0c;用…

脉冲时间宽度c语言,什么是脉冲宽度_脉冲宽度是什么意思

脉冲宽度是个很广泛的词&#xff0c;在不同的领域&#xff0c;脉冲宽度有不同的含义。脉冲宽度从学术角度讲就是电流或者电压随时间有规律变化的时间宽度&#xff0c;平时研究主要是方波&#xff0c;三角波&#xff0c;锯齿波&#xff0c;正弦函数波等等&#xff0c;这些波形变…

HDU - 5919 Sequence II

题意&#xff1a; 给定长度为n的序列和q次询问。每次询问给出一个区间&#xff08;L&#xff0c;R&#xff09;&#xff0c;求出区间内每个数第一次出现位置的中位数&#xff0c;强制在线。 题解&#xff1a; 用主席树从右向左的插入点。对于当前点i&#xff0c;如果a[i]出现过…

Django博客--3.创作后台开启

文章目录0.创建admin后台管理员账号1.在 admin 后台注册模型2.汉化应用的标题3.汉化应用下各个模块的名称4.汉化应用下各个模块的属性的名称5.文章列表显示更加详细的信息6.简化新增文章的表单7.自动设置文章作者为当前用户8.设定创建时间为当前时间9.设定修改建时间为保存时的…

逐步求精

逐步求精定义为为了能集中精力解决主要问题而尽量推迟对问题细节的考虑。 逐步求精最初是由NiklausWirth提出的一种自顶向下的设计策略。按照这种设计策略&#xff0c;程序的体系结构是通过逐步精化处理过程的层次而设计出来的。通过逐步分解对功能的宏观陈述而开发出层次结构…

raid-6磁盘阵列损坏导致数据丢失的恢复过程(图文教程)

一、故障描述机房突然断电导致整个存储瘫痪&#xff0c;加电后存储依然无法使用。经过用户方工程师诊断后认为是断电导致存储阵列损坏。整个存储是由12块日立硬盘&#xff08;3T SAS硬盘&#xff09;组成的RAID-6磁盘阵列&#xff0c;被分成一个卷&#xff0c;分配给几台Vmware…

编写登录注册

const readline require(readline-sync);let error 3;let user [{username: 001,password: 123}, {username: 002,password: 456}, {uesrname: 003,password: 789}]//登录let denglu function () {while (true) {console.log(请输入您的登录账号&#xff1a;);let username…

android将字符串转化为json,将字符串转换为JSON数组

将字符串转换为JSON数组我从Web服务获得以下字符串的JSON&#xff0c;并尝试将其转换为 JSONarray{"locations": [{"lat": "23.053","long": "72.629","location": "ABC","address": "D…

谈新技术学习方法-如何学习一门新技术新编程语言

学习一门编程语言或者编程技术的方式基本上是这样一个流程&#xff1a; 1&#xff0c;对学习这门语言或者技术的必要性进行评估。比如你是工作需要&#xff0c;或者兴趣所至&#xff0c;甚至是为了把妹。这个必要性关系到你要学多深入&#xff0c;需要学习多长时间。 比如我想…

信息隐藏和局部化

信息隐藏原理&#xff1a;应该这样设计和确定模块&#xff0c;使得一个模块内包含的信息(过程和数据)对于不需要这些信息的模块来说&#xff0c;是不能访问的。 局部化是指把一些关系密切的软件元素物理地放得彼此靠近。 如果在测试期间和以后的软件维护期间需要修改软件&#…

图像识别自动化android,Android自动化测试

写在开头&#xff1a;Android UI 自动化测试推荐网易的Airtest&#xff0c;也是谷歌推荐的&#xff0c;操作简单&#xff0c;而且基于图像识别根据用户操作界面自动生成Python测试代码JUnit单元测试testImplementation junit:junit:4.12image.pngimage.png使用gradle命令进行单…

如何重构“箭头型”代码

本文主要起因是&#xff0c;一次在微博上和朋友关于嵌套好几层的if-else语句的代码重构的讨论&#xff08;微博原文&#xff09;&#xff0c;在微博上大家有各式各样的问题和想法。按道理来说这些都是编程的基本功&#xff0c;似乎不太值得写一篇文章&#xff0c;不过我觉得很多…

Django博客--4.开发博客文章详情页

文章目录0.思路引导1.设计文章详情页的 URL2.获取文章的URL3.编写 detail 视图函数4.编写详情页模板5.更改主页中跳转详情页的地址链接6.模板继承--抽取base.html7.模板继承--修改 index.html使其继承base.html8.模板继承--修改detail.html使其继承base.html9.结果展示0.思路引…

10、并发容器,ConcurrentHashMap

Java 提供了不同层面的线程安全支持。在传统集合框架内部&#xff0c;除了 Hashtable 等同步容器&#xff0c;还提供了所谓的同步包装器&#xff08;Synchronized Wrapper&#xff09;&#xff0c;我们可以调用 Collections 工具类提供的包装方法&#xff0c;来获取一个同步的包…

程序员的本质

Computers are useless. They can only give you answers. – Picasso计算机没有什么作用。他们只能告诉你答案。——毕加索很多人&#xff08;包括我岳母&#xff09;认为计算机变得如此智能&#xff0c;所以在不久的未来将不再需要程序员。另外一些人认为程序员是天才&#x…

模式-视图-控制器模式2.0

1 MVC的实现   1.1 分析应用问题&#xff0c;对系统进行分离   分析应用问题&#xff0c;分离出系统的内核功能、对功能的控制输入、系统的输出行为三大部分。设计模型部件使其封装内核数据和计算功能&#xff0c;提供访问显示数据的操作&#xff0c;提供控制内部行为的操作…

总体设计的原理

1 模块化 2 抽象 3 逐步求精 4 信息隐藏和局部化 5 模块独立

android 手动回收对象,Android Studio Studio回收列表中的JSON对象

我想在recyclerview中显示一些JSON对象&#xff0c;并且希望它们在日期之后排序&#xff0c;我该如何实现&#xff1f;下面是下载从JSON URL的数据的方法&#xff1a;Android Studio Studio回收列表中的JSON对象public void downloadFromSkistar(){try{URL url new URL("…

剖析管理所有大数据组件的可视化利器:Hue

欢迎关注大数据和人工智能技术文章发布的微信公众号&#xff1a;清研学堂&#xff0c;在这里你可以学到夜白&#xff08;作者笔名&#xff09;精心整理的笔记&#xff0c;让我们每天进步一点点&#xff0c;让优秀成为一种习惯&#xff01; 日常的大数据使用都是在服务器命令行中…