首页 > 其他分享 >10、 Django-模板-templates

10、 Django-模板-templates

时间:2024-07-01 22:45:06浏览次数:15  
标签:templates 10 name age endif Django html forloop 模板

 

模板语法

#模板中的变量
    语法:{{ var }}
    如果变量不存在、则插入空字符串
    
#方法不能有参数
    {{ int }}
    {{ str }}
    {{ list }}
    {{ list.0 }}
    {{ dict }}
    {{ dict.a }}        #dict['a']
    {{ func }}          #传递函数
    {{ class_obj.func }}    #传递类.方法

#列表、使用索引、不允许负索引
    items= ['apples', 'banans', 'carrots']
    {{ items.2 }}
 
#模板中的标签:
    if、for、while.......
    语法:{% tag %}
    作用:
        1、加载外部传入的变量
        2、在输出中创建问基本
        3、控制循环或逻辑
        
#if语句
    #if单分支:
    {% if 表达式 %}
        语句
    {% endif %}
    
    #if双分支
    {% if 表达式 %}
        语句
    {% else %}
        语句
    {% endif %}
    
    #if多分枝
    {% if 表达式 %}
        语句
    {% elif 表达式 %}
        语句
    {% else %}
        语句
    {% endif %}
    
    #判断语句:true   false
    {% if today_is_weekend %}
        <p>为true输出的内容</p>
    {% endif %}
    
    #使用and  or   not
    {% if a and b %}
    {% if a or b %}
    {% if not list %}
    
    
    #使用in  和  not in
    {% if "bc" in "abcdef" %}
        <p>输出bc在abcdef中</p>
    {% endif %}
    
    {% if "gh" not in "abcdef" %}
        <p>输出gh不在abcdef中</p>
    {% endif %}

 

for循环

for语句:
{% for 变量 in 列表 %}
    语句
{% empty %}        #当列表为空时执行empty后面的语句
    语句
{% endfor %}


#表示当前时第几次循环 :{{ forloop.counter }}
{% for item in todo_list %}
    <p>{{ forloop.counter }}:{{ item }}</p>     
{% endfor %}

注意:
{{ forloop.counter0 }}    #表示当前时第几次循环,从0开始数
{{ forloop.revcounter }}    #表示当前时第几次循环,倒着数数、到1停
{{ forloop.revcounter0 }}    #表示当前时第几次循环,倒着数数、到0停
{{ forloop.first }}            #是否是第一次循环  返回布尔值
{{ forloop.last }}            #是否最后一次循环  返回布尔值

如:
{% for link in links %}
    {{ link }}{{ %if not in forloop.last %}} | {% endif %}    
{% endfor %}

 

注释

#单行注释
{# 注释的内容 #}
    
    
#多行注释
{% comment %}
    注释的内容
{% endcomment %}
    

 

过滤器

#语法
{{ var|过滤器 }}    #作用:在变量显示前修改

add{{ value|add:2 }}    #变量+2
add{{ value|add:-2 }}    #没有减法的过滤去、但可以加负数

{{ name|lower }}        #将字符串换成小写
{{ my_list|first|upper }}    #将列表中的第一个值标为大写

{{ bio|truncatechars:30}}    #截断、将字符串截断30个字符

#过滤器可以传递参数、参数需要使用引号括起来
如:{{ students|join:'=' }}

#默认值default
{{ var|default:value }}    #如果变量没有被提供或者为false、空、会默认使用默认值

#根据指定格式转换日期为字符串、处理时间的就是针对date进行的转换
{{ dateVal|date:'y-m-d' }}        #将日期对象dateVal转换为指定的日期格式

 

html的转义

#将接收到的数据当成普通字符串处理还是当成HTML代码来渲染的问题

#如渲染成html
{{ code|safe }}

#关闭自动转义
{% autoescape off%}
    code
{% endautoescape %}

#打开自动转义
{% autoescape no%}
    code
{% endautoescape %}

 

模板的继承

block:
    {% block XXX%}
        code
    {% endblock %}
    
    
extends继承、写在开头位置
    {% extends '父模板路径' %}
    

include:加载模板进行渲染
    {% include '模板文件' %}
    
    
{{ block.super }}    #获取父模板中block中的内容

 

案例:

views.py

from django.shortcuts import render

def index(request):
    data = {
        'name': 'xiaoxin',
        'age': 25,
        'likes': ['movie', 'game', 'code'],
        'address': {'city': '深圳', 'province': '广东'},
        'stars': [
            ['黄师傅', '啊尧','温工'],
            ['番薯', '柱子', '小赵'],
            ['捷顺', '速通4', '道闸'],
        ]
    }
    
    return render(request, 'index.html', data)        #使用render(request, html文件名, 传递的数据)  将数据传递给html模板

 

根路由:urls.py

from django.contrib import admin
from django.urls import path
from App_templates.views import *

urlpatterns = [

    path('index/', index),

    path('admin/', admin.site.urls),
]

 

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>首页</title>
</head>
<body>  
    <h2>首页</h2>
    <hr>

    {# 单行注释 #}
    {% comment %}
        多行注释
    {% endcomment %}

{# 打印变量 #}
    <p>name: {{ name }}</p>
    <p>age: {{ age }}</p>
    
{#  取列表的值 需要  列表.下标  #}
    <p>likes: {{ likes }}</p>
    <p>likes.2: {{ likes.2 }}</p>   
    
{#  取字典的value需要    字典.key  #}
    <p>address: {{ address }}</p>
    <p>address: {{ address.city }}</p>
    <hr>

{#   标签的使用   #}
    <h3>if语句</h3>
    <h4>单分支</h4>
    {# 这里的  >= 符号两边需要有空格不然语法会报错   #}
    {% if age >= 18 %}
    	<p>{{ name }} 已成年</p>
    {% endif %} 

    <h4>双分支</h4>
    {% if age >= 18 %}
    	<p>{{ name }} 已成年</p>
    {% else %} 
        <p>{{ name }} 未成年</p>
    {% endif %}
    
    <h4>多分支</h4>
    {% if age < 18 %}
    	<p>{{ name }} 未成年</p>
    {% elif age < 60 %}
        <p>{{ name }} 是猛男</p>
    {%  else %}
        <p>{{ name }} 是老年人</p>
    {% endif %} 

    <h4>结合运算符 and、or、in、not in、not等等</h4>
    {% if age > 18 and age < 60 %}
    	<p>{{ name }} 是成年</p>
    {% endif %}

    <hr>
    <h3>for循环</h3>
    {% for like in likes %}
    	<p>{{ like }}</p>
    {% endfor %}
    
    <h4>empty</h4>
    {% for like in likes2 %}
    	<p>{{ like }}</p>
    {% empty %}
        <p>likes2 为空或者不存在</p>
    {% endfor %}
    
    <h4>下标</h4>
    {% for like in likes %}
    	<p>
            counter0:{{ forloop.counter0 }},
            counter:{{ forloop.counter }},
            revconuter0:{{ forloop.revcounter0 }},
            revcounter:{{ forloop.revcounter }},
        
            {#  在第一次循环的后面 加上 -first #}
            {% if forloop.first %}      
            	<b>- first</b>
            {% endif %} 
            {#  在最后一次循环的后面 加上 -last #}
            {% if forloop.last %}
            	<b>- last</b>
            {% endif %} 
        </p>
    {% endfor %}
    

    <h4>循环嵌套</h4>
    {#  表格标签  border="1":表格线宽、 width:表格宽度#}
    <table border="1" width="300">    
        {% for star in stars %}
        	<tr>
            
                {% for s in star %}
                	<td>
                        {{ s }}-
                        {{ forloop.parentloop.counter }}-   {# 拿到当前循环的上一个循环体的值 #}
                        {{ forloop.counter }}           {# 拿到当前循环体的值 #}
                    </td>
                {% endfor %}
            
            </tr>
        {% endfor %}
    </table>

    <h3>过滤器</h3>
    <h4>数字加减</h4>
    <p>age = {{ age }}</p>
    <p>age | add:2= {{ age|add:2 }}</p>
    <p>age | add:-2 =  {{ age|add:-2 }}</p>

    <h4>字符大小写转换</h4>
    <p>name = {{ name }}</p>
    <p>name|first|upper = {{ name|first|upper }}</p>
    <p>name|last|upper = {{ name|last|upper }}</p>
    <p>name|title = {{ name|title }}</p>        {# 标题:将第一个字符换成大写 #}
    
    <h4>截断</h4>
    <p>name|truncatechars:4 = {{ name|truncatechars:4 }}</p>    {# 截取字符串前4-1个字符 #}
    
    <h4>拼接 join</h4>
    <p>likes = {{ likes }}</p>
    <p>likes|join:'+' = {{ likes|join:'+' }}</p>    {# 将列表中的元素使用 + 号拼接起来 #}

    <h4>default:默认值 前提是变量为空没有值</h4>
    <p>likes2 = {{ likes2 }}</p>    {# 这里的likes2 是空值没有定义 #}
    <p>linkes2|default:'xjxj' = {{ likes2|default:'xjj' }}</p>
    
    <h4>指定日期格式</h4>
    <p>dt = {{ dt }}</p>
    <p>dt = {{ dt|date:'Y-m-d' }}</p>
    <hr>

    <h4>html转义</h4>
    <p>code = {{ code }}</p>    {# 输出没有转义前的 #}
    <p>code = {{ code|safe }}</p>   {# 输出转义后的html格式 、就是去掉html的标签、只输出字符串 #}
    <hr>
    <h4>自动转义</h4>
    <p>{# 打开自动转义 #}</p>
    {% autoescape off%}         {# 打开自动转义 #}
        {{ code }}
    {% endautoescape %}
    
    <p>{# 关闭自动转义 #}</p>
    {% autoescape on%}         {# 关闭自动转义 #}
        {{ code }}
    {% endautoescape %}
</body>
</html>

 

 

模板的继承

views.py

#模板继承、子模板继承父模板

#父模板
def base(request):
    return render(request, 'base.html')

#字模板
def music(request):
    return render(request, 'music.html')

#子模板
def sport(request):
    return render(request, 'sport.html')

urls.py

from django.contrib import admin
from django.urls import path
from App_templates.views import *

urlpatterns = [


    path('base_index/', base),
    path('music_index/', music),
    path('sport_index/', sport),
]

base.html  --父模板

<!DOCTYPE html>
<html lang="en">
<head>

    <!-- meta:设置编码 -->
    <meta charset="UTF-8">
    <!-- title:标题  block:块  endblock:结束块-->
    {% block mytitle %}
    <title>主页</title>
    {% endblock %}

</head>
<body>

    <!-- a:链接  href=urls中的路由-->
    <a href="/music_index">音乐频道</a>
    <a href="/sport_index">体育频道</a>
    <br>

    <!-- block:块  endblock:结束块 这个是被子模板继承后可以修改的地方-->
    {% block info %}
        这是主页
    {% endblock %}
    <br>

    <h3>有任何问题联系xxxxx</h3>


</body>
</html>

 字模板-music.html


<!-- 直接继承父模板 base.html -->
{% extends 'base.html' %}

<!-- block:块 修改父模板中block块中的内容  重写-->
{% block mytitle %}
    <title>音乐频道</title>
{% endblock %}

{% block info %}
    欢迎来到音乐频道
{% endblock %}

子模板- sport.html


<!-- 直接继承父模板 base.html -->
{% extends 'base.html' %}

<!-- block:块 修改父模板中block块中的内容  重写-->
{% block mytitle %}
    <title>体育频道</title>
{% endblock %}

{% block info %}
    欢迎来到体育频道
{% endblock %}

 

标签:templates,10,name,age,endif,Django,html,forloop,模板
From: https://www.cnblogs.com/littlecc/p/18115760

相关文章

  • 12、 Django-模型models的基本操作-增删改查
    一般的数据库操作流程:1、创建数据库,设计表结构和字段2、连接Mysq1数据库,并编写数据访问层代码3.业务逻辑层去调用数据访问层执行数据库操作Diango通过Mode1操作数据库,不管你数据库的类型是MySql或者Sqlite,Django自动帮你生成相应数据库类型的SQL语句,所以不需要关注SQL语句......
  • 11、 Django-模型基础-models-ORM框架-管理器对象
     #概述django根据属性的类型确定以下信息当前选择的数据库支持字段的类型渲染管理表单时使用的默认htm1控件在管理站点最低限度的验证django会为表增加自动增长的主键列,每个模型只能有一个主键列,如果使用选项设置某属性为主键列后则django不会再生成默认的主键列#属性命......
  • 基于dspic33ck64mp105的电机控制器开发①
    原理图是基于microchip官方的MCP1722_Power_Tools参考设计而来,修改部分如下:https://www.microchip.com/en-us/tools-resources/reference-designs/portable-power-tool-reference-design1,修改了电源模块2,修改了栅极驱动3,增加了蓝牙通信模块4,修改了原版AUX的端口5,增加了一个LED......
  • 10、爬虫-requests的使用-session()、防盗链
    #会话-cookie的使用requests.session()"""先登录网站、找到llogin相关的url得到cookie、拿到formatData中的信息带着cookie去请求url使用cookie去访问(session-会话)该网站其它内容的时候都会带着cookie"""importrequests#创建会话session=requests.session()#用户......
  • YOLOv10改进教程|C2f-CIB加入注意力机制
      一、导读    论文链接:https://arxiv.org/abs/2311.11587    代码链接:GitHub-CV-ZhangXin/AKConv YOLOv10训练、验证及推理教程二、C2f-CIB加入注意力机制2.1复制代码        打开ultralytics->nn->modules->block.py文件,复制SE......
  • 探秘 Django 专业之道
    一、Django项目开发1.web框架底层1.1网络通信注意:局域网个人一般写程序,想要让别人访问:阿里云、腾讯云。去云平台租服务器(含公网IP)程序放在云服务器先以局域网为例我的电脑【服务端】importsocket#1.监听本机的IP和端口sock=socket.socket(socket.AF_INET......
  • 代码随想录算法训练营第九天|232.用栈实现队列、225.用队列实现栈、 20.有效的括号、1
    文章目录232.用栈实现队列思路--直接模拟225.用队列实现栈解法一、两个队列模拟解法二、一个队列模拟20.有效的括号栈模拟1047.删除字符串中的所有相邻重复项解法一、栈解法二、双指针232.用栈实现队列题目链接:232.用栈实现队列-力扣(LeetCode)题目描述:请你仅......
  • 随机生成50个0-100之间的数字,生成对应个数的随机字母,再按数字大小从小到大排序最后写
    importjava.util.ArrayList;importjava.util.Collections;importjava.util.List;importjava.util.Random;importjava.io.FileNotFoundException;importjava.io.PrintStream;publicclassRandomNum{publicstaticvoidmain(String[]args)throwsFileNotF......
  • LibreOJ 3910 「PA 2022」Mędrcy
    考虑找一下走掉的条件:若\(x\)第\(1\)天走掉,那么就说明\(x\)没有知道任何咒语。若\(x\)第\(2\)天走掉,那么就说明应该存在一个\(y\),按照\(x\)已知的信息,\(y\)应该没有掌握咒语,但是\(y\)第一天没走。若\(x\)第\(3\)天走掉,那么就说明应该存在一个\((y,z)\)......
  • 【git】github如何上传超过100MB大小的单个文件
    在使用GitHub进行版本控制时,默认情况下,单个文件的大小限制为100MB。如果你需要上传超过这个大小的文件,可以使用GitLFS(LargeFileStorage)。GitLFS是一种Git扩展,专门用于处理大文件,它将大文件替换为轻量级的指针,并将实际的文件内容存储在远程服务器上。1.安装从Git2......