代码改变世界

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/

访问效果如下: