Django搭建个人博客之如何编写文章
编写视图函数
打开article/views.py
,增加文章详情页面的视图函数article_detail()
:
article/views.py...# 文章详情
def article_detail(request, id):# 取出相应的文章article = ArticlePost.objects.get(id=id)# 需要传递给模板的对象context = { 'article': article }# 载入模板,并返回context对象return render(request, 'article/detail.html', context)
article_detail(request, id)
函数中多了id
这个参数。注意我们在写model
的时候并没有写叫做id
的字段,这是Django
自动生成的用于索引数据表的主键(Primary Key,即pk)。有了它才有办法知道到底应该取出哪篇文章。ArticlePost.objects.get(id=id)
意思是在所有文章中,取出id
值相符合的唯一的一篇文章。
然后编写article/urls.py,配置路由地址:
article/urls.py...urlpatterns = [...# 文章详情path('article-detail/<int:id>/', views.article_detail, name='article_detail'),
]
<int:id>:Django2.0
的path
新语法用尖括号<>定义需要传递的参数。这里需要传递名叫id的整数到视图函数中去。
重申一下老版本的Django
是没有path
语法的。
编写模板
在templates/article/
中新建detail.html
文件,编写如下代码:
templates/article/detail.html<!-- extends表明此页面继承自 base.html 文件 -->
{% extends "base.html" %}
{% load staticfiles %}<!-- 写入 base.html 中定义的 title -->
{% block title %}文章详情
{% endblock title %}<!-- 写入 base.html 中定义的 content -->
{% block content %}<!-- 文章详情 -->
<div class="container"><div class="row"><!-- 标题及作者 --><h1 class="col-12 mt-4 mb-4">{{ article.title }}</h1><div class="col-12 alert alert-success">作者:{{ article.author }}</div><!-- 文章正文 --><div class="col-12"><p>{{ article.body }}</p></div></div>
</div>{% endblock content %}
这里我们用{{ article.xxx }}
取出了文章标题、作者以及正文。
前面我们已经通过后台创建了几篇文章,这里将取出id为1的一篇文章测试效果。
运行开发服务器后,在浏览器中输入http://127.0.0.1:8000/article/article-detail/1/
:
优化网页入口
虽然已经实现了文章详情功能,但是通过输入url
访问的方式实在太不友好。
改写header.html
,让用户可通过导航栏右侧的文章链接返回首页:
templates/header.html...
<div><ul class="navbar-nav"><li class="nav-item"><!-- 改写了这里的 href --> <a class="nav-link" href="{% url 'article:article_list' %}">文章</a></li></ul>
</div>...
注意看这里href是如何改写的:
href定义了链接跳转的地址。
{% url '...' %}
是Django规定的模板解耦语法,用它可以根据我们在urls.py
中设置的名字,反向解析到对应的url中去。关于其中的
'article:article_list'
的解释:前面的
article
是在项目根目录的urls.py
中定义的app
的名称后面的
article_list
是在app中的urls.py
中定义的具体的路由地址
通过这样的方法就将链接跳转的指向给配置好了,只要对应url的名称不变,url
本身无论怎么变化,Django
都可以解析到正确的地址,很灵活。
当然你也可以直接在href
中写入url
的地址,但是一旦url
有变化,所有相关的链接都会失效,维护性不好。
然后再改写list.html
,让用户可点击阅读本文按钮进入文章详情:
...<div class="card-footer"><!-- 同样改写 href --><a href="{% url 'article:article_detail' article.id %}" class="btn btn-primary">阅读本文</a></div>...
留意文章的id是如何传递的:
- 在
list.html
中,通过href="{% url 'article:article_detail' article.id %}"
,将id
传递给article/urls.py
- 在
article/urls.py
中,通过<int:id>
传递给视图函数article_detail()
- 在视图函数
article_detail()
中,通过形参id
取得了文章的id
值,并进行处理,最终定位了需要获取的文章对象
现在我们可以通过链接访问网站上的不同页面了,而不需要手动输入url。当然这也是现代网站的基础。
总结
现在我们也拥有查看文章详情的功能了,并且优化了网页切换的体验。
下一章将学习使用Markdown语法对文章正文进行排版。
创作不易,点个赞吧!!
版权声明:如无特殊说明,文章均为本站原创,转载请注明出处
本文链接:https://blog.csdn.net/wsad861512140
Django搭建个人博客之如何编写文章相关推荐
- Django搭建个人博客:渲染Markdown文章目录
对会读书的人来说,读一本书要做的第一件事,就是仔细阅读这本书的目录.阅读目录可以对整体内容有所了解,并清楚地知道感兴趣的部分在哪里,提高阅读质量. 博文也是同样的,好的目录对博主和读者都很有帮助.更进 ...
- Django搭建个人博客:用django-notifications实现消息通知
凭借你勤奋的写作,拜读你文章的用户越来越多,他们的评论也分散在众多的文章之中.作为博主,读者的留言肯定是要都看的:而读者给你留言,自然也希望得到回复. 怎么将未读的留言呈现给正确的用户呢?总不能用户自 ...
- Django搭建简易博客
Django简易博客,主要实现了以下功能 连接数据库 创建超级用户与后台管理 利用django-admin-bootstrap美化界面 template,view与动态URL 多说评论功能 Markd ...
- 10分钟利用django搭建一个博客
以前老是听说ROR开发有多快多块,网上还有朋友为了证明这,专门制作了10分钟利用rails框架搭建一个简易博客的教程,最近学习django框架,觉得django给开发者的便捷也很多,心血来潮来写个10 ...
- django项目转pyc_Python自动化运维系列:Django搭建小博客
如何使用Django和Python怎么搭建一个小博客呢? 这是一个简单而困难的问题.简单的原因是,只要做过一次,基本上就能做到举一反三: 困难的原因是有没有用心和耐心去完成这个实验. 如果你成功了,那 ...
- 用django搭建个人博客(一)
用django2.0搭建个人博客 博客网站的需求与规划 该个人博客为简单的入门示范网站,具有以下功能 项目名称为mblog 通过admin管理界面发帖.编辑以及删除贴文,且此界面支持markdown语 ...
- Django搭建个人博客(二)
更换数据表mysql 上文说到编写好了我们的 model 模块,映射生成数据表,之前我们用的是Django 默认的数据库 sqlite3 ,这里我们更改一下使用 mysql. 我们在 navicat ...
- Django搭建简易博客教程(四)-Models
原文链接: http://www.jianshu.com/p/dbc4193b4f95 Django Model 每一个Django Model都继承自django.db.models.Model 在 ...
- Django搭建个人博客:上传头像图片
到目前为止我们的博客处理的都是文字.现代互联网早就进入了"读图"时代,图片的维护.展示也就相当重要. 上一章中预留了avatar字段,用来保存用户上传的头像,现在我们来实现这个功能 ...
最新文章
- unity发布安卓黑屏_Unity将携十余爆款新游和多个独立游戏亮相ChinaJoy 2020
- php 面向对象开发 类的学习 一
- django使用postgresql时提示主键冲突
- kali高速更新源以及主题修改方法
- html 显示代码块,使用Pre在文章中显示代码块 - 文章教程
- win32汇编入门(一)
- 数学无用论??我们欠孩子真正的数学阅读
- 如何实现服务器转发客户端消息,socket 怎么实现服务器与客户端不停的互发消息呢?...
- sealer背后实现整个集群一键交付的奥秘 | 龙蜥技术
- 如何看待不会写代码的架构师?
- 【java】输入球的半径,求出其体积
- 使用CSS 媒体查询功能满足不同屏幕分辨率要求
- TF2.0—tf.keras.layers.Lambda
- python做服务器需要什么模块_用Python自带的包建立简单的web服务器
- 工业机器人编程语言c语言,工业机器人编程语言和编程方式
- Android 音频系统:从 AudioTrack 到 AudioFlinger
- RHEL7配置中文输入法-智能拼音
- 快来直播:坦然面对东方甄选与股价跌宕起伏
- android backtrace,高通android q 通过backtrace使用addr2ine工具定位crash问题记录
- 文献管理软件Zotero配置及使用