前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Django搭建博客(四):渲染前数据的处理

Django搭建博客(四):渲染前数据的处理

作者头像
渔父歌
发布于 2018-09-26 10:58:59
发布于 2018-09-26 10:58:59
52700
代码可运行
举报
文章被收录于专栏:数据结构笔记数据结构笔记
运行总次数:0
代码可运行

一、定制日期显示格式

上一篇我们提到日期的显示问题,个人来说,我更喜欢这样的日期显示:

2018-07-21

但是 django的默认日期显示的格式却是这样的:

July 30, 2018

简直要急死强迫症,估计大多数人都不太能接受这种日期显示格式,所以我们得改一改。

一个简单得方法就是不直接在模板里使用 date属性,而是使用date属性的yearmonthday属性来拼凑我们所需的日期格式。

比如,在模板中我们可以这样写:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<span class="d-block">{{post.date.year}}-{{post.date.month}}-{{post.date.day}}</span>
# 2018-7-30

这样可以获得我们所需要的格式,不过这样的编码方式会给日后的维护带来很多麻烦。

比如说,我突然想换个日期显示的格式,那就得一个页面一个页面地去改代码。

一个更好地方法是,将日期显示格式封装为一个方法,我们调用这个方法来获取格式化后的日期。

这样当以后需要改变日期显示格式时,就只需要改一下这个方法就够了,而不用关心哪些页面调用了这个方法。

说了这么多,其实我们只要给 Post类添加一个方法就可以了,因为 Django是支持在模板里调用实例的方法的。

打开 models文件,为 Post类添加 get_format_date方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from django.db import models


class Post(models.Model):
    title = models.CharField(max_length=50)
    content = models.TextField()
    tags = models.CharField(max_length=50)
    date = models.DateField()

    def get_format_date(self):
        return f'{self.date.year}-{self.date.month}-{self.date.day}'

这里字符串前面的 f类似与 format方法,不过这样更直观。

添加完成之后,我们只需要在需要显示日期的地方调用 get_format_date方法就行,如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<span class="d-block">{{post.get_format_date}}</span>
# 2018-7-30

这样可以达到和之前一样的效果,而且更便于维护,调用形式也更简单。

顺着这个思路,我们很容易就能想到怎么显示文章摘要。

二、显示文章摘要

给 Post类再添加一个方法get_breif_content来获取文章摘要

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from django.db import models


class Post(models.Model):
    title = models.CharField(max_length=50)
    content = models.TextField()
    tags = models.CharField(max_length=50)
    date = models.DateField()

    def get_format_date(self):
        return f'{self.date.year}-{self.date.month}-{self.date.day}'

    def get_brief_content(self):
        return f'{self.content[:5]}...'

这里为了效果明显一些,设置了只显示前 5个字符,实际显示中比这要多,而且也不一定就是显示前多少个字符,也可以是显示第一个自然段。

这些显示的细节就留到以后再进行优化。

三、创建文章详情页面

在首页里,我们点击文章标题应该能够进入文章详情页面,所以需要给每篇文章的标题添加一个链接。

这个链接有这样的格式:article/2018/07/title article+年份+月份+文章的标题,这里标题将作为一个查询的关键字从数据库里获取文章信息。

聪明的读者肯定想到了,这里可以使用一个方法来生成文章的链接

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from django.db import models


class Post(models.Model):
    title = models.CharField(max_length=50)
    content = models.TextField()
    tags = models.CharField(max_length=50)
    date = models.DateField()

    def get_format_date(self):
        return f'{self.date.year}-{self.date.month}-{self.date.day}'

    def get_brief_content(self):
        return f'{self.content[:5]}...'

    def get_absolute_url(self):
        return f'{self.date.year}/{self.date.month}/{self.title}'

现在链接有了,我们还需要添加对应的视图和链接

先创建一个 article模板,继承自 base模板:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!--article.html-->
{% extends 'myblog/base.html' %}

{% block title %}{{pagedata.post.title}}{% endblock %}

{% block main %}

<div class="row">
    <div class="col text-center">
        <h1>{{pagedata.post.title}}</h1>
        <span class="d-block">Date:{{pagedata.post.get_format_date}}||{{pagedata.post.tags}}</span>
    </div>
</div>

<div class="row">
    <div class="col">
        <p class="text-dark">{{pagedata.post.content}}</p>
    </div>
</div>

{% endblock %}

然后在 views里添加一个 article视图:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# views.py
def article(request, title):
    post = Post.objects.filter(title=title).get()
    return render(
        request,
        'myblog/article.html',
        {'pagedata':
             {'post': post}
        }
    )

这里的 article视图接受一个从链接里提取出来的 title作为参数。

有了视图,我们再在 myblog应用里的 urls文件里添加文章的链接,修改如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# urls.py
from django.urls import re_path
from . import views


urlpatterns = [
    re_path(r'^index/{0,1}$', views.index),
    re_path(r'^article/\d{4,4}/\d{1,2}/(?P<title>.+)/{0,1}$', views.article),
]

这时访问 http://127.0.0.1:8000/index 会得到以下页面:

我们发现文章的标题变蓝了,这说明此时的标题已经是一个可点击的链接,我们试着点击一下:

到现在我们已经完成两个页面了,一个博客的基本功能都已经具备。

但是还是有一点问题,比如我们访问链接:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://127.0.0.1:8000/myblog/article/2018/7/我的第一条博客

可以正常访问,但是如果访问链接:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://127.0.0.1:8000/myblog/article/2018/7/我的第一条博客/

就会报错,显示页面不存在。

这是因为我们在链接的正则表达式: (r'^article/\d{4,4}/\d{1,2}/(?P<title>.+)/{0,1}$') 里使用了贪婪模式,在这个模式下链接最后的反斜杠也会被匹配到 title里去,这样一来数据库里就查不到对应的文章,在页面渲染的时候就会报错。

但是如果使用非贪婪模式的话就只能匹配第一个字符... ...

从上面的分析我们可以发现文章的标题并不适合作为链接里的参数,怎么办呢?

下一篇我们再来讲一讲怎么优化一下链接。

觉得我写得不错,关注、点赞、评论来一套吧┗|`O′|┛ 嗷~~

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.07.30 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
宙心科技陈更新:基于SOC打造高性价比AI系统平台 | 镁客请讲
2013年第一次创业的时候,陈更新选择了手机方向,不过,彼时市场的机会已经所剩无几,这一次创业以失败告终。这之后的三个月,他们调研市场、分析总结各类行情,最终发现一点——智能硬件有很多机会。
镁客网
2018/08/16
5110
宙心科技陈更新:基于SOC打造高性价比AI系统平台 | 镁客请讲
高通发布骁龙飞行平台,降低无人机行业进入门槛
作为这个时代的智能手机芯片王者,高通并不满足于略显低迷的手机芯片业务。近几年,高通也在积极拓展更多具有前景的市场领域,比如可穿戴设备、机器人和物联网领域。 现在,高通也把目标瞄准了时下大火的一个领域——无人机。 高通宣布,为消费级无人机的普及推出高阶性能参考设计平台Qualcomm Snapdragon Flight(骁龙飞行平台)。 据悉,通过骁龙飞行平台,无人机厂商可以很容易地打造出自己的无人机方案。高通这一平台的推出有望大幅降低无人机的生产和设计门槛,甚至可能类似现在的手机市场,再也不存在门外汉一说。
镁客网
2018/05/25
6590
高通的无人机平台,是毒药还是解药?
年底了,要说今年的无人机市场有什么事情特别值得关注的话,那就是自拍无人机了。 先是零度的Dobby口袋无人机发布,体积小巧引起关注,但是在拍摄和操控方面有所妥协;后是零零无限的HoverCamera未
机器人网
2018/04/24
9640
高通的无人机平台,是毒药还是解药?
AI安防芯片的悲观主义者:芯片领域只有第一第二
芯片领域有个二元法则:每一个细分领域只有前两名能够“健康”生存,第三、第四名就只能夹缝求生。
AI掘金志
2019/08/29
4770
AI安防芯片的悲观主义者:芯片领域只有第一第二
中国为什么不受发达国家待见?还得从无人机说起
中国为什么不受发达国家待见? 原因很简单,因为中国是一个奋力向上的国家,尤其是无人机领域: 在过去的100年里面,由欧美澳日组成的发达国家俱乐部只不过迎来了四小龙和以色列五个新成员,总人口加起来9
机器人网
2018/04/25
1.5K0
中国为什么不受发达国家待见?还得从无人机说起
高通加大5G应用力度:发布又一款手机芯片,还推出机器人和无人机5G系统
今天,高通推出了一个可用于机器人和无人机的5G系统——RB5。而就在昨天,刚发布又一款手机芯片骁龙690。
量子位
2020/06/24
5840
华为、苹果、高通,谁在领跑?全面解读清华AI芯片报告(附下载)
2010 年以来,由于大数据产业的发展,数据量呈现爆炸性增长态势,而传统的计算架构又无法支撑深度学习的大规模并行计算需求,于是研究界对 AI 芯片进行了新一轮的技术研发与应用研究。 AI 芯片是人工智能时代的技术核心之一,决定了平台的基础架构和发展生态。
IT阅读排行榜
2018/12/26
1.5K0
2016年自拍无人机的三大阵营之争,谁会死在沙滩上?
高通与无人机厂商零度智控合作的新闻余温未消,近期又爆出与大唐联手,并带上了大疆的消息,在无人机圈掀起了不小的波澜。更有行业媒体言之凿凿地说,大疆也将推出小型自拍无人机。智能芯片为手机带来的改变有目共睹,如今手机能做得越来越薄、更加高配和智能,全都得益于智能芯片。而无论是零度智控还是大疆,都早有将智能芯片应用于无人机的做法。如此看来,着手小型自拍无人机消费领域,应该早已在大疆日程之中了。 讲到这里,不得不说一下前文中曾提到的国内另一家实力可与大疆匹敌的无人机厂商——成立于2007年的零度智控。在近期结束的CE
机器人网
2018/04/23
5320
2016年自拍无人机的三大阵营之争,谁会死在沙滩上?
品物 | 今年无人机领域最大的惊喜,其实是个“蛋”
消费级无人机新品的推广,总是宣传片先行。继 Hover Camera 之后,外形独特的蛋形无人机 PowerEgg,成为今年又一个受到业界关注的宣传片主角。它的出品方为北京的臻迪集团,此前这家公司的主营业务面向电力巡检、地理测绘等商用市场,在消费级市场几乎没有发声。 “不反人类的遥控器” 【GIF图截取自 PowerEgg 宣传片】 2016年7月底,臻迪集团创始人兼CEO郑卫锋在他的办公室,向唯物展示了使用手机拍摄的“蛋形无人机”数分钟试飞视频。视频中,郑卫锋操作无人机使用的遥控器比较特殊
AI研习社
2018/03/29
7170
品物 | 今年无人机领域最大的惊喜,其实是个“蛋”
每个时代都有创世者,谁创造了 AI 时代?
从12年前英特尔原CEO保罗·欧德宁对智能手机芯片商业潜力的不屑,而将乔布斯拒之门外,再到游戏显卡市场常年被芯片巨头的战略忽视。边缘化市场于垄断者而言,是提高平均生成成本、拉低利润率的拖后腿业务,人人避而远之。
AI掘金志
2019/09/16
5600
每个时代都有创世者,谁创造了 AI 时代?
无人机平民化,大疆遭遇“口袋”革命?
文/腾讯科技 卜祥 王潘 11月20日中午,北京下起了小雨,风不大,在中关村软件科技园外,杨建军和一名工程师站在大楼门口的空旷草坪前,通过手机操作,一会儿把一个银色的带有四支螺旋桨的小飞机推向远方20米外的空中,一会儿又拉到近前1.5米处。那名工程师靠近无人机时,两块舒肤佳香皂大小的无人机会自动后退;工程师后退,无人机会自动跟着靠前。 “这用了初步的人脸自动识别功能”,杨建军介绍。而在刚才推远拉近过程中,小无人机已经录制了一段视频,直接可以用手机播放。对于整个测试过程,杨建军大体满意。他向工程师提出了一
机器人网
2018/04/23
9050
无人机平民化,大疆遭遇“口袋”革命?
国产飞控外国”芯“,国内无人机产业终将被西方超越?
现在的科技行业,每过几年就有那么几类产品被推上风口,引来资本的竞相追逐。虽然不可否认的是,其中很多产品都是直击需求的现象级产品,但鱼龙混杂之间,也不乏一些滥竽充数,噱头十足但没有实际用途的产品。 被风口吹起来是一回事,能飞多久是另一回事,有不少厂商虽然一时飘得高,但最后也难免摔得粉身碎骨。 而无人机行业经过这些年的闹腾,眼球吸引了不少,融资融了不少,虽然一个个口号喊得震天响,但是真能靠卖产品赚填满腰包的还是只有大疆一家。现在看来,无人机的当初的爆红还真有那么一丝「无中生有」的感觉。 大疆的孤军奋战 按理说,
机器人网
2018/04/25
1.4K0
国产飞控外国”芯“,国内无人机产业终将被西方超越?
一周AI看点 | 谷歌AI工程师说五年内实现人机对话,能实现吗;NASA开发AI竞赛无人机要挑战人类职业玩家,无需外部定位技术
本期一周AI看点包括行业热点、投融资、业界观点、技术前沿以及应用等方面。 01 行业 NASA开发AI竞赛无人机,欲挑战人类职业玩家 近日,NASA喷气推进实验室(Jet Propulsion Laboratory)在一场演示中,让自主无人机与专业无人机竞赛玩家控制的无人机对决,穿过充满障碍物的赛道。 这是一架完全自主飞行的AI无人机,不需要外部定位技术,也不需要用外置计算机控制。AI无人机用高通骁龙Flight主板对飞机进行实时控制。无人机安装了两个广角摄像头,可以自己为路线绘制3D地图。一个摄像头指
AI科技大本营
2018/04/27
1.3K0
一周AI看点 | 谷歌AI工程师说五年内实现人机对话,能实现吗;NASA开发AI竞赛无人机要挑战人类职业玩家,无需外部定位技术
中国无人机或走手机业老路 低端货充斥市场
港媒称,商用无人机全球市场或许正走上智能手机业的老路,因为中国供应商之间的竞争加剧。据香港《南华早报》3月3日报道,深圳市大疆创新科技有限公司 (简称DJI大疆创新)是全球民用无人机最大的供货商,目前它正考虑领先中国竞争对手一步,率先发布更先进更方便消费者的产品。 报道称,DJI大疆创新首席执行官汪滔3月1日在美国发布了这款该公司最新型的无人机时说:“精灵4开启了一个全新时代,让初学者也可以自如操控无人机。” DJI大疆创新精灵系列最新产品——大疆精灵Phantom 4是为无人机航拍业余爱好者打造的,它引入
机器人网
2018/04/23
5750
无人机核心芯片及器件产业大盘点
在无人机领域,大疆等中国的无人机企业也或多或少的感受到了危机,华为尚且能够自研芯片,但是无人机企业的CPU等核心芯片器件基本由国外供应,那无人机方面依赖国外的核心芯片和器件有哪些呢?我们来进行一个全面的大盘点。
机器人网
2020/06/12
3K0
火星无人机同款技术全部公开!高通还特意给Plus了一下
萧箫 发自 凹非寺 量子位 报道 | 公众号 QbitAI 还记得抵达火星的首架无人机“机智号”吗? 搭载高通平台的它,不仅完成了原计划的5次火星飞行任务,还将任务次数提升到了11次! 在火星上,无人机起飞条件比地球更困难,大气密度、音速、温度都比地球低,但高通不仅用技术hold住了,还帮助“机智号”超额完成了任务。 现在,这些技术不仅被高通全部公开,甚至还有了处理器升级、同时搭载5G+AI的“升级版本”。 就在刚刚,高通发布了Flight RB5 5G平台,这是全球首个有AI和5G技术加持的无人机平台。
量子位
2023/03/10
3430
火星无人机同款技术全部公开!高通还特意给Plus了一下
“围攻”升级!华为“备胎计划”遭横祸,源头供应商ARM挥刀斩合作
不好的事情一波接一波,针对中国公司的“断供”行动一直在继续。而且意料之外的,这次是英国。
镁客网
2019/05/23
6050
高通华为恩仇录
本文转载自微信公众号:周天财经(ID:techfinsight),作者:依萌,编辑:王复叶,镁客网经授权进行转载。
镁客网
2019/05/14
7970
高通华为恩仇录
电子眼+无人机构建平安城市视频防控监控方案
电子眼(也称为监控摄像机)可以通过安装在城市的不同角落,实时监控城市的各个地方。它们可以用于监测交通违法行为、监控公共场所的安全以及实时监测特定区域的活动情况。通过电子眼的应用,可以帮助警方及时发现并响应各类安全事件。
TSINGSEE青犀视频
2023/12/08
3320
半导体老牌贵族做不好的移动处理器,为什么华为、高通可以无往不利
如今高通、海思、三星、联发科以及展锐,圈出了各自的一亩三分地,并且以5G为中心,展开新一轮的竞争。
镁客网
2019/06/20
9230
半导体老牌贵族做不好的移动处理器,为什么华为、高通可以无往不利
推荐阅读
宙心科技陈更新:基于SOC打造高性价比AI系统平台 | 镁客请讲
5110
高通发布骁龙飞行平台,降低无人机行业进入门槛
6590
高通的无人机平台,是毒药还是解药?
9640
AI安防芯片的悲观主义者:芯片领域只有第一第二
4770
中国为什么不受发达国家待见?还得从无人机说起
1.5K0
高通加大5G应用力度:发布又一款手机芯片,还推出机器人和无人机5G系统
5840
华为、苹果、高通,谁在领跑?全面解读清华AI芯片报告(附下载)
1.5K0
2016年自拍无人机的三大阵营之争,谁会死在沙滩上?
5320
品物 | 今年无人机领域最大的惊喜,其实是个“蛋”
7170
每个时代都有创世者,谁创造了 AI 时代?
5600
无人机平民化,大疆遭遇“口袋”革命?
9050
国产飞控外国”芯“,国内无人机产业终将被西方超越?
1.4K0
一周AI看点 | 谷歌AI工程师说五年内实现人机对话,能实现吗;NASA开发AI竞赛无人机要挑战人类职业玩家,无需外部定位技术
1.3K0
中国无人机或走手机业老路 低端货充斥市场
5750
无人机核心芯片及器件产业大盘点
3K0
火星无人机同款技术全部公开!高通还特意给Plus了一下
3430
“围攻”升级!华为“备胎计划”遭横祸,源头供应商ARM挥刀斩合作
6050
高通华为恩仇录
7970
电子眼+无人机构建平安城市视频防控监控方案
3320
半导体老牌贵族做不好的移动处理器,为什么华为、高通可以无往不利
9230
相关推荐
宙心科技陈更新:基于SOC打造高性价比AI系统平台 | 镁客请讲
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验