Django基础之模板

一.前言

前面我们讲了视图,我们今天来讲一下模板,模板其实也就是视图中render返回的html进行的渲染,然后展示到浏览器页面上去,那我们今天就来和大家来说一下模板的基本用法

二.寻找html模板

这个也就是我们前面说了的找html,前面已经说过了,我这里再说一遍

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',

],

},

},

]

优先去项目根目录 > 每个已注册的app的templates目录找。

如何选择:

  • 简单的项目,模板都放在根目录。

  • 复杂的项目,模板放在各自的app中,公共部分放在templates目录。

三.模板处理的本质

要学习模板我们就得先知道模板处理的本质和模板的基本用法

本质就是渲染完成后,生成字符串展示在页面上

基本用法就是在视图里面返回一个字典,html里面用{{}}引入想要的名字再进行替换,但是这里有一个要注意的是,他替换是对文本进行完整替换(并不会带上引号),这里举个例子大家就知道了

当我们想弹出名字的时候,这时候我们打开浏览器发现没有弹出,我们点开检查

发现他说往日情怀酿作酒没有定义,我们再看看这个html怎么个回事

发现他并没有把引号加上去,他这个是对内容进行完整替换,而不会加上引号,如果我们要带上引号

这样我们进去就有弹框拉

但是当我们导入一个js的时候

我们发现,js里的内容并没有被渲染,这是因为浏览器加载后先渲染html的内容,再来加载js,此时并不能起到渲染作用,所以引入js中需要注意,如果我们非得在js中使用返回的内容,可以通过在html的script标签定义window全局变量,在js中使用全局变量,或者在js中使用ajax请求来获取数据,这里就不和大家具体说了

四.常用语法

这里就给出代码和注释,方便大家使用

python 复制代码
from django.shortcuts import render
from django.shortcuts import render, HttpResponse,redirect
from django.urls import reverse
from django.http import JsonResponse
from django.views import View

class Person(object):
    def __init__(self,name,age):
        self.name=name
        self.age=age

    def getdata(self):
        return '我是一个人类'

def getname():
    return '往日情怀酿作酒'

def show(request):
    return render(request,'web/login.html',{
        'n1':'往日情怀酿作酒',
        'n2':['请关注','感谢','收藏'],
        'n3':{
            'name':'往日情怀酿作酒',
            'age':'20',
            'hobby':'play coomputer'
        },
        'n4':[
            {'id':1,'name':'Mr.3','age':18},
            {'id':2,'name':'Mr.2','age':18},
            {'id':3,'name':'Mr.2','age':18}
        ],
        'n5':Person('Mr.7',28),
        'n6':getname

    })
html 复制代码
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>

</head>
<body>

{#n1直接写#}
<h1>{{ n1 }}</h1>
<hr>

{#n2是一个数组可以通过for循环遍历每一个值 取出来要加上.#}
<h1>{{ n2.1 }}</h1>
<ul>
    {% for i in n2 %}
        <li>{{ i }}</li>
    {% endfor %}
</ul>
<hr>

{#n3是一个字典,如果不加上item,那么就只能去到键,取值也要用.#}
<ul>
    {% for k,v in n3.items %}
        <li>{{ k }}={{ v }}</li>
    {% endfor %}
</ul>
<hr>

{#n4是一个列表嵌套着字典,这种可以制作一个表格#}
<table border="1">
    {% for i in n4 %}
        <tr>
            <td>{{ i.id }}</td>
            <td>{{ i.name }}</td>
            <td>{{ i.age }}</td>
        </tr>
    {% endfor %}
</table>
<hr>

{#n5是一个类,也可以直接.他的属性和方法,并且函数不要加上括号#}
<h1>{{ n5.name }}</h1>
<h1>{{ n5.age }}</h1>
<h1>{{ n5.getdata }}</h1>
<hr>

{#n6是一个函数,也可以直接执行,但是默认是不让传递参数#}
<h1>{{ n6 }}</h1>
<hr>




</body>
</html>

效果如上图,我们需要主义的点:

1.引用django字典返回的值需要再外面加上{{}}

2.字典和列表都是通过.来取值而不是通过[]

3.函数默认就是给执行了,我们在html里面不需要再加上括号,并且默认是不支持传递参数的

五.内置函数

常用的就这些,这些是django中自带的函数,默认都是不支持传递参数的,用的都很少,一会才是和大家说如何自定义函数并且支持传递参数

六.自定义模板函数

首先要确保我们的app是已经注册的,前面我们也已经注册了,接下来就是要创建一个目录名叫templatetags(名字一定要叫这个)

然后再创建再里面创建一个py文件,作为以后要导入的名字,py文件里面先要加上固定代码

复制代码
from django import template
register=template.Library()

这样我们就能够定义我们想要的函数了

6.1 filer

filter允许的参数是1-2个

可以发现我们把|前面的当成是第一个参数,函数名字后面:是第二个参数

6.2 simple_tag

simple_tag支持任意个参数

他的调用方式和filter不一样,他是{%%}和前面的load一样,他先写函数名,后面用空格间隔第一个参数,第二个参数等等

6.3 inclusion_tag

参数无限制,返回的是一个html片段

这个也是{%%}来调用

七.母版和继承

当我们写html的时候,发现有许多重复的地方,我们就可以把重复的地方写成母板,有需要的地方去继承就行了

我们用 block来隔离独立的内容,继承用extends关键字

通常我们都会继承一下js和css

八.模板的导入

通过include直接进行导入

九.总结

这里也都是讲了知识点,大家所见即所得,记得点赞关注收藏,不记得了记得来看吖

十.补充

下一期将和大家讲解一下中间件,期待大家的点赞关注加收藏

相关推荐
fish_study_csdn4 小时前
pytest 技术总结
开发语言·python·pytest
柏油5 小时前
MySQL InnoDB 行锁
数据库·后端·mysql
咖啡调调。5 小时前
使用Django框架表单
后端·python·django
BO_S__5 小时前
python调用ffmpeg对截取视频片段,可批量处理
python·ffmpeg·音视频
白泽talk5 小时前
2个小时1w字| React & Golang 全栈微服务实战
前端·后端·微服务
摆烂工程师5 小时前
全网最详细的5分钟快速申请一个国际 “edu教育邮箱” 的保姆级教程!
前端·后端·程序员
一只叫煤球的猫5 小时前
你真的会用 return 吗?—— 11个值得借鉴的 return 写法
java·后端·代码规范
就叫飞六吧5 小时前
如何判断你的PyTorch是GPU版还是CPU版?
人工智能·pytorch·python
Asthenia04125 小时前
HTTP调用超时与重试问题分析
后端
颇有几分姿色6 小时前
Spring Boot 读取配置文件的几种方式
java·spring boot·后端