• Django笔记&教程 3-1 模板(Template)基础


    Django 自学笔记兼学习教程第3章第1节——模板(Template)基础
    点击查看教程总目录

    1 介绍

    模板文件:让Django能够自动生成html代码

    作为一个web框架,Django需要需要在html页面里展示python变量值或使用python代码
    直接在html里面写入python代码是不行的,所以需要一种方便的方式(根据python变量或python代码)来动态生成HTML。
    最常见的方法是使用模板。

    注:想要弄懂模板,必须先懂点HTML,不用精通,认识和了解html基础语法、代码结构、相关概念就可以了,

    2 代码示例

    background.html:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        
        <title>
            学生选课管理系统
        </title>
    </head>
    <body>
    <div class="main-container">
        <div class="main-header">
            <div class="main-title">学生选课管理系统</div>
            <div class="sub-title">Student Course Management System</div>
            {% block welcome_message %}
            {% endblock %}
        </div>
        <div class="login-container">
            {% block login_container %}
            {% endblock %}
        </div>
    </div>
    </body>
    </html>
    
    

    login_home.html

    {% extends "user/background.html" %}
    {% block login_container %}
    <div class="login-kind student-login-button">
        <a href="">学生登录</a>
    </div>
    <div class="login-kind teacher-login-button">
        <a href="">教师登录</a>
    </div>
    {% endblock %}
    

    这里我们先不急着弄懂里面每行的意思,先观察一下模板(Template)html和普通的html有什么区别。

    懂一点html的话,我们就会发现,模板(Template)里面多了一些这样的语句,这在html中是没有的

    {% block welcome_message %}
    {% endblock %}
    
    {% block login_container %}
    {% endblock %}
    
    {% extends "user/background.html" %}
    {% block login_container %}
    {% endblock %}
    

    这样的语句有什么特点呢。其写法是{%符号开头,以%}符号结尾,这两个符号和内部的文本用空格相隔。

    这是Django模板语言的一种Tags(标签)语法,
    Django模板语言的几种语法我们将在本章第二节做大类介绍,第三节做具体的介绍。

    3 视图调用与传参

    本文第二部分展示了一个模板的示例。
    但是该模板要在前端展示出来,绝不是通过直接请求html对应的文件路径url来获得的。
    而是要通过视图函数渲出来。

    这里举个实例,本文第二部分的login_home.html在项目中的相对路径为
    templates/user/login_home.html,用视图函数渲染这个模板,一个简单的写法如下

    # views.py
    from django.shortcuts import render
    
    def home(request):
        return render(request, "user/login_home.html")
    

    访问一个会调用该视图函数的url,即可得到渲染后的login_home.html如下图。

    在这里插入图片描述

    渲染模板的语法十分简单:
    先从django.shortcuts中导入render方法
    调用render方法,
    第一个参数为视图函数接受的请求对象request
    第二个参数为模板文件的在模板文件夹下的相对路径,在上面的例子中是"user/login_home.html"

    这里我们举得例子是一个不用往模板中传入变量的例子。
    但实际上,模板的设计就是让我们能够在里面展示python变量值或使用python代码。

    所以往模板里面传入变量是一个基础操作,这个时候需要设置render里面的context变量,这是一个字典变量。
    context变量的键是模板中能够直接使用的变量名,对应的值即是变量的值。
    举个例子,需要往里面传入变量name

    # views.py
    from django.shortcuts import render
    
    def home(request):
        my_name = "Big Shuang"
        context = {
            "name": my_name
        }
        return render(request, "user/login_home.html", context)
    

    在模板中要是用"Big Shuang"这个值,可以直接调用name这个变量。
    只不过语法上还有点要求,一般在模板中会写成{{ name }}这样来调用视图中传入的变量。
    具体模板的语法会在后面几个小节展开去说。

    4 模板设置

    参考目录:https://docs.djangoproject.com/en/2.2/ref/settings/#std:setting-TEMPLATES

    模板的设置在setting.py变量TEMPLATES 里,默认值如下:

    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': [],
            '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',
                ],
            },
        },
    ]
    

    变量TEMPLATES 为所有模板引擎的设置的列表。列表中的每一项都是一个字典,其中包含单个引擎的选项。
    其中:

    1. DIRS:模板文件目录(引擎将按顺序搜索查找)。
      如项目文件夹下新建模板文件夹templates,则必须在设置里面的DIRS里添加项目文件夹"templates/"
    2. APP_DIRS:默认为True,代表能够在已安装的应用程序(setting.py里的变量INSTALLED_APPS里的app)中查找模板源文件。
      所以在已安装的应用程序里,新建模板文件夹templates,在里面写模板文件,视图函数能够自动去找到对应的模板文件,是不用修改设置的。
  • 相关阅读:
    快速瘦身大米瘦身法 健康程序员,至尚生活!
    20个生活小习惯"狠"减肥 健康程序员,至尚生活!
    橙子帮助减肥,谁都可以轻松做到 健康程序员,至尚生活!
    10个减肥小贴士,日常必备哦! 健康程序员,至尚生活!
    有源淹没分析arcgis_ArcGIS水文分析实战教程(15)库容和淹没区计算
    maven:apache.poi下载不了
    springboot:@RequestBody 注解只能处理json格式的请求字符串吗?
    arcpy计算统计值
    arcgis栅格计算器
    GeoTools:polygon 转 multipolygon&遍历multipolygon中的polygon
  • 原文地址:https://www.cnblogs.com/BigShuang/p/14285582.html
Copyright © 2020-2023  润新知