• Python 第五十八章 Django 模板系统


    模板渲染

    {{ 变量 }}  {% 逻辑 %}
    

    万能的点

    {{ name }}
    {{ l1.1 }}
    {{ l1.k1 }}
    {{ l1.keys }}
    {{ l1.values }}
    {{ l1.items }}
    {{ l1.p }}
    

    过滤器

    内置过滤器  |
    {{ name|length }}
    {{ name|cut:'xx' }}
    default
    filesizeformat
    truncatchars
    truncatwords
    slice:'0:3'
    join:'+'
    date:'Y-m-d H:i:s'
    safe  识别成标签
    
    

    标签

    {% for i in data %}
    	xx
    	{{ forloop.counter }}
    {% empty %}
    	xx
    {% endfor %}
    
    
    forloop.counter            当前循环的索引值(从1开始),forloop是循环器,通过点来使用功能
    forloop.counter0           当前循环的索引值(从0开始)
    forloop.revcounter         当前循环的倒序索引值(从1开始)
    forloop.revcounter0        当前循环的倒序索引值(从0开始)
    forloop.first              当前循环是不是第一次循环(布尔值)
    forloop.last               当前循环是不是最后一次循环(布尔值)
    forloop.parentloop         本层循环的外层循环的对象,再通过上面的几个属性来显示外层循环的计数等
    
    {% if a > 1  %}
    	
    {% elif %}
    	
    {% else %}
    	
    {% endif %}
    
    
    {% with a=xx.xx.xx %}
    {% with xx.xx.xx as a %}
    	{{ a }}
    {% endwith %}
    

    模板继承(母版继承)

    1. 创建一个xx.html页面(作为母版,其他页面来继承它使用)
    2. 在母版中定义block块(可以定义多个,整个页面任意位置)
    	{% block content %}  <!-- 预留的钩子,共其他需要继承它的html,自定义自己的内容 -->
    
    	{% endblock %}
    
    
    3 其他页面继承写法
    	{% extends 'base.html' %}  必须放在页面开头
    4 页面中写和母版中名字相同的block块,从而来显示自定义的内容
        {% block content %}  <!-- 预留的钩子,共其他需要继承它的html,自定义自己的内容 -->
            {{ block.super }}  #这是显示继承的母版中的content这个快中的内容
            这是xx1
        {% endblock %}
    
    views.py
    # 这些是母版继承
    # 创建4个文件 base(母版)+home+menu1+menu2+menu3
    def home(request):
        return render(request,'home.html')
    
    def menu1(request):
        return render(request,'menu1.html')
    
    def menu2(request):
        return render(request,'menu2.html')
    
    def menu3(request):
        return render(request,'menu3.html')
    
    
    

    组件

    1 创建html页面,里面写上自己封装的组件内容,xx.html
    2 新的html页面使用这个组件
    	{% include 'xx.html' %}
    

    自定义标签和过滤器

    1 在应用下创建一个叫做templatetags的文件夹(名称不能改),在里面创建一个py文件,例如xx.py
    
    2 在xx.py文件中引用django提供的template类,写法
    	from django import template
    	register = template.Library() #register变量名称不能改
    	
    	定义过滤器
    		@register.filter   参数至多两个
    		def xx(v1,v2):
    			return xxx
    	使用:
    		{% load xx %}
    		{% name|xx:'oo' %}
    	
    	# 自定义标签 没有参数个数限制
        @register.simple_tag
        def huxtag(n1,n2):  #冯强xx  '牛欢喜'
            '''
            :param n1:  变量的值 管道前面的
            :param n2:  传的参数 管道后面的,如果不需要传参,就不要添加这个参数
            :return:
            '''
            return n1+n2
    
        # inclusion_tag 返回html片段的标签
        @register.inclusion_tag('result.html')
        def res(n1): #n1 : ['aa','bb','cc']
    
            return {'li':n1 }
    	使用:
    		{% res a %}
    	
    

    静态文件配置

    1 项目目录下创建一个文件夹,例如名为jingtaiwenjianjia,将所有静态文件放到这个文件夹中
    2 settings配置文件中进行下面的配置
    	# 静态文件相关配置
        STATIC_URL = '/abc/'  #静态文件路径别名
    
        STATICFILES_DIRS = [
            os.path.join(BASE_DIR, 'jingtaiwenjianjia'),
        ]
    
    3 引入<link rel="stylesheet" href="/abc/css/index.css">
    
    

    url别名和反向解析

    写法
    	url(r'^index2/', views.index,name='index'),
    反向解析
    	后端: from django.urls import reverse
    		 reverse('别名')  例如:reverse('index') -- /index2/
    	html: {% url '别名' %} -- 例如:{% url 'index' %} -- /index2/
    

    url命名空间

    路由分发 include

    1 在每个app下创建urls.py文件,写上自己app的路径
    2 在项目目录下的urls.py文件中做一下路径分发,看下面内容
        from django.conf.urls import url,include
        from django.contrib import admin
    
        urlpatterns = [
            # url(r'^admin/', admin.site.urls),
            url(r'^app01/', include('app01.urls')),#app01/home/
            url(r'^app02/', include('app02.urls')),
        ]
    
    

    命名空间namespace

    from django.conf.urls import url,include
    from django.contrib import admin
    urlpatterns = [
        # url(r'^admin/', admin.site.urls),
        url(r'^app01/', include('app01.urls',namespace='app01')),#app01/home/
        url(r'^app02/', include('app02.urls',namespace='app02')),
    	
    ]
    
    
    使用:
    	后端:reverse('命名空间名称:别名') -- reverse('app01:home') 
    	hmtl:{% url '命名空间名称:别名' %}  -- {% url 'app01:home' %}
    
  • 相关阅读:
    P3703 [SDOI2017]树点涂色
    CF1446D2 Frequency Problem (Hard Version)
    P3703 [SDOI2017]树点涂色
    ESP8266 Ticker库
    CSS 动画
    Sublime 安装
    XMLHttpRequest.responseText
    数据结构
    Linux 无需公网IP,远程SSH访问Linux服务器!
    Linux 安装
  • 原文地址:https://www.cnblogs.com/zhangshan33/p/11595610.html
Copyright © 2020-2023  润新知