模板的继承,url的反向解析,静态文件的处理,分布式路由,应用的创建,使用

模板的继承

子类可以继承父类模板,并将其进行重写
不重写就按照父类模板中的内容进行输出
重写就按照重写内容中的标签输出


注:动态传入父类中的数据,子类是无法访问的,也加载不到对应的数据到页面中,即使继承了父类的内容

语法,在父类中

1.可能被子类继承的标签放在block中

{% block block_name %}

{% endblock %}
2.继承后不允许修改的标签不要使用block进行包括


语法,在子类中

1.第一行就要确认继承的父类的html
{% extends ‘father.html’ %}
2.重用父类中的标签要使用{% blockblock_name %}来定位到指定的标签

{% block block_name %}
修改父类中的标签的内容
{%endblock %}


这是父类的html文件,名称为home_view.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
  {% block mytitle %}
    <title>首页</title>
  {% endblock %}
</head>
<body>
<a href="/home_index">首页</a>
{% block url %}
<a href="/music_index">音乐频道</a>
<a href="/sport_index">体育频道</a>
{% endblock %}
<br>
{% block text %}
<p>这是首页</p>
{% endblock %}
<br>
<br>
<br>
<br>
<br>
<p>有事请联系xxxx</p>
</body>
</html>

这是两个子类的html,名称为music.htm和sport.html
{% extends 'home_view.html' %}

{% block mytitle%}
<title>体育频道</title>
{% endblock %}

{% block url %}
<br>
{% endblock %}

{% block text %}
<p>欢迎来到音乐频道</p>
{% endblock %}

{% extends 'home_view.html' %}

{% block mytitle%}
<title>体育频道</title>
{% endblock %}

{% block url %}
<br>
{% endblock %}

{% block text %}
<p>欢迎来到体育频道</p>
{% endblock %}

在将其对应的函数和访问路由加入到urls.py中
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

URL反向解析

绝对地址,和相对地址

当a标签中传入href=以’/‘开头,说明是相对地址,指在主路由后面进行拼接
当不传入’/‘时,会在当前url中向前寻找一个’/‘然后将其进行拼接原来的’/'后面的参数就不会留下


也可以在html文件中传入 {% url ‘别名’ ‘参数’ %}
在url.py中设置path
path(‘url’,views.func,name=‘别名’)进行url的反向解析

例如

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>测试url</title>
</head>
<body>
<a href="http://127.0.0.1:8000/First_text_url">绝对地址</a>
<a href="/text">带有'/'的url</a>
<a href="text">不带'/‘的url</a>
<br>
<a href="{% url 'br' %}">url的反向解析</a>
</body>
</html>

    path('First_text_url',views.First_text_url,name='br'),// 显示这里是绝对地址
    path('text_url/url',views.text_url)显示有4个链接的页面

这个是绝对地址的url

在这里插入图片描述


这个是4个链接的url

在这里插入图片描述


这个是加上'/'的url,返回主路由地址加上text的拼接地址

在这里插入图片描述


这个是不加'/'的url,针对于127.0.0.1:8000/text/url这个地址向前面寻找第一个'/'将text拼接在后面

在这里插入图片描述


这个是反向解析的url,因为传递了参数,相当于起了别名,将br传入html文件中的url过滤器中,就可以将对应的路由地址进行拼接

在这里插入图片描述
也可以进行参数的传递


<a href="{% url 'tr' '100' %}">传参的url反向解析</a>

def text_url(requests,age):
    return render(requests,'text_url.html')

    path('text_url/url/<int:age>',views.text_url,name='tr')

在这里插入图片描述

也可以在视图函数中调用django中的reverse方法来实现url反向解析

def First_text_url(requests):
    # html = '这里是绝对地址的网页'
    # return HttpResponse(html)
    from django.urls import reverse
    url = reverse('home_index')
    return HttpResponseRedirect(url)

向http://127.0.0.1:8000/First_text_url这个网页发送请求会报302跳转到http://127.0.0.1:8000/home_index这个网页,原因是在reverse中传入了一个别名

    path('home_index',views.home_index,name='home_index'),

这个别名就是home_index对应的path下的别名

静态文件的处理

首先要在settings中配置静态文件的访问路径[该配置默认存在]
STATIC_URL = ‘/static/’
当django得到一个url中含有/static/的请求,则会到默认访问路径中去加载对应的静态文件
例如:127.0.0.1:200/static/xxx(xxx为静态文件的访问位置)
配置路径的方法在settings文件中创建一个叫STATICFILE_DIRS的元组

STATICFILES_DIRS = (
    os.path.join(BASE_DIR,'static'),
)

然后再当前项目下创建一个名叫static的文件夹
可以在static文件夹下面创建子目录
下面利用模板写一个加载静态问文件的路由

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Image的显示</title>
</head>
<body>
<img src='http://127.0.0.1:200//static/images/1.jpg' height="200px" width="200px">
<img src="/static/images/1.jpg" height="200px" width="200px">

</body>
</html>

这里是相对地址,访问绝对路由下的/static/说明,框架要加载static目录下的images/1.jpg文件
在这里插入图片描述

文件加载成功

也可以使用django内置的{% static ‘path’ %}来加载图片
在使用之前要加载一下

{% load static %}

{% load static %}
<img src='http://127.0.0.1:200//static/images/1.jpg' height="200px" width="200px">
<img src="/static/images/1.jpg" height="200px" width="200px">
<img src="{% static 'images/1.jpg' %}" height="200px" width="200px">

在这里插入图片描述
在这里插入图片描述
这是网页的源代码
第三中使用django内置的方式是动态的方法,其相对于网页的加载更加温和
即如果想改变获取静态文件的方式将/static/该为/abc/前两这就会拿不到数据,而最后以个可以动态的获取数据,但要在settings文件中更改一下STATIC_URL的值,其默认为/static/

STATIC_URL = '/abc/'

则网页源代码中前两者还是原来的地址,而最后一个是改变后的地址,但是文件夹中不含有abc的文件,这样就显示了动态性质
在这里插入图片描述

django的分布式路由

一个网站可能含有多个模块,所有的视图函数都在views里面的话,后期的修改和管理会很麻烦,所以django提供了一个应用的模块
什么是应用
应用是在django项目中的独立的业务模块,可以包含自己的路由,视图和模板,模型

应用的创建

启动命令: python manage.py startapp [应用名]
自己创建的一个应用需要在settings中的INSTALLED_APPS 添加

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'music'# 自己创建的应用要加入到INSTALLED_APPS中
]

应用的目录
创建的app目录下有如下的文件
在这里插入图片描述

migrations:是模型层,用于和数据库连接的操作
admin:是用户,管理后台相关
apps:应用下的相关配置
models:模型层的代码实现在这个文件中
textes:专门用来测试的入口
views:视图函数的实现入口

django中,主路由配置可以不处理具体的路由,他可以做请求的分发,具体的请求可以由各自的应用进行处理
在这里插入图片描述
假如URL为/news/的请求一律交给news的应用来处理
url为/music/的请求交给music的应用来处理
配置分布式路由
在主路由中调用include函数
语法include(‘app_name.url模块的名字’)
例如

path('music/',include('music.urls')# 在使用include时要导入include模块,其在django.urls这个包当中
# 格式一定不能出错,前面的一定是应用名加/不能再两边都加上/也不能只在左边加上/

当url中出现/musci是会将请求发送给music的应用
要在music中创建一个urls.py的模块,内容要和主路由的初始状态一致
即要导入 dajango.urls中的path模块
和当前文件夹下的视图views模块


from django.urls import path
from . improt views


urlpatterns = [
    path('text_01/', views.text_01),
]

要在视图函数中实现text_01的函数

实例:

创建两个应用: sport和learn

在这里插入图片描述

将两个应用加到主路由当中去

在这里插入图片描述

在两个应用中创建urls.py文件,并将urlpatterns写入文件中

from django.urls import path
from . import views

urlpatterns = [
    path('text_01',views.text_01)

]

在views文件中实现函数的操作

在这里插入图片描述

写一个主页的函数,然后将html文件render一下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>主页</title>
</head>
<body>
<a href="/music/text_01">音乐主页</a>
<a href="/sport/text_01">体育主页</a>
<a href="/learn/text_01">学习主页</a>
</body>
</html>

在这里插入图片描述
在这里插入图片描述

操作完成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值