day45-模板设计
1引入静态文件
在settings中对最后的STATIC_URL进行如下设置
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]
在新建的html文件中导入设置的样式表的方法有三种;
方法一
<link rel="stylesheet" href="../static/css/style.css">
方法二(推荐):
<link rel="stylesheet" href="/static/css/style.css">
方法三:
{% load static %}
<link rel="stylesheet" href="{% static 'css/style.css' %}">
2标签
2.1if标签
{% if name %}
{{ name }}
{% else %}
name为空
{% endif %}
2.2for标签
{% for i in a %}
i
{% empty %}
a变量为空
{% endfor %}
2.3forloop变量
if和for中自带变量forloop,用于统计for循环循环的次数
判断循环最后一次:{{ forloop.last }},返回布尔值
判断循环第一次:{{ forloop.first }},返回布尔值
ifequal:判断两个值是否相等
{{ forloop.counter0 }}从0开始统计,不加0就从1开始
{{ forloop.revcounter0 }}倒序以0结束
{% ifequal forloop.counter 3 %}判断是否等于3
{% for i in a %}
<p {% if forloop.counter == 2 %} style="font-weight: bold;" {% endif %}>
<p {% if forloop.first %} style="font-weight:bold;" {% endif %}>
<p {% ifequal forloop.counter 3 %} style="font-weight:bold;" {% endifequal %}>
编号:{{ forloop.counter0 }} 成绩:{{ i }}
</p>
{% empty %}
a变量为空
{% endfor %}
2.4注解
web形式注解:<!--注解内容-->,需注意不能定义错误的标签语法
django框架中的注解{#注解内容#} 单行注解;{% comment %}注解内容{% endcomment %} 多行注解
3过滤器
将内容进行渲染再展示{{ a | 过滤器 }}
safe:解析变量中的样式
default:默认值
upper:/lower:变量大小写的转换
capfirst:首字母大写
random:随机取字符
first/last:取出变量中的首/尾元素
length:计算变量的长度
add:变量的加减
<p>{{ b | safe }}</p>
<!--全部转大写-->
<p>{{ 'python' | upper }}</p>
<!--全部转小写-->
<p>{{ 'PYthOn' | lower }}</p>
<!--内容加1-->
<p>{{ 4 | add:'1' }}</p>
<!--内容减1-->
<p>{{ 4 | add:'-1' }}</p>
<!--首字母大写-->
<p>{{ 'python' | capfirst }}</p>
<!--空默认为无-->
<p>{{ '' | default:'无' }}</p>
<!--解析第一个字符-->
<p>{{ 'python' | first }}</p>
<!--解析最后一个字符-->
<p>{{ 'python' | last }}</p>
<!--随机取一个字符-->
<p>{{ 'python' | random }}</p>
4继承
父模板:定义好可以被子模板动态填充内容的block块
子模板:继承于父模板,并实现填充block块的内容
定义block块的名字不能重复
继承:{% extends '父模板' %}
动态填充block块的内容:{% block 名称 %}{% endblock %}
获取父模板中块之前定义好的内容:{{ block.super }}
<!--定义模板-->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
{% block js %}
{% endblock %}
</head>
<body>
{% block content %}
{% endblock %}
</body>
</html>
<!--子模板继承父模板内容-->
{% extends 'base.html' %}
{% block js %}
<script src="https://code.jquery.com/jquery-3.0.0.min.js"></script>
{% endblock %}
5路由urls
5.1配置路由分发
django项目中urls.py文件中配置
path('app/',include('app.urls')), 新版本django
path('app/',include('app.urls', 'app')) 老版本django
5.2接收参数
每个应用下对应的urls.py文件中配置
urlpatterns = [
re_path('index/(\d+)/', views.index), #路由匹配的值为int类型
path('index/<int:id>/', views.index), #路由匹配的值为int类型
path('name/<str:name>/', views.get_name), #路由匹配的值为字符类型
path('get_uuid/', views.get_uuid), #路由匹配的值为uuid类型
path('g_uuid/<uuid:uid>/', views.g_uuid),
path('path/<path:phth>/', views.get_path), #路由匹配的值为path类型
# 接收多个参数
path('params/<int:year>/<int:month>/<int:day>/', views.params),
re_path('params/(\d+)/(\d+)/(\d+)/',views.params),
re_path('params/(?P<year>\d+)/(?P<month>\d+)/(?P<day>\d+)/',views.params)
]
def params(request, year, month, day):
return HttpResponse('%s年%s月%s日' % (year,month,day))
def get_uuid(request):
uid = str(uuid.uuid4())
return HttpResponse(uid)