[Django系列]3.Django 模板语言DTL和Template标签

DTL即(Django Template Language)

Template本质是使用了DTL Django模板语言的HTML

Temaplte使用步骤:
1.应用目录下templates文件夹
2.templates下创建html模板文件
3.views.py的对应方法中返回render

初始化

#创建一个项目day04
django-admin startproject day04
#在项目day04里创建应用books
cd day04
django-admin startapp books
#创建目录templates
mkdir templates
#新建一个模板文件index.html
touch index.html
#将应用添加到已安装应用,添加host
vim setttings.pyALLOWED_HOSTS = ['*']
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'books',
]
#进入day04/day04/urls.py,定义一个路由
#-*- coding:utf-8 -*-
from django.conf.urls import url
from django.contrib import admin
from books import views 
urlpatterns = [
    url(r'^book/$', views.bookname,name='bn_alias'), #这里增加别名'bn_alias'
]

Start

DTL传递的变量类型可以使用字典、模型、方法、函数、列表

dtl的模板传参,传入的参数是在视图函数views.py里面定义好的,实质上,是修改render渲染引擎的kwagrs进行传值,传值方式是:

render(request,’模板文件.html’,{‘模板里面的变量名’:变量})

1.字典

#进入到books目录下views.py,定义视图函数bookname
#-*- coding:utf-8 -*-
from django.shortcuts import render,HttpResponse
def bookname(request):
        bn={'name':'浮生',   #这里咱给定义一个字典bn
            'age':23,
            'gender':'Boy',
           }
        return render(request,'index.html',{'book_name':bn}) #index.html模板里面的变量名是book_name,传入一个字典bn给模板
#index.html的内容如下
<html>
  <head>
     <title>婚恋交友</title>    
  </head>
  <body>
     <h1>VIP会员您好!</h1>
         <li>{{book_name.name}}   #传入的变量需要用{{}}去标记,另外字典值的引用,方法是 变量名.值
         <li>{{book_name.age}}
         <li>{{book_name.gender}}
</html>

2.传入模型(类)

#-*- coding:utf-8 -*-
from django.shortcuts import render,HttpResponseclass Book(object):                 #先定义一个类Book,传入参数name
        def __init__(self,name):
                self.name=name
        def get_name(self):        #定义方法get_name返回这个属性
                return self.name
b=Book("Life is short, I love python")
​
def bookname(request):
        return render(request,'index.html',{'book_name':b})
#index.html的内容如下
<html>
  <head>
     <title>书籍阅览</title>    
  </head>
  <body>
     <h1>现在是通过传递模型对象{{book_name}}</h1>
</html>

3.传对象的方法

4.传函数

#-*- coding:utf-8 -*-
from django.shortcuts import render,HttpResponsedef get_book():
        return '杨帆是个big boy'def bookname(request):
        return render(request,'index.html',{'book_name':get_book}) #传入函数名即可调用

5.传列表

#修改views.py
#-*- coding:utf-8 -*-
from django.shortcuts import render,HttpResponse
b=['浮生','杨帆','白客','不动峰','老曹']
​
def bookname(request):
        return render(request,'index.html',{'book_name':b})
#修改index.html
<html>
  <head>
     <title>学员名单</title>    
  </head>
  <body>
     <h1>现在是传列表,框架学员名单</h1>
         <li>{{book_name.0}}
         <li>{{book_name.1}}
         <li>{{book_name.2}}
         <li>{{book_name.3}}
         <li>{{book_name.4}}
</html>

Template 标签

分支:
{{% if  %}}
{{% else  %}}
{{% elif  %}}
{{% endif %}}
​
{{% ifequal %}}
{{% ifnotequal %}}
​
{%for   in %} {% endfor %}
{%url 'url_name' param %}
​

1.for in

直接修改上面的例子,将列表的值循环打印
#修改index.html
<html>
  <head>
     <title>学员名单</title>    
  </head>
  <body>
     <h1>现在是用for i in输出,框架学员名单</h1>
        {% for i in book_name %}
         <li>{{i}}
        {% endfor %}
</html>
可以看到输出同样的效果

2.if的用法,forloop.first,forloop.last

<html>
  <head>
     <title>学员名单</title>    
  </head>
  <body>
     <h1>现在是if的用法,forloop.first,forloop.last的用法,框架学员名单</h1>
        {% for i in book_name %}
           {% if forloop.first%}
            <li>{{i}}是我的老大!
           {%elif forloop.last%}
            <li>{{i}}是最小的!
            {% else %}
              <li>{{i}}
            {%endif%}
        {% endfor %}
</html>

3.ifequal的用法

#-*- coding:utf-8 -*-
from django.shortcuts import render,HttpResponsedef bookname(request):
        a='python'
        b='python'
        return render(request,'index.html',{'book_name':a,'book_name1':b})
<html>
  <head>
     <title>学员名单</title>    
  </head>
  <body>
     <h1>现在是ifequal的用法</h1>
        {% ifequal book_name book_name1 %}
           {{book_name}}{{book_name1}}相等.
         {% endifequal %}
​
</html>

4.{%url ‘url_name’ param %}的用法

这里要做一个页面跳转的效果
#-*- coding:utf-8 -*-
from django.shortcuts import render,HttpResponse
def bookname(request,bn):
        return render(request,'index.html',{'book_name':bn})
def test(request):                        #定义一个方法test,接收跳转过来的地址,返回测试页面
    return HttpResponse('这是一个测试页面!')
当然,必须添加一条可以给a标签跳转过来路由test
#进入day04/day04/urls.py,增加一条路由
#-*- coding:utf-8 -*-
from django.conf.urls import url
from django.contrib import admin
from books import views
urlpatterns = [
    url(r'^book/([\S\s]*)/$', views.bookname,name='bn_alias'),
    url(r'^test/$', views.test,name='test_alias'), #这里必须使用别名'test_alias'
]
模板中,使用一个a标签,href的地址栏,指向test路由的别名’test_alias’,此处不需要传参.
<html>
  <head>
     <title>这是一个页面跳转</title>    
  </head>
  <body>
     <h1>url的用法</h1>
                <a href="{% url 'test_alias' %}">这是一个已过期的页面,点击进入最新的页面</a>
</html>

总结:

      DTL和Template标签是django前后端交互非常重要的环节.dtl着重在后台传什么样的参数,temple倾向于如何接收.熟悉掌握此类方法,对灵活将后台数据传入到前段有很大帮助,在实际项目中,对快速的完成独立开发有十分重要的意义.建议重点掌握.

赞(0)
未经允许不得转载:http://www.yueguangzu.net逗逗网 » [Django系列]3.Django 模板语言DTL和Template标签
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址