• 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;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 }}

  • 相关阅读:
    Swagger2 添加HTTP head参数
    获取枚举类型描述
    JS设置cookie、读取cookie、删除cookie
    ES6中Promise的入门(结合例子)
    阮一峰的ES6---Promise对象
    model_util.py
    IfcSpatialElementType
    labelme coco
    python opencv KeyPoint
    IfcSpatialZoneType
  • 原文地址:https://www.cnblogs.com/reblue520/p/14214783.html
Copyright © 2020-2023  润新知