Django 学习 Blog 实操 06 --- 博客详情页,提取页面模板

一、本次任务

  • 可以跳转博客详情页
  • 学习页面模板语法

二、思路梳理

根据前端用户的操作,看后端如何串起来流程。作者用的是后面一种,亲测第一种逻辑是可行的。
流程梳理图

blog/models.py

增加获取url方法get_absolute_url(),这里的 detail 对应的是 url path 中的name属性的值。
get_absolute_url()

blog/urls.py

  • 视图函数命名空间:app_name = 'blog'
  • 配置访问博客详情页 path('blog/detail/<int:pk>/', views.detail, name='detail')
  • 注意:不写 app_name = 'blog'报错:
    不写 app_name 报错

blog/views.py

函数 detail()
注意:get_object_or_404()方法中参数传递的问题,pk=pk, 如果只写 pk 报错:

页面视图

templates/blog/index.html

  • 把博客的 title 和继续阅读改成详情页的地址
  • 两种写法都可以实现点击进入详情页的
    <a href="{{ post.get_absolute_url }}">{{ post.title }}</a>
    <a href="blog/detail/{{ post.pk }}">{{ post.title }}</a>
    

templates/blog/detail.html

  • 由博客模板的single.html 改名后得来,修改固定值为从取值

代码简洁之道:提取页面模板 base.html

  • 提取页面中公共的部分,写成 base.html,其他页面中引入就行,减少修改 css,js的路径问题,提高效率。
<!--  在 base.html 中不同的地方用模板代替,占位而已 -->
<main class="col-md-8">
    {% block main %}
    {% endblock main %}
</main>
<aside class="col-md-4">
  {% block toc %}
  {% endblock toc %}
  ...
</aside>
<!-- 引入公共的部分到 detail.html -->
{% extends 'base.html' %}

models.py 没有需要同步到数据的,所以不需要执行数据迁移命令。

三、提出问题

  • urls.py 中的 path 的name什么意思?
    • 测试发现,这里的name是一个别名吧,如果哪里需要用到地址,就是使用这个name找到的。
  • 直接链接 url 跟方法不可以吗,为什么非要多一步 get_absolute_url()?

附上 Gitee 地址:https://gitee.com/langxing/HelloDjango-blog-tutorial

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sapphire~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值