首页 > 其他分享 >Django——模板

Django——模板

时间:2023-06-08 13:33:07浏览次数:55  
标签:name dic html django 过滤器 Django 模板

Django——模板

模板:django对模板文件没有特别大的限制 , html , txt ,没有类型的文件。

django提供一种动态生成html页面的快捷方式 , 也就是模板。模板语言(DTL)

1、配置模板

pycharm创建django项目会自动将我们的模板templates配置好。

# django 的默认模板引擎; django也支持并且内置了
# django.template.backends.jinja2.Jinja2
'BACKEND': 'django.template.backends.django.DjangoTemplates',
DIRS : 模板引擎的路径
# 设置模板引擎是否可以进入到应用中查找设置的模板
'APP_DIRS': True,
OPTIONS: 上下文处理器。

2、模板语言

DTL:模板语言,变量 , 注释 , 过滤器 , 标签 , 模板继承……

1、变量

DTL使用{{ name }}格式来表示变量 , 也可以调用函数 , 这个函数必须是嵌套在视图函数内的。

将类传递到html中

def var(request):
    name = '阿宸'
    age = 26
    gender = '男'
    name = '张迦博'
    # 模板接收的是函数的数据 , 所有函数在定义时需要有返回值
    # 函数在传递到html中会被自动的调用
    # 传递到html中函数不能有参数
    def func():
         return '你好'

    ls = [123,456,789]
    dic = {'name':'阿宸', 'age':26 , 'tel':1784168}

    class My:
        def func(self):
            return '下班吃饭去'

        @classmethod
        def get_cls(cls):
            return '等下吃烧烤'

        @staticmethod
        def get_static():
            return '走着'

    obj = My()

    return render(request , 'var.html' , locals())
<p>变量</p>
{{ name }}
{{ age }}
{{ gender }}
<p>读取视图中的函数</p>
{{ func }}<br>
{{ ls }}
<p>使用索引获取序列中的数据</p>
{{ ls.1 }}  {# 获取列表中下标为1的数据 #}
<p>格式:变量名.下标</p>
{{ dic.name }}
{{ dic.tel }}
<p>html接收类参数</p>
{{ My }}<br>
{{ obj }}
<p>调用类中的方法</p>
{{ obj.get_cls }}
{{ obj.get_static }}
{{ obj.func }}
<p>类名调用</p>
{{ My.func }}
{{ My.get_cls }}
{{ My.get_static }}

2、过滤器

过滤器可以用来显示变量的一些信息,而不显示变量的具体数据

格式:{{ 变量名|过滤器名称:数据 }}

<p>使用default过滤器</p>
<p>当变量的值为空或者false的时候返回后面的数据</p>
{{ name|default:'萘唐' }}<br>
<p>使用length过滤器</p>
<p>返回数据长度</p>
{{ ls|length }}
{{ name|length }}
<p>使用slice</p>
<p>字符串切片</p>
{{ name|slice:1 }}
<p>random过滤器</p>
<p>在指定的列表中随机获取数据</p>
{{ ls|random }}
<p>safe过滤器</p>
<p>可以将是html标签的字符串变量进行转换格式</p>
{{ html }}
{{ html|safe }}
{{ name|safe }}

自定义过滤器

在应用下创建templatetags

在这个文件夹下创建一个py文件

导入
from django import template
register = template.Library()
from django import template

register = template.Library()

# 自定义过滤器
# 过滤器最多只能接收两个参数
# 使用语法糖 @register.filter
# name 是定义过滤器的名称
@register.filter(name='num')
def my_num(num_1 , num_2):
    return num_1 * num_2
<p>使用自定义过滤器</p>
{# 导入过滤器模块 #}
{% load mytag %}
{{ ls.1|num:300 }}

3、include标签

可以实现继承的模式。多个页面中有多个重复的内容 , 可以将这一部分单独设置一个html文件 , 使用include标签来进行继承操作。

<p>使用now标签获取到格式化时间</p>
{% now "Y年m月d日 H时i分s秒" %}
<p>导入固定模板的html页面内容</p>
{# include 模板文件名 #}
{#  方式二:在导入模板的时候使用with导入参数 #}
{% include 'set.html' with name='阿宸一号' %}
<body>
<p>作者:{{ name }}</p>
<p>联系地址:广州天河</p>
<p>联系电话:1784168</p>
</body>
def text(request):
    # 方式一:在视图函数中传入数据  {'name':'阿宸'}
    return render(request , 'time.html')

4、流程控制

for循环

{% for 变量名 in 迭代对象 %}
……
{% endfor %}

if判断

{% if 判断条件 %}
……
{% elif 判断条件 %}
……
{% else %}
{% endif %}
{{ dic }}
<ul>
    {% for key , value in dic.items %}
        <li>{{ key }} = {{ value }}</li>
    {% endfor %}
</ul>
<p>数学成绩为:{{ dic.math }}</p>
{% if dic.math >= 110 %}
    等级:A
{% elif dic.math >= 90 %}
    等级:B
{% elif dic.math >= 70 %}
    等级:C
{% elif dic.math >= 60 %}
    等级:D
{% else %}
    等级:不合格
{% endif %}

3、模板继承

子模板通过继承获取父模板的内容 ,并且可以在子模板中覆盖父模板的内容。

父模板用{% block 名称%} 和{% endblock 名称%} 标签所涵盖的内容,子模板可以继承使用并且可以进行重新编写。

子模板继承用{% extends "父模板文件名"%}

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>首页</title>
    <link rel="stylesheet"   href="/static/bootstrap-3.4.1-dist/css/bootstrap.min.css">
    <script src="/static/js/jquery-3.6.0.min.js"></script>
    <script src="/static/bootstrap-3.4.1-dist/js/bootstrap.min.js"></script>
</head>
<body>

    <ul class="nav nav-tabs">
      <li role="presentation" class="active"><a href={% url 'ind' %}>首页</a></li>
      <li role="presentation"><a href={% url 'r' %}>注册</a></li>
      <li role="presentation"><a href={% url 'lon' %}>登录</a></li>
    </ul>

    {% block head %}
    <div class="panel panel-default">
      <div class="panel-heading">首页</div>
      <div class="panel-body">
        欢迎光临
      </div>
    </div>
    {% endblock head %}
    
    {% block name %}

    {% endblock name %}
</body>
</html>
{% extends 'index.html' %}

{% block head %}
    <div class="panel panel-default">
      <div class="panel-heading">登录</div>
      <div class="panel-body">
        <form>
            <input type="text" name="name">
            <input type="password" name="password">
            <input type="submit" value="登录">
        </form>
      </div>
    </div>
{% endblock head %}

{% block name %}
<h1>今天的内容我们就讲到这里啦</h1>
{% endblock name %}

标签:name,dic,html,django,过滤器,Django,模板
From: https://www.cnblogs.com/fhy-blog/p/17466218.html

相关文章

  • Java爬虫通用模板它来了
    Java爬虫在实际应用中有很多场景,例如:数据挖掘和分析、搜索引擎、电商平台、数据更新、监控与预测等行业都需要爬虫借入,那么在实际爬虫中需要注意什么?又该怎么样快速实现爬虫?下面的文章值得看一看。单线程java爬虫以下是一个基本的Java爬虫模板,使用Jsoup库进行HTML解析和网络请求:im......
  • 深入了解 HTTP 请求和响应、表单处理和验证、URL 路由和重定向、Web 服务和 API 开发,
    在Web开发中,了解HTTP请求和响应、表单处理和验证、URL路由和重定向、Web服务和API开发,以及PHP模板引擎和视图是非常重要的。本文将深入探讨这些概念,并提供相关的代码示例。1.HTTP请求和响应HTTP(超文本传输协议)是用于在客户端和服务器之间传输数据的协议。在Web开发中......
  • Java爬虫通用模板它来了
    Java爬虫在实际应用中有很多场景,例如:数据挖掘和分析、搜索引擎、电商平台、数据更新、监控与预测等行业都需要爬虫借入,那么在实际爬虫中需要注意什么?又该怎么样快速实现爬虫?下面的文章值得看一看。单线程java爬虫以下是一个基本的Java爬虫模板,使用Jsoup库进行HTML解析和网络请......
  • 10_How deploy a Django application using Nginx & Gunicorn in Production
     地址:https://www.codewithharry.com/blogpost/django-deploy-nginx-gunicorn/  HowtohostDjangoApplicationusinggunicorn&nginxinProductionInthispost,wewillseehowtousenginxwithgunicorntoservedjangoapplicationsinproduction. Dj......
  • Django实现crontab远程任务管理系统
    前面有文章介绍过使用django-crontab和apscheduler模块管理Django本身应用的定时任务。注意这里说的是Django本身应用的定时任务,也就是说定时任务本身是Django应用中的对应的函数功能。• django任务管理之crontab[1]• django任务管理-apscheduler[2]这里也大概总结下dja......
  • 题解 P4556 [Vani有约会]雨天的尾巴 /【模板】线段树合并
    传送门如题目所言,这就是个线段树合并的板子题。题目大意题目描述首先村落里的一共有\(n\)座房屋,并形成一个树状结构。然后救济粮分\(m\)次发放,每次选择两个房屋\((x,y)\),然后对于\(x\)到\(y\)的路径上(含\(x\)和\(y\))每座房子里发放一袋\(z\)类型的救济粮。然......
  • 快速排序模板
    思路快排基本思路应该就是二分+递归,从两侧同时(实则先从右往左)往中间找,同时和参变量对比,发现位置颠倒后交换位置,然后通过二分将其一块一块的分割开,直到分割到一个元素位置,即完成了快排。代码#include<bits/stdc++.h>usingnamespacestd;inta[101],n;voidquicksort(intleft......
  • Luogu P4556 [Vani有约会]雨天的尾巴 /【模板】线段树合并
    [Vani有约会]雨天的尾巴/【模板】线段树合并题目背景深绘里一直很讨厌雨天。灼热的天气穿透了前半个夏天,后来一场大雨和随之而来的洪水,浇灭了一切。虽然深绘里家乡的小村落对洪水有着顽固的抵抗力,但也倒了几座老房子,几棵老树被连根拔起,以及田地里的粮食被弄得一片狼藉。无奈......
  • AI人工智能领域精美绘图模板分享
    1人工智能的发展历程如今人工智能的应用渗透了我们生活的方方面面,我们都知道人工智能的前景十分光明,在未来对于推进人类发展进程也是非常重要的,但其实人工智能的发展道路是极其曲折的,下面就将人工智能的发展历程分为如下六个阶段:起步发展期反思发展期应用发展期低迷发展期......
  • 用户模板和用户场景
    (1)名字:小明(2)年龄:20(3)收入:0(4)代表的用户在市场上的比例和重要性:当代大学生(5)使用这个软件的典型场景:外出运动(6)使用本软件/服务的环境:网络覆盖范围内(7)知识层次和能力:熟练使用手机(8)用户的动机、目的和困难:记录行踪、记录运动轨迹1.背景:(1)典型用户:小明(2)用户的需求/迫切需要解决的......