DTL即(Django Template Language)
Template本质是使用了DTL Django模板语言的HTML
Temaplte使用步骤:
1.应用目录下templates文件夹
2.templates下创建html模板文件
3.在views.py的对应方法中返回render
初始化
django-admin startproject day04
cd day04
django-admin startapp books
mkdir templates
touch index.html
vim setttings.py
ALLOWED_HOSTS = ['*']
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'books',
]
from django.conf.urls import url
from django.contrib import admin
from books import views
urlpatterns = [
url(r'^book/$', views.bookname,name='bn_alias'),
]
Start
DTL传递的变量类型可以使用字典、模型、方法、函数、列表
dtl的模板传参,传入的参数是在视图函数views.py里面定义好的,实质上,是修改render渲染引擎的kwagrs进行传值,传值方式是:
render(request,’模板文件.html’,{‘模板里面的变量名’:变量})
1.字典
from django.shortcuts import render,HttpResponse
def bookname(request):
bn={'name':'浮生',
'age':23,
'gender':'Boy',
}
return render(request,'index.html',{'book_name':bn})
<html>
<head>
<title>婚恋交友</title>
</head>
<body>
<h1>VIP会员您好!</h1>
<li>{{book_name.name}}
<li>{{book_name.age}}
<li>{{book_name.gender}}
</html>
2.传入模型(类)
from django.shortcuts import render,HttpResponse
class Book(object):
def __init__(self,name):
self.name=name
def get_name(self):
return self.name
b=Book("Life is short, I love python")
def bookname(request):
return render(request,'index.html',{'book_name':b})
<html>
<head>
<title>书籍阅览</title>
</head>
<body>
<h1>现在是通过传递模型对象{{book_name}}</h1>
</html>
3.传对象的方法
4.传函数
from django.shortcuts import render,HttpResponse
def get_book():
return '杨帆是个big boy'
def bookname(request):
return render(request,'index.html',{'book_name':get_book})
5.传列表
from django.shortcuts import render,HttpResponse
b=['浮生','杨帆','白客','不动峰','老曹']
def bookname(request):
return render(request,'index.html',{'book_name':b})
<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
直接修改上面的例子,将列表的值循环打印
<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的用法
from django.shortcuts import render,HttpResponse
def 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 %}的用法
这里要做一个页面跳转的效果
from django.shortcuts import render,HttpResponse
def bookname(request,bn):
return render(request,'index.html',{'book_name':bn})
def test(request):
return HttpResponse('这是一个测试页面!')
当然,必须添加一条可以给a标签跳转过来路由test
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'),
]
模板中,使用一个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倾向于如何接收.熟悉掌握此类方法,对灵活将后台数据传入到前段有很大帮助,在实际项目中,对快速的完成独立开发有十分重要的意义.建议重点掌握.
最新评论