模板加载静态文件

在settings.py文件中添加STATICFILES_DIRS,设置静态文件目录路径,同templates。

  1. # settings.py文件中

    STATIC_URL = '/static/'

    STATICFILES_DIRS = [
       os.path.join(BASE_DIR,'static')
    ]

在项目的根目录下创建static目录,在目录中添加三种静态文件:

  1. # /static/js/myjs.js
    alert('hahahaha');

    # --------------------------------

    # /static/css/mystyle.css
    body{
       background: skyblue;
    }
    #---------------------------------

    # /static/image/myimage.jpg
    ##存入图片

静态文件创建好了之后就可以在模板里面加载静态文件。

  1. {# /templates/index.html#}
    {% load static %}
    <!DOCTYPE html>
    <html lang="en">
    <head>
       <meta charset="UTF-8">
       <title>静态文件加载</title>
    </head>
    <body>
    <link rel="stylesheet" href="{% static 'css/mystyle.css' %}">
    <script src="{% static 'js/myjs.js' %}"></script>
    图片:
    <img src="{% static 'img/myimage.jpg' %}" alt="">
    </body>
    </html>

自定义过滤器及标签

为了解决应用中展示逻辑的需求,Django的模板语言提供了各式各样的built-in tags and filters。 然而,你或许会发现模板内建的这些工具集合不一定能全部满足你的功能需要。 您可以通过使用Python定义自定义标签和过滤器来扩展模板引擎,然后使用{% load %}标签。

代码布局

指定自定义模板标签和过滤器的最常见的地方在Django应用程序中。

当将Django应用程序添加到INSTALLED_APPS中时,在下面描述的常规位置中定义的任何标签将自动在模板中加载。

这个应用应该包含一个templatetags 目录,和views.pymodels.py等文件处于同一级别目录下。 如果目录不存在则创建它——不要忘记创建__init__.py 文件以使得该目录可以作为Python 的包。

你的自定义的标签和过滤器将放在templatetags 目录下的一个模块里。 这个模块的名字是你稍后将要载入标签时使用的,所以要谨慎的选择名字以防与其他应用下的自定义标签和过滤器名字冲突。

例如,你的自定义标签/过滤器在一个名为common_extras.py的文件中,那么你的app目录结构看起来应该是这样的:

  1. common/
      __init__.py
      models.py
      templatetags/
          __init__.py
          common_extras.py
      views.py

在模板中像如下这样使用:

  1. {% load common_extras %}

为了让{% load %}标签工作,包含自定义标签的应用必须在INSTALLED_APPS中。在 templatetags 包中放多少个模块没有限制。 只需要记住{% load %} 声明将会载入给定模块名中的标签/过滤器,而不是应用的名称。

为了成为一个可用的标签库,这个模块必须包含一个名为 register的变量,它是template.Library 的一个实例,所有的标签和过滤器都是在其中注册的。 所以把如下的内容放在你的模块的顶部:

  1. from django import template

    register = template.Library()

编写自定义模板过滤器

自定义过滤器就是一个带有一个或两个参数的Python 函数:

  • (输入的)变量的值 —— 不一定是字符串形式。

  • 参数的值 —— 可以有一个初始值,或者完全不要这个参数。

例如,在{{ var|foo:"bar" }}中,foo过滤器应当传入变量var和参数 "bar"

定义过滤器的例子:

  1. def mycut(value, arg):
      return value.replace(arg, '')

这个过滤器的使用:

  1. {{ somevariable|mycut:"0" }}

大多数过滤器没有参数。 在这种情况下,你的函数不带这个参数即可。 例如:

  1. def mylower(value):
      return value.lower()
注册自定义过滤器

django.template.Library.filter()

让自定义的过滤器在Django模板语言中可用,就需要把它注册为你的 Library实例:

  1. register.filter('mycut', mycut)
    register.filter('mylower', mylower)

Library.filter()方法需要两个参数:

  1. 过滤器的名称(一个字符串对象)

  2. 编译的函数 – 一个Python函数(不要把函数名写成字符串)

还可以把register.filter()用作装饰器:

  1. @register.filter(name='mycut')
    def mycut(value, arg):
      return value.replace(arg, '')

    @register.filter
    def mylower(value):
      return value.lower()

没有声明 name 参数,Django将使用函数名作为过滤器的名字。

如果你正在编写一个只希望用一个字符串来作为第一个参数的模板过滤器,你应当使用stringfilter装饰器。 这将在对象被传入你的函数之前把这个对象转换成它的字符串值:

  1. from django import template
    from django.template.defaultfilters import stringfilter
    register = template.Library()
    @register.filter
    @stringfilter   #注释掉此句传递int类型会报错
    def mylower(value):
      return value.lower()

编写自定义模板标签

简单标签django.template.Library.simple_tag()

许多模板标签需要许多参数 - 字符串或模板变量,并且仅在基于输入参数和一些外部信息进行一些处理后返回结果。 例如,current_time 标签可能接受一个格式字符串,并返回与之对应的格式化后的时间。

为了简单化这些类型标签的创建,Django 提供一个辅助函数simple_tag。 这个函数是django.template.Library 的一个方法,接受一个任意数目的参数的函数,将其包装在一个render 函数和上面提到的其他必要部分中,并在模板系统中注册它。

注册标签,向模块的Library实例注册代码

  1. register.tag('current_time', do_current_time)

tag()方法有两个参数:

  1. 模板标记的名称 - 字符串。 如果省略,将使用编译函数的名称。

  2. 编译的函数 – 一个Python函数(不要把函数名写成字符串)

与过滤器注册一样,也可以将其用作装饰器。

例子:
  1. # hello_django/music/templatetages/common_tag.py

    import datetime
    from django import template
    register = template.Library()

    @register.simple_tag
    def current_time(format_string):
       return datetime.datetime.now().strftime(format_string)

如果你的模板标签需要访问当前上下文,你可以在注册标签时使用takes_context 参数︰

  1. # hello_django/music/templatetages/common_tag.py

    @register.simple_tag(takes_context=True)
    def current_time(context ):
       tm = context['format_string']
       return datetime.datetime.now().strftime(tm)
       
    # 这里的tm是从视图函数context中传进来的。
包含标签django.template.Library.inclusion_tag()

另一种常见类型的模板标签是通过渲染另外一个模板来显示一些数据。这些类型的标签被称为"Inclusion 标签"。

例子:
  1. # hello_django/music/templatetages/common_tag.py

    @register.inclusion_tag('music/show_tag.html')
    def show_results():
       li = ['python','java','c++']
       return {'choices':li}
  1. {# hello_django/music/templates/show_tag.html#}

    <ul>
      {% for i in choices %}
           <li>{{ i }}</li>
      {% endfor %}
    </ul>

分配标签

为了简单化设置上下文中变量的标签的创建,Django 提供一个辅助函数assignment_tag。 除了将标签的结果存储在指定的上下文变量中,而不是直接输出,该函数的工作方式与simple_tag()相同。

我们之前的current_time 函数从而可以这样写︰

  1. # hello_django/music/templatetages/common_tag

    @register.assignment_tag
    def current_time_1(format_string):
       return datetime.datetime.now().strftime(format_string)

然后你可以使用as 参数后面跟随变量的名称将结果存储在模板变量中,并将它输出到你觉得合适的地方︰

  1. {% current_time_1 '%Y-%m-%d %H:%M:%P' as ctime %}
    The time is {{ ctime }}

DJango 基础 (5)的更多相关文章

  1. Python之路-(js正则表达式、前端页面的模板套用、Django基础)

    js正则表达式 前端页面的模板套用 Django基础 js正则表达式: 1.定义正则表达式 /.../  用于定义正则表达式 /.../g 表示全局匹配 /.../i 表示不区分大小写 /.../m ...

  2. Django 基础教程

    Django 基础教程 这是第一篇 Django 简介 »  Django 是由 Python 开发的一个免费的开源网站框架,可以用于快速搭建高性能,优雅的网站! 你一定可以学会,Django 很简单 ...

  3. python的django基础篇

    一.Django基础 Django 是用Python开发的一个免费开源的Web框架,可以用于快速搭建高性能,优雅的网站! Django的特点: 强大的数据库功能:拥有强大的数据库操作接口(QueryS ...

  4. Python学习(二十六)—— Django基础一

    转载自:http://www.cnblogs.com/liwenzhou/p/8258992.html 一.Web框架本质 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的 ...

  5. Django基础(一)

    Django基础(一) 知识预览 Django基本命令 二 路由配置系统(URLconf) 三 编写视图 四 Template 五 数据库与ORM admin的配置 一 什么是web框架? 框架,即f ...

  6. python3之Django基础篇

    一.Django基础 Django 是用Python开发的一个免费开源的Web框架,可以用于快速搭建高性能,优雅的网站! Django的特点: 强大的数据库功能:拥有强大的数据库操作接口(QueryS ...

  7. DJango 基础 (1)

    django基础 知识点: 基本认知 工具准备 新建项目 目录及文件说明 开发服务器 创建视图函数 新建应用(app) 1.基本认知 Django是用Python开发的一个免费开源的Web框架,可以用 ...

  8. Django基础和基本使用

    Django基础 Django是Python下的一款著名的Web框架 框架 任何语言进入到高级部分时,会有认证.session.http.连接数据库等等功能操作,没有框架时需要自己实现 框架 是整个或 ...

  9. {Django基础十之Form和ModelForm组件}一 Form介绍 二 Form常用字段和插件 三 From所有内置字段 四 字段校验 五 Hook钩子方法 六 进阶补充 七 ModelForm

    Django基础十之Form和ModelForm组件 本节目录 一 Form介绍 二 Form常用字段和插件 三 From所有内置字段 四 字段校验 五 Hook钩子方法 六 进阶补充 七 Model ...

  10. {Django基础九之中间件} 一 前戏 二 中间件介绍 三 自定义中间件 四 中间件的执行流程 五 中间件版登陆认证

    Django基础九之中间件 本节目录 一 前戏 二 中间件介绍 三 自定义中间件 四 中间件的执行流程 五 中间件版登陆认证 六 xxx 七 xxx 八 xxx 一 前戏 我们在前面的课程中已经学会了 ...

随机推荐

  1. [ 随手记 1 ] C/C++宏,普通函数,内联函数

    函数定义 C 语言中的函数定义的一般形式如下: return_type function_name( parameter list ) { body of the function } 在 C 语言中 ...

  2. A Statistical Model for Scientific Readability-paper

    Authors: Luo SiCarnegie Mellon University, Pittsburgh, PA Jamie CallanCarnegie Mellon University, Pi ...

  3. 3.python中的基本概念

    注释: 单行注释 # 多行注释 """ ''' 变量: 把程序运行中产生的值,暂时存储在内存,方便后面的程序调用. 变量命名的规则: 1.用数字.字母.下划线组成. 2. ...

  4. Java BigInterger类

    BigInteger概述 可以让超过Integer范围内的数据进行运算 构造方法 public BigInteger(String val) 成员方法 public BigInteger add(Bi ...

  5. because there was insufficient free space available after evicting expired cache entries

    Tomcat运行的时候哗哗哗的报警告 版本是Tomcat 8.5.15 告警信息关键字如下 because there was insufficient free space available af ...

  6. win10+vs2015编译caffe的cpu debug版本、部署matcaffe

    一.编译caffe 1.安装python-3.5.2-amd64.exe https://www.python.org/ftp/python/3.5.2/python-3.5.2-amd64.exe ...

  7. CentOS 7下给nginx安装SSL证书

    0. DNS要能解析你的网址(域名解析和主机解析,例如example.com和www.example.com都要能解析.注意泛解析记录*.example.com可以存在但在本文中暂时无法用于https ...

  8. 廖雪峰Java7处理日期和时间-1概念-1日期和时间

    1.日期 日期是指某一天,如2016-11-20,2018-1-1 2.时间有2种: 不带日期的时间:14:23:54 带日期的时间:2017-1-1 20:21:23,唯一确定某个时刻 3.时区 时 ...

  9. Centos7 安装redis集群哨兵模式

    https://blog.csdn.net/lihongtai/article/details/82826809

  10. jquery如何实现当页面下拉到一定位置时,右下角出现回到顶部图标

    渐进式返回顶部