day45-模板设计

2019-01-07  本文已影响0人  barriers

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)
上一篇下一篇

猜你喜欢

热点阅读