模板语法
本质上就是通过在html中写一些占位符, 由数据对这些占位符进行替换和处理.
1\\列表的传参:
在views中,通过render来传参"n2":
def tpl(req):
name = "小A"
list = ["n1n1", "n2n2n2", "n3n3n3n3", "n4n4n4n4n4n4"]
zidian = {"name": "lisann", "num": "365", "salary": "1000000"}
return render(req, "tpl.html", {"n1": name, "n2": list, "n3": zidian})
在html中,通过{{n2}}来接受n2:
<div>{{ n1 }}</div>
{% for it in n2 %}
<span>{{ it }}</span>
{% endfor %}
在这里我做了一个循环来展示列表, 展示效果如下
顺便提一嘴html中换行占位符是"<br>"不需要尾巴, 直接换行, 方便的很
2\\字典的传参
例:views中看n3:
def tpl(req):
name = "小A"
list = ["n1n1", "n2n2n2", "n3n3n3n3", "n4n4n4n4n4n4"]
zidian = {"name": "lisann", "num": "365", "salary": "1000000"}
return render(req, "tpl.html", {"n1": name, "n2": list, "n3": zidian})
html端:
{% for a,b in n3.items %}
<span>{{ a }} = {{ b }}<br></span>
{% endfor %}
提一嘴:字典.items = 二者.
<外>刚刚学到一个快捷键很方便, ctrl+D=快速复制本行到下一行.
例:列表套字典的表达(主要看n4):
(基础不扎实的我的感叹:原来列表可以嵌套字典, 那字典可以嵌套列表吗?)
views:
def tpl(req):
name = "小A"
list = ["n1n1", "n2n2n2", "n3n3n3n3", "n4n4n4n4n4n4"]
zidian = {"name": "lisann", "num": "365", "salary": "1000000"}
liebiaotaozidian = [
{"name": "lisann", "num": "365", "salary": "1000000"},
{"name": "ousann", "num": "36", "salary": "1000001"},
{"name": "tyousann", "num": "5", "salary": "1000002"}
]
return render(req, "tpl.html", {"n1": name, "n2": list, "n3": zidian,"n4": liebiaotaozidian} )
html:
{% for kk in n4 %}
{% for a,b in kk.items %}
<div>{{ a }} = {{ b }}<br></div>
{% endfor %}<br>
{% endfor %}
效果如下:
另外, html中还可以使用if等语句:
{#html中还可以用if语句:#}
{% if n1 == "name" %}
<h1>n1 == name</h1>
{% elif n1 == "na" %}
<h1>n1 == na</h1>
{% else %}
<h1>else</h1>
{% endif %}
试了一下, 成了, 开心
再强调一下, 这个模板语法是Django开发的, 所以这里的html不是纯净的html,
项目实例__联通新闻(阿爬~)
# 定义一些新闻,构造一些字典或列表 或去数据库查询 通过爬虫网络请求,爬联通现成的新闻
# request url:http://www.chinaunicom.com.cn/api/article/NewsByIndex/2/2023/04/news
# 向以上地址发送请求, 用第三方模块:requests, 并非Django里的request, 是两个概念
# 要安装requests:用pip install requests
pip么就是win+R然后cmd, 直接往里输入pip install requests, 真的非常方便, 能这样做的原因是因为python在系统里添加了path
应该是看到successfully了就算成功了.
<外>当浏览器向网站发送请求的时候,可以发送get/post请求, 也可以发送传递一些数据
def sth(req):
# req是一个对象,封装了用户通过浏览器发送过来的所有请求相关的数据
#.method 是 查询用户请求方式
print(req.method)
return render(req , "sth.html")
当你在浏览器上输入网址, 点下回车, 这是以 get方式 发送过来的请求
之后还会学习如何使用post方式发送回请求
用户可以通过在url后面加?加数据来传递参数, 那么如何获取这种参数呢?
案例:用户登录
HTML中input框 type=“submit” 和 type="button"有什么不同?
一、元素定义类型的区别:
1、<input type="button /> 定义为一个可点击的按钮。
2、<input type="submit /> 定义为一个提交按钮。提交按钮会把表单数据发送到服务器。
二、点击触发动作的区别:
1、<input type="button /> 如果没有添加onclick事件的监听,点击时没有任何反应。
2、<input type="submit /> 默认情况下,点击后会执行提交form表单的动作。
册那, 差不多得了, 自己写点东西才发现写东西确实是需要不少时间的, 也是需要耗费一些精力的, 等一个项目写完了直接铺代码上来这样效率来的高得多.
views:
def login(req):
if (req.method == "GET"):
return render(req, "login.html")
elif (req.method == "POST"):
print(req.POST)
# 进行校验
username = req.POST.get("username")
password = req.POST.get("pswd")
if(password == "123"):
return HttpResponse("登陆成功QWQ")
else:
# return HttpResponse("失敗したTAT")
return render(req, "login.html", {"tata":"wotyou"})
# tata是隐藏信息, 只有在登录失败后才传过去的参数,传了这个tata参数才会显示你想说的话
html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form method="post" action="/login/">
{% csrf_token %}
<input type="text" name="username" placeholder="在此输入您的用户名">
<input type="text" name="pswd" placeholder="在此输入您的密码">
<input type="submit" value="lololo"> {{tata}}
{#tata是隐藏信息, 只有在登录失败后才传过去的参数,传了这个tata参数才会显示你想说的话}
</form>
</body>
</html>
总而言之挺成功的,一步一步来学到了很多,登录是做出来了,涉及到html的部分有点懵懂, 对表单能直接点submit就发送了POST有点迷糊,数据也不知道是怎么生成的, 总而言之, 写给自己:加油!