django入门到精通③template模板功能和常用标签过滤器的使用

1.创建环境

workon python37_django2
django-admin startproject template
cd template
python manage.py startapp app

2.模板的基本设置

项目下创建 templates 存放html模板的文件夹

创建模板文件

templates/index.html

{% load static %}
<html>

</html>
<h1> hello {{ name }}</h1>

<ul>
    {% for item in array %}
    <li>{{ item }} -- {{ forloop.counter0 }} -- {{ forloop.counter }} -- {{ forloop.revcounter }}
    -- {{ forloop.revcounter0 }}
    {% if forloop.first %}
    is first
    {% elif forloop.last %}
    is last
    {% endif %}
    </li>
        {% empty %}
        <li>is empty</li>
    {% endfor %}
</ul>
<p>
<a href="{% url 'index' 'conan' %}">return</a>
    </p>
{% static 'index.css' %}

templates/base.html

<!DOCTYPE html>
<html lang="en">
<head>
    {% block head %}
    <meta charset="UTF-8">
    <title>{% block title %}{% endblock %}</title>
        {% block css_style %}
        {% endblock %}
    {% endblock %}
</head>
<body>
{% block content %}
{% endblock %}
{% block js_script %}
{% endblock %}
</body>
</html>

django的settings.py 配置修改

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
    # 添加路径
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

引入 static/index.css

settings.py配置

STATICFILES_DIRS = (os.path.join(BASE_DIR, 'static'),)

视图的创建

app/views.py

# encoding:utf-8

import datetime

from django.shortcuts import render
from django.views.generic import View


class Index(View):
    TEMPLATE = 'index.html'

    def get(self, request, name):
        data = {}
        data['name'] = name
        data['array'] = range(10)
        return render(request, self.TEMPLATE, data)

创建路由
app/urls.py

# _*_ coding:utf-8 _*_

from django.urls import path
from .views import Index

urlpatterns = [
    path('<str:name>',Index.as_view(), name = 'index')
]

总路由中引入

template/urls.py

from django.contrib import admin
from django.urls import path, include
from app import urls as app_urls

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include(app_urls))
]

测试

标签与过滤器的使用

视图中的示例:app/views.py

# encoding:utf-8

import datetime

from django.shortcuts import render
from django.views.generic import View


class Index(View):
    TEMPLATE = 'index01.html'

    def get(self, request, name):
        data = {}
        data['name'] = name
        data['array'] = range(10)
        # data['array'] = []

        data['count'] = 20
        data['time'] = datetime.datetime.now()
        data['cut_str'] = "hello-boy!"
        data['first_big'] = "hello django"
        # data['result'] = False
        # data['result'] = []
        # data['result'] = None
        data['result'] = False

        data['dic_list'] = [{'name':'jack', 'age':30},{'name':'xiaoming','age':18}]

        data['float_num'] = 3.1415926
        data['html_str'] = '<div style="background-color:red;width:50px;height:50px"></div>'

        data['a_str'] = '请看 www.baidu.com'

        data['feature'] = data['time'] + datetime.timedelta(days=5)
        return render(request, self.TEMPLATE, data)

模板示例 templates/index.html

{% extends 'base.html' %}
{% load static %}
{% load myfilter %}
{% block css_style %}
<link rel="stylesheet" href="{% static 'index.css' %}" />
{% endblock %}
{% block title %}
    test
{% endblock %}
{% block content %}
    <h1>hello {{ name }}</h1>
    <ul>
    {% for item in array %}
    <li>{{ item }}</li>
    {% endfor %}
    </ul>

    <br />

    <label>add : </label>{{ count|add:10 }}<br/>
    <label>date: </label>{{ time|date:"Y-m-d H:i:s" }}<br/>
    <label>cut : </label>{{ cut_str|cut:"-" }}<br/>
    <label>capfirst : </label>{{ first_big|capfirst }}<br/>
    <label>default:</label>{{ default|default:"空列表" }}<br/>
    <label>default_if_none:</label>{{ result|default_if_none:"none才是空" }}<br/>
    <lable>dictsort:</lable>{{ dic_list|dictsort:'age' }}<br/>
    <label>dictsortreversed:</label>{{ dic_list|dictsortreversed:'age' }}
    <label>first:</label>{{ dic_list|first }}<br/>
    <lable>last:</lable>{{ dic_list|last }}<br/>
    <lable>floatformat: </lable>{{ float_num|floatformat:4 }}<br/>
    <label>join: </label>{{ array|join:"-" }}<br/>
    <lable>length: </lable>{{ dic_list|length }}<br/>
    <lable>divisibleby: </lable>{{ count|divisibleby:3 }}<br/>
    <label>length_is: </label>{{ dic_list|length_is:2 }}<br/>
    <lable>html_str: </lable>{{ html_str|safe }}<br/>
    <lable>random: </lable>{{ dic_list|random }}<br/>
    <label>slice:</label>{{ html_str|slice:":8" }}<br/>
    <lable>slugify:</lable>{{ html_str|slugify }}<br/>
    <lable>upper:</lable>{{ html_str|upper }}<br/>
    <label>urlize :  </label>{{ a_str|urlize }}<br/>
    <label>wordcount: </label>{{ a_str|wordcount }}<br/>
    <label>timeutils: </label>{{ feature|timeuntil }}<br/>

    <label>custom: </label>{{ count|test:10 }}
{% endblock %}

显示效果

 

自定义过滤器的使用:

app/templatetags/myfilter.py

# _*_ coding:utf-8 _*_
# __author__ == 'jack'
# __date__ == '2020-12-30 9:53 PM'

from django import template

register = template.Library()


@register.filter
def test(value, args):
    return value * args

使用: 将数字乘以 10 返回结果

<label>custom: </label>{{ count|test:10 }}

 

posted @ 2020-12-31 09:50  reblue520  阅读(131)  评论(0编辑  收藏  举报