一.Templates
当需要使用template模板页面时,Django不光会在当前app下查找Template文件夹下的模板文件,他会查找整个Django项目下的所有Template文件夹下的模板文件。
但如果两个不同app下有同名模板文件呢,为了避免这种情况:
在app下新建这样一段目录,将HTML文件都存放在此处,这样就不会出现查错的情况了
补充一下我们创建的这个html,改名成index.html吧,因为之前的view跳转就是跳的index
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<table border="1">
<tr>
<td>name</td>
<td>age</td>
</tr>
{% if login_list %}
{% for login in login_list %}
<tr>
<td>{{ login.name }}</td>
<td>{{ login.age }}</td>
</tr>
{% endfor %}
{% endif %}
</table>
</body>
</html>
然后要在view里获取所有的对象,因为这里的html页面要展示,这里的context是字典形式数据
def index(request):
# return HttpResponse('Hello World!')
login = Login.objects.all()
from django.template import loader
template = loader.get_template('login/index.html')
context = {
'login_list' : login
}
return HttpResponse(template.render(context,request))
注意在html里使用django的语法,如果是for 或者 if,就用{% %}来包裹,如果只是单纯的数据,用双括号{{}}就行。
view里的index函数还可以再简化一下,使用render方法,render方法里可以传递的几个参数可以自行搜索,render用到的频率非常高
def index(request):
# return HttpResponse('Hello World!')
# login = Login.objects.all()
# from django.template import loader
# template = loader.get_template('login/index.html')
# context = {
# 'login_list' : login
# }
# return HttpResponse(template.render(context,request))
login = Login.objects.all()
context = {
'login_list' : login
}
return render(request,'login/index.html',context)
二.定义一个详情页,然后跳转进入
跳转之前我写过:https://blog.csdn.net/qq_38175040/article/details/104684355
先定义一下url
然后去具体写detail函数
新建一个detail.html模板页面
在index页面里放入链接,点击链接跳转到detail页面,写法与我之前的博客类似
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<table border="1">
<tr>
<td>name</td>
<td>age</td>
</tr>
{% if login_list %}
{% for login in login_list %}
<tr>
<td><a href="{% url 'login:detail' login.id %}">{{ login.id }}</a>></td>
<td>{{ login.name }}</td>
<td>{{ login.age }}</td>
</tr>
{% endfor %}
{% endif %}
</table>
</body>
</html>
三.DjangoPOST请求
之前的包括访问数据库,打印整张用户表,根据id查询单条数据用户,都是GET请求,请求获取到数据然后展示。
这边尝试一下在html页面里进行操作,点击按钮,然后向数据表中添加一条数据
新建一个view方法
然后写一下url
再把html简单的写一下,这个html里就一个表单,点击按钮以post形式提交表单
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/html">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="{% url 'login:add_post' %}" method="post">
{% csrf_token %}
name:<input name="name"></br>
age:<input name="age"></br>
<input type="submit" value="submit">
</form>
</body>
</html>
最后再来详细写一下view里的方法
首先如果是以GET请求调用view里的add_post方法,那就将页面跳转到刚刚写好的add_post.html页面,展示这个页面
在url里输入http://127.0.0.1:8080/login/add/以访问静态页面
其次是POST,add_post.html里的表单提交时,以post方法提交,并且调用的也是view 里的add_post函数
def add_post(request):
if request.method == 'GET':
return render(request,'login/add_post.html',{})
elif request.method =='POST':
name = request.POST['name']
age = request.POST['age']
login = Login(name = name,age=age)
login.save()
login_list = Login.objects.all()
context = {
'login_list':login_list
}
return render(request,'login/index.html',context)