if标签:
if标签与python中的if语句相同,但是所有的标签都需要({%%})进行包裹并且需要闭合标签。示例如下:
{% if age < 18 %}
<p>你是未成年人,不能进入网吧</p>
{% elif age == 18 %}
<p>欢迎光临</p>
{% else %}
<p>适度游戏</p>
{% endif %}
for in empty标签:
基本操作与上面一样,当遍历为空时,执行empty里面的操作 for..in..中没有continue和break关键字 示例如下:
<p>
{% for key,value in person.items %}
{{ key }}:{{ value }}
{% endfor %}
</p>
<table>
<thead>
<tr>
<td>序号</td>
<td>书名</td>
<td>作者</td>
<td>价格</td>
</tr>
</thead>
<tbody>
{% for book in books %}
{% if forloop.first %}
<tr style="background: red;">
{% elif forloop.last %}
<tr style="background: pink;">
{% else %}
<tr>
{% endif %}
<td>{{ forloop.counter0 }}</td>
<td>{{ book.name }}</td>
<td>{{ book.author }}</td>
<td>{{ book.price }}</td>
</tr>
{% endfor %}
</tbody>
</table>
<ul>
{% for content in contents %}
<li>{{ content }}</li>
{% empty %}
<li>没有任何评论</li>
{% endfor %}
</ul>
url标签
url标签给文本一个超链接,示例如下:
views部分:
from django.shortcuts import render
from django.http import HttpResponse
def index(request):
return render(request,'index.html')
def login(request):
next = request.GET.get('next')
text = '登陆完成要跳转的页面是%s'%(next)
return HttpResponse(text)
def book(request):
return HttpResponse('读书页面')
def book_detail(request,book_id):
text = '你的书籍详情是:%s'%(book_id)
return HttpResponse(text)
def movie(request):
return HttpResponse('电影页面')
def city(request):
return HttpResponse('同城页面')
urls部分
from . import views
urlpatterns = [
path('',views.index,name='index'),
path('book/',views.book,name='book'),
path('movie/',views.movie,name='movie'),
path('city/',views.city,name='city'),
path('book/detail/<book_id>/',views.book_detail,name='detail'),
path('login/',views.login,name='login'),
]
hmtl模板部分
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.nav{
overflow: hidden;
}
.nav li{
float: left;
list-style: none;
margin: 0 20px;
}
</style>
</head>
<body>
<ul class="nav">
<li><a href="/">首页</a> </li>
<li><a href="{% url 'book' %}">读书</a> </li>
<li><a href="{% url 'movie' %}">电影</a> </li>
<li><a href="{% url 'city' %}">同城</a> </li>
<li><a href="{% url 'detail' book_id='1' %}">最火的一篇文章</a> </li>
<li><a href="{% url 'login' %}?next=/">登录</a> </li>
</ul>
</body>
</html>
添加 <a{% url '唯一id' %}>属性</a为属性添加一个超连接,点击属性时跳转到该id指定的页面
在url 中添加参数直接以空格 参数名=为其赋值 ,查询字符串要在尾端自行添加
模板常用过滤器
在DTL中不支持函数调用形式,因此不能给函数传递参数,这将有很大的局限,而过滤器其实就是一个函数,可以接受一个参数,对其进行处理。
add过滤器
add 过滤器会尝试将传进来的参数变为整形然后返回和,如果不行则会尝试字符串凭借和序列拼接
{{ '1'|add:'2' }}
cut过滤器
cut 过滤器会移除所指定的字符串
{{'HELLO WORLD'|cut:' '}}
date过滤器
date 过滤器应用格式符将时间序列格式化
{{ today|date:'Y/m/d H:i:s' }}
模板继承
将需要重复利用的代码放入同一个模板,调用extends继承,示例如下:
bases模板
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.nav{
overflow: hidden;
}
.nav li{
float: left;
list-style: none;
margin: 0 20px;
}
</style>
</head>
<body>
<header>
<ul>
<li>{{ username }}</li>
</ul>
<ul class="nav">
<li><a href="/">首页</a></li>
<li><a href="{% url 'company' %}">公司</a> </li>
<li><a href="{% url 'school' %}">学校</a> </li>
</ul>
</header>
<div class="content">
{% block content %}
这是父模板中的代码
{% endblock %}
</div>
<footer>
这是footer部分
</footer>
</body>
</html>
子模板继承
{% extends 'bases.html' %}
对于不同的页面,可以使用block标签开个口子,为其赋名,然后在子模板里面调用名字即可进行创造,示例如下:
bases.html开口子的地方
<div class="content">
{% block content %}
{% endblock %}
</div>
子模板中调用
{% block content %}
这是首页的代码
{% endblock %}
这相当于重写了父模板中开口子的这部分,所以父模板中这部分代码不会显现,如果想利用这部分代码,类似于python类继承,使用block.super即可调用,示例如下:
{% block content %}
{{ block.super }}
这是首页的代码
{% endblock %}
加载静态文件
在一个网页中,不仅需要html骨架,还需要css样式文件,js执行文件以及一些图片等。在DTL中,使用static标签来加载静态文件,首先需要{% load static %},步骤如下:
1.首先确保django.control.staticfiles已经添加到settings.INSALLED_APP中。
2.确保在settings.py中设置了STATIC_URL.(请求静态文件的url)
3.在已安装的app下创建一个文件叫做static,再在static文件夹下新建一个与当前app名相同的文件夹,再把静态文件放到这个文件夹下。(避免各app下出现同名静态文件时识别错误)
4.如果一些静态文件是不和任何app挂钩的,那么可以在settings.py中添加STATICFILES_DIRS,以后DTL就会在这个列表路径中查找静态文件。比如:
STATICFILES_DIRS = [
os.path.join(BASE_DIR,'static')
]
5.在模板中使用load标签加载static标签。比如要加载在项目的static文件夹下的stytle.css的文件,示例如下
{% load static %}
<img src="{% static 'front/view.jpg' %}" alt="">
6.如果不想每次在模板加载静态文件都使用load加载static,可以在settings中的TEMPLATES/OPTIONS中添加'builtins':['diango.templatetags.static'],这样模块就能直接使用static标签。
7.如果没有在INSTALLD_APP中添加 django.contrib.staticfiles。那么我们需要手动将静态文件的url与静态文件的路径进行映射。