107-创建第一个动态模板
2019-08-18 18:17 lzhshn 阅读(159) 评论(0) 编辑 收藏 举报1、django的动态模板,总是由views函数准备数据,并指定在某个html模板页面上渲染;views函数负责数据,html页面负责呈现样式。
2、编写views函数
from django.shortcuts import render from django.shortcuts import HttpResponse from .models import CnbTitle # 编写一个函数,显示所有的CnbTitle def show_all_cnbtitle(request): all_cnbtitle = CnbTitle.objects.order_by('date_add') context = {'all_cnbtitle': all_cnbtitle} return render(request, 'all_cnbtitle.html', context)
首先说明:views.py里新引入了models,也就是CnbTitle类;
admin后台的操作,实际上是新增了一个个CnbTitle类的对象,CnbTitle.objects.order_by表示从数据库取出所有CnbTitle类的对象,然后对它们按时间升序进行排列;
all_cnbtitle是一个集合,用来接收所有对象。
最后,按照惯例,将某个参数包装为一个字典,作为上下文传递到模板里去。注意这种写法,绝大多数带参数的模板渲染都是如此。
3、编写模板
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>All CnbTitle</title> </head> <body> <h1>列举所有文章标题:</h1> {% for title in all_cnbtitle %} <h3>标题:{{title.text}}</h3> <p>添加时间:{{title.date_add}}</p> <br /><br /> {% endfor %} </body> </html>
在模板的<body></body>之间,已经不是普通的html标签,而是django模板标签。
而这些内容也肯定不是最终网页上会显示的内容,咋一看,这像是一个for循环,而事实上这的确也就真是一个for循环:
{% %}里面放python代码,用来完成特定功能或效果;
{{}}是变量;
{# #}是注释。
打开这个模板时,将尝试从传来的变量all_cnbtitle依次取出元素,然后把元素的属性点出来,放在<h3></h3>和<p></p>里,每显示一个元素,放置2个换行,以便和下一个元素区分。
4、编写url
from django.urls import path from . import views urlpatterns = [ path('first_page/', views.first_page, name='first_page'), path('first_temp/', views.first_temp, name='first_temp'), path('show_all_cnbtitle/', views.show_all_cnbtitle, name='show_all_cnbtitle'), ]
5、输入地址:http://127.0.0.1:8000/test_app/show_all_cnbtitle/
访问效果如下: