一、技术准备:
模板(template)包含、继承与 {% block %} 的用法
- {% include %} 标签
在项目的开发过程中,有很多页面的某些内容都是一样的,比如页面的导航条,页脚的部分,在每个页面都是一样的,我们 将相同的代码,抽出来,使用时用{% include %}标签。 - {% extends "main.html" %} 的意思是继承 main.html页面的代码,使用继承方法的话,这个代码一定要放页面的第一行。
- 代码{% block xxx %}{% endblock %} 里的xxx可以自由命名,这个代码意思是告诉模板引擎:这个位置我要预留给别人放东西的。这个部分子模板可以重载,每个{% block%}标签所要做的是告诉模板引擎,该模板下的这一块内容将有可能被子模板覆盖。
二、具体步骤如下:
第一步:前端技术加强-html模板应用
1、建立navbar.html文件,是导航条
2、建立main..html,主页,包括导航和不同的块,等子模板覆盖。
3、建立home.html,继承主页,把预留的块填写上自己的内容
4、建立room.html文件,同上。
5、响应views.py添加
def home(request):
return render(request, "home.html", context)
def room(request):
return render(request, "room.html")
第二步:通过url中参数传递进入不同页面
总结:从后端通过响应往前端页面传递数据使用【返回值】 render(,,context)
从前端通过url参数/<str:pk> —->对应的方法的【入参】 room(request,pk)
1、urls.py
path('room/<str:pk>/', views.room,name=‘room')
2、views.py
def room(request,pk):
3、home.html
{% for room in rooms %}
<h3>{{room.id}} -- <a href="/room/{{room.id}}">{{room.title}}</a></h3>
{% endfor %}
4、获取所有的数据包括id,并改为Article类(显示文章)views.py中
rooms = models.Article.objects./all()
5、在返回的 判断符合 的id后将这个 id的内容显示在页面中。
def room(request, pk):
room=models.Article.objects.get(id=pk)
context={'room':room}
return render(request, "room.html", context)
6、room.html
{% extends 'main.html' %}
{% block content %}
@{{room.user}}
<h1>{{room.title}}</h1>
<div>
<h4>{{room.intro}}</h4>
</div>
<h5>{{room.created_time}}</h5>
{% endblock content %}