1、在django关于模板文件加载顺序
创建的django项目下会有一个seeetings.py的文件
- 如果在seeetings.py 中加了 os.path.join(BASE_DIR,‘templates’),如果是pycharm创建的django项目会加上,就会默认先去根目录找templates目录下的html文件,之后在去注册的app中找,按照app注册的顺序;
- 如果在seeetings.py中没有 os.path.join(BASE_DIR,‘templates’) 这个配置, 就不会去根目录寻找,只会去注册的app中找templates目录,按照app注册顺序。
2、静态文件
静态文件包括:
- 图片
- js
- css
- 插件
都会当做静态文件处理。
需要在app目录下创建static目录,
app01|---static|---js|---css|---img|---plugins
比如在urls.py 有路径
from django.urls import pathfrom app01 import views
urlpatterns = [path('index/', views.index),]
在views.py 中增加函数
from django.shortcuts import render, HttpResponse
# Create your views here.def index(req):return render(req,"index.html")
在app 目录下的templates目录创建index.html的文件
在index.html 文件中引入静态文件
django引入静态文件也可以像flask一样,写上静态文件的路径,但是django推荐使用下面这种,先把static目录加载进来,后面再引用,也就是相当于使用相对路径一样。静态文件的目录static是可以设置的,万一需要修改的时候只要改{% load static %}这个就全部替换,而不需要一个一个连接去修改
{% load static %}<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><link rel="stylesheet" href="{% static 'plugins/bootstrap-3.4.1/css/bootstrap.css' %}">
</head>
<body>
<h1>用户列表</h1>
<img src="{% static 'img/1.png' %}" /><input type="text" class="btn btn-primary" value="新建"/>
<script src="{% static 'js/jquery-3.7.0.min.js' %}"></script>
<script src="{% static 'plugins/bootstrap-3.4.1/js/bootstrap.js' %}"></script>
</body>
</html>
启动django 项目访问页面 访问:http://127.0.0.1:8000/index/
图片可以读取到
3、模板语法
本质上:在HTML中写一些占位符,由数据对这些占位符进行替换和处理。
- 通过函数值传到html中,在html中显示单个字段
在返回的时候通过字典传值,{key:变量名}, 在html中通过{{ }}这个占位符,在中间写上key 值
- 循环展示
通过 {% for item in n2 %}
中间写标签
{% endfor %}
这样就可以根据item值的个数来循环创建标签
- 如果是列表或是字典,通过点来获取值
- 支持根据条件显示
值为True就会执行该条件下的标签
模板语法的流程:
案例:
1、在urls.py 加上路径
from django.urls import pathfrom app01 import views
urlpatterns = [path('tpl/', views.tpl),]
2、在views.py 中增加函数
from django.shortcuts import render, HttpResponse
import requests
# Create your views here.def tpl(req):headers = {"Content-Type": "application/json;charset=UTF-8","User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"}res = requests.get("http://www.chinaunicom.com.cn/api/article/NewsByIndex/2/2023/06/news",headers=headers)data_list = res.json()print(data_list)return render(req,"tpl.html",{"new_list":data_list})
3、在templates增加一个tpl.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><h1>新闻中心</h1><ul>{% for item in new_list %}<li>{{item.news_title}}</li>{% endfor %}</ul>
</body>
</html>
http://127.0.0.1:8000/tpl/ 效果:
4、请求和响应
在views.py 的函数中传入的request参数是一个对象,封装了用户发送过来的所有请求相关数据
def dosomething(request):#request是一个对象,封装了用户发送过来的所有请求相关数据#1、获取请求方式,GET/POSTprint(request.method)#2、在URL上传递值 /something/?n1=123&n2=999print(request.GET)#3、在请求体中传递数据print(request.POST)#4、响应 HttpResponse("返回内容"),内容字符串内容返回给请求者。#return HttpResponse("返回内容")#5、响应读取HTML的内容 + 渲染(替换) ->字符串,返回给用户浏览器#return render(request,'something.html',{"title":"你好"})#6、响应,让浏览器重定向到其他的页面,需要导入redirect模块return redirect("https://www.baidu.com")
重定向的时候,浏览器向Django发起请求,Django把重定向的地址返回给浏览器,然后浏览器在自己去请求重定向后的网站