Django学习之旅(六)自定义URL规则(博客详情页)

本篇博客同样参照追梦人物老师的博客详情页课程,记录自己的学习过程。本篇博客的重点在于自定义URL规则的使用。

整体结构

-- urls模块中自定义URL --- 从访问路径中获取参数pk

-- 配置视图函数 --- 从urls模块中获取到参数pk,并在视图函数中使用

-- 模型中定义类的get_absolute_url()方法 --- 根据视图函数,并传入参数,解析对应视图函数的url。

-- 在模板html文件中,使用类的get_absolute_url()方法 --- 根据不同的点击,得到不同的url,访问不同的内容。

自定义带参的URL

在blog/urls.py中新增

path('posts//', views.detail, name='detail')

blog/urls.py文件整体变为

from django.urls import path
from . import views

app_name = 'blog'  # 告诉程序,当前的url模块属于哪个应用,此处是blog应用  ---  试图函数命名空间

urlpatterns = [
    path('', views.index, name='index'),
    path('posts//', views.detail, name='detail')
]

其中 app_name = 'blog' 告诉程序,当前的url定义属于blog应用;

新增path行第一个参数为新增的相对访问路径:posts/ n/ ,前缀的域名不需要添加。其中表示路径中的 poosts/ 后需要一个int类型的参数pk,任何符合的int类型的数据都可匹配上。

第三项name='detail'表明该视图函数的别名,在Reverse函数中解析URL时会用到。

编写视图函数

def detail(request, pk):
    post = get_object_or_404(Post, pk=pk)  # 系统定义的pk是关键
    return render(request, 'blog/detail.html', context={'post': post})

编写自定义URL对应的视图函数,因为定义的url自带参数,因此在该视图函数中可以使用访问路径中携带的参数pk。

涉及的一个函数: get_object_or_404(Post, pk=pk),表示从数据库中查找满足参数pk=pk的Post类对象,如果不存在则返回404页面错误。

模型中的get_absolute_url方法

为模型添加get_absolute_url方法,便于调用模型进行url解析

from django.urls import reverse  # 域名解析函数    
def get_absolute_url(self):
    # 解析视图函数detail的URL,参数pk其值为self.pk
    return reverse('blog:detail', kwargs={'pk': self.pk})   

 reverse函数:知道视图函数,反转回其url。

其中第一个参数表示视图函数,格式为 "命名空间:别名",别名在定义url中确定。

第二个参数表示视图函数中的参数,不同的视图函数参数,对应不同的url。此处将当前对象本身的pk作为参数传入。因此get_absolute_url函数不需要额外的参数。

在模板中使用带参的url

{% for post in post_list %}
                    ..............
                
                     ..............
{% endfor %}

当点击不同Post对象的 标题 “继续阅读” 时,会调用对应的get_absolute_url()方法。

解析得到对应的detail视图函数的url,从而访问对应的视图函数。

detail视图函数会返回文章的详情页面。

模板中的占位框

如果多个模板只有少部分不同,其余部分的都是相同的。那么可以将不同的部分用占位框表示,将多个模板抽象为一个基目标。

base.html

 ....共用部分....

{% block main %} {% endblock main %}
....共用部分.... ....共用部分....

其中

{% block main %}
{% endblock main %}

称为占位框,在基模板中预占空间,各子模板继承后进行填充。

{% extends 'base.html' %}

{% block main%}

....子模板内容....

{% endblock main%}

子模版通过{% extends 'base.html' %}基础基模板内容,并在占位框中填充自己的内容。

全部模板内容

templates/base.html



{% load static %}

    Black & White

    
    
    

    
    
    
    
    

    
    
    
    
    





Collect from 网页模板
{% block main %} {% endblock main %}

templates/blog/detail.html

{% extends 'base.html' %}

{% block main%}
                
                

发表评论

评论列表,共 4 条评论

  • 追梦人物
    文章观点又有道理又符合人性,这才是真正为了表达观点而写,不是为了迎合某某知名人士粉丝而写。我觉得如果琼瑶是前妻,生了三孩子后被一不知名的女人挖了墙角,我不信谁会说那个女人是追求真爱,说同情琼瑶骂小三的女人都是弱者。
  • zmrenwu
    本能有可能会冲破格局,但格局有时候也会拘住本能。
  • 蝙蝠侠
    其实真理一般是属于沉默的大多数的。那些偏激的观点只能吸引那些同样偏激的人。前几年琼瑶告于妈抄袭,大家都表示大快人心,说明吃瓜观众都只是就事论事,并不是对琼瑶有偏见。
  • 长江七号
    观点我很喜欢!就是哎嘛本来一清二楚的,来个小三小四乱七八糟一团乱麻夹缠不清,简直麻烦要死
{% endblock main %} {% block toc %} {% endblock toc %}

templates/blog/index.html

{% extends 'base.html' %}

{% block main%}
{% for post in post_list %}
                

                {% empty %}
                
暂时还没有发布的文章!
> {% endfor %} {% endblock main%}

你可能感兴趣的:(学习)