• python+Django框架运用(二)


    Django应用 与 模板

    应用就是网站中的一个独立的程序模块,在Django 中,主目录一般不处理用户的具体请求,

    主目录主要做的是项目的初始化和设置,以及请求的分发。

    创建应用

    1. 创建应用命令

      ./manage.py startapp 应用名称

    2. 注册应用

      创建完应用后,必须在settings.py中进行注册

      在文件中找到INSTALLED_APPS(列表)中加上注册的应用名

    3.应用的结构组成

      migrations(目录)   ------> 存放数据库中间文件(日志文件)

      __init__.py      ------> 应用的初始化文件

      admin.py         ------> 应用的后台管理配置文件

      apps.py        ------> 应用的属性配置文件

      models.py       ------> 模型文件,与数据库相关

      tests.py        ------> 测试模块

      views.py       ------> 定义视图的文件

      

    Django中模板--(Templates)

    模板是要动态给用户呈现的网页内容,其实就是一个网页(一个前后端结合的网页)。

    模板设置

    模板的设置与settings.py中TEMPLATES变量(列表)相关,里面存放的字典。

    BACKEND: 指定模板的搜索引擎(一般不用更改)

    DIRS:指定模板的存放的目录,如果为空,Django会到应用中去搜索名为templates

      的目录,作为模板的管理目录。

      例如: DIRS = ['index.temp']   ----> 表示指定index应用的模板存放目录为temp

      ps: 这里一般都是为空,然后在每个应用中创建一个templates目录。

    APP_DIRS:(布尔值)为True则表示,先从DIRS中指定的目录中查找模板,

      没有再搜templates目录

    模板的加载方式

    1、使用loader获取模板,通过HttpResponse进行响应

    
    
    from django.shortcuts import render
    from django.template import loader
    def login_views(request):
      # 加载模板,login.html为模板文件
      te = loader.get_template('login.html')
      # 将模板渲染成字符串
      html = te.render()
      # HttpResponse响应给客户端
      return HttpResponse(html)

    2.使用render直接加载模板并返回(推荐)

    from django.shortcuts import render
    def login_views(request):
    
      # 将模板渲染,并返回
      return render(request, 'login.html')

    模板的变量

    将后端的数据传递给模板,在模板中,会根据变量的值进行显示。

    在Django中,允许传递给模板的数据类型,数值类型、字符串、列表、元组、字典、函数、对象

    # loader 方式
    def login_views(request):
        dic = {
            'user': 'laige''pwd': '123456'  
        }
        
        te = loader.get_template('login.html')
        html = te.render(dic)
        return HttpResponse(html)
    
    
    # render 方式
    def login_views(request):
        dic = {
            'user': 'laige''pwd': '123456'  
        }
        # 将模板渲染,并返回
        return render(request, 'login.html', dic)
    
    # 将本地变量传入 -- locals()
    def login_views(request):
        dic = {
            'user': 'laige''pwd': '123456'  
        }
        # 将模板渲染,并返回
        return render(request, 'login.html', locals())

    模板的标签

    标签可以将服务器中的一些功能嵌入到模板中

    基本语法:{%  标签内容  %}

    常用的一些标签:

    <!--  for 循环  
        允许使用 for 提供的内置变量 - forloop
        1、forloop.counter 
        记录当前循环的次数,从1开始
        2、forloop.first
        是否是第一次循环(第一项)
        3、forloop.last
        是否是最后一次循环(最后一项)
    -->
    {% for 变量 in 迭代对象 %}
        <h3>hello  hello !</h3>
    {% endfor %}
    
    
    
    <!--  if 条件  
        ps: 注意条件中and和or不能同时出现
    -->
    {% if 条件 %}
        <p> 满足条件,执行!</p>
    {% elif 条件1 %}
        <p> 满足条件1,执行!</p>
    {% else %}
        <p>不满足以上条件,执行!</p>
    {% endif %}

    ps:这里只是举了两个常用的例子,

    具体更多的标签内容可以查看文档:https://docs.djangoproject.com/en/2.0/ref/templates/builtins/

    模板的过滤器

    过滤器主要是在显示变量的数据之前,对数据进行筛选和改变

    基本语法:{{ 变量|过滤器:参数 }}

    几个简单的过滤器:

    <!-- 将value变为大写字符  -->
    {{value|upper}}
    
    <!-- 将value变为小写字符  -->
    {{value|lower}}
    
    <!-- 将num累加到value之后 -->
    {{value|add:num}}
    
    <!-- 将value四舍五入到n位小数 -->
    {{value|floatformat:n}}
    
    <!-- 将字符串截取到n位(包含...) -->
    {{value|truncatechars:n}}

    ps:具体更多的过滤器内容可以查看文档:https://docs.djangoproject.com/en/2.0/ref/templates/builtins/

     模板的静态文件处理

    这里的静态文件指的是不需要嵌入到服务器端的内容的文件,

    比如:图片、css、js、html都属于静态文件

    在Django中静态文件的处理,需要在settings.py中设置静态文件的访问和存储路径:

    # 1、指定静态文件访问路径:
    # 当访问路径是:http://localhost:8000/static/*** 一律到静态文件存储路径中搜索静态文件
    STATIC_URL = '/static/'
    
    
    # 2、指定静态文件存储路径:
    # 在项目中的static目录中以及所有应用中的static目录中存放的都是静态文件
    STATICFILES_DIRS=(BASE_DIR, 'static')

    Django中访问静态文件:

    <!-- 直接使用localhost:8000/static/*** -->
    <img src='/static/***'>
    
    
    
    <!-- 在模板的最顶层增加 -->
    {% load static %}
    <!-- 使用{% static %}访问静态文件资源  -->
    <img src="{% static 'img/logo.jpg' %}">

     

    模板的继承

    当多个模板(网页)具备大部分相同内容时,可以使用继承的方式,将相同的内容

    继承过来,再增加、修改属于自己的内容即可。

    基础语法:

    <!-- 父模板 -->
    <!-- 必须在父模板中标识出哪些内容时允许被修改的 -->
    <!--
        block标签,定义子模板允许被修改的内容
        在子模板中,如果不修改block中内容,则按照父模板中内容正常显示
    -->
    {% block  名称 %}
        父模板正常显示,可在子模板修改的内容
    {% endblock %}
    <!-- 子模板 -->
    
    <!-- 在最顶端增加,继承父模板 
        login.html是父模板的文件名称
    -->
    {% extents 'login.html' %}
    
    <!-- 增加block标签, 修改需要更改的内容 
    这里修改的内容必须是在父模板中使用block定义过的
    -->
    {% block 名称 %}
        子模板自己的内容
    {% endblock %}

    *这里补充一个内容:

      urls.py路由文件中的url函数,url有个name参数,是指定路径的别名的。

      url(r'^login/$', login_views, name='login')

      只有定义之后,可以在模板中使用url的别名:

      {% url '别名' %}

      例如:

        <a href={% url 'login' %}>登录</a>

        这样点击登录这个链接,就会根据别名,跳转到login_views视图

    未完待续......

  • 相关阅读:
    Makefile Special Built-in Target Names(Makefile内建特殊目标)
    著名的变量命名规则
    bottle py
    LuCI中文手册
    LuCI
    LuCI2 (OpenWrt web 管理界面)
    LuCI2 (OpenWrt web user interface)
    OpenWrt netifd
    加载时间/性能
    Taming the asynchronous beast with ES7
  • 原文地址:https://www.cnblogs.com/hxgoto/p/9320231.html
Copyright © 2020-2023  润新知