DJango 基础 (5)
模板加载静态文件
在settings.py文件中添加STATICFILES_DIRS,设置静态文件目录路径,同templates。
# settings.py文件中
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR,'static')
]
在项目的根目录下创建static目录,在目录中添加三种静态文件:
# /static/js/myjs.js
alert('hahahaha');
# --------------------------------
# /static/css/mystyle.css
body{
background: skyblue;
}
#---------------------------------
# /static/image/myimage.jpg
##存入图片
静态文件创建好了之后就可以在模板里面加载静态文件。
{# /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.py
、models.py
等文件处于同一级别目录下。 如果目录不存在则创建它——不要忘记创建__init__.py
文件以使得该目录可以作为Python 的包。
你的自定义的标签和过滤器将放在templatetags
目录下的一个模块里。 这个模块的名字是你稍后将要载入标签时使用的,所以要谨慎的选择名字以防与其他应用下的自定义标签和过滤器名字冲突。
例如,你的自定义标签/过滤器在一个名为common_extras.py
的文件中,那么你的app目录结构看起来应该是这样的:
common/
__init__.py
models.py
templatetags/
__init__.py
common_extras.py
views.py
在模板中像如下这样使用:
{% load common_extras %}
为了让{% load %}
标签工作,包含自定义标签的应用必须在INSTALLED_APPS
中。在 templatetags
包中放多少个模块没有限制。 只需要记住{% load %}
声明将会载入给定模块名中的标签/过滤器,而不是应用的名称。
为了成为一个可用的标签库,这个模块必须包含一个名为 register
的变量,它是template.Library
的一个实例,所有的标签和过滤器都是在其中注册的。 所以把如下的内容放在你的模块的顶部:
from django import template
register = template.Library()
编写自定义模板过滤器
自定义过滤器就是一个带有一个或两个参数的Python 函数:
(输入的)变量的值 —— 不一定是字符串形式。
参数的值 —— 可以有一个初始值,或者完全不要这个参数。
例如,在{{ var|foo:"bar" }}
中,foo
过滤器应当传入变量var
和参数 "bar"
。
定义过滤器的例子:
def mycut(value, arg):
return value.replace(arg, '')
这个过滤器的使用:
{{ somevariable|mycut:"0" }}
大多数过滤器没有参数。 在这种情况下,你的函数不带这个参数即可。 例如:
def mylower(value):
return value.lower()
注册自定义过滤器
django.template.Library.filter()
让自定义的过滤器在Django模板语言中可用,就需要把它注册为你的 Library
实例:
register.filter('mycut', mycut)
register.filter('mylower', mylower)
Library.filter()
方法需要两个参数:
过滤器的名称(一个字符串对象)
编译的函数 – 一个Python函数(不要把函数名写成字符串)
还可以把register.filter()
用作装饰器:
@register.filter(name='mycut')
def mycut(value, arg):
return value.replace(arg, '')
@register.filter
def mylower(value):
return value.lower()
没有声明 name
参数,Django将使用函数名作为过滤器的名字。
如果你正在编写一个只希望用一个字符串来作为第一个参数的模板过滤器,你应当使用stringfilter
装饰器。 这将在对象被传入你的函数之前把这个对象转换成它的字符串值:
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
实例注册代码
register.tag('current_time', do_current_time)
tag()
方法有两个参数:
模板标记的名称 - 字符串。 如果省略,将使用编译函数的名称。
编译的函数 – 一个Python函数(不要把函数名写成字符串)
与过滤器注册一样,也可以将其用作装饰器。
例子:
# 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
参数︰
# 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 标签"。
例子:
# hello_django/music/templatetages/common_tag.py
@register.inclusion_tag('music/show_tag.html')
def show_results():
li = ['python','java','c++']
return {'choices':li}
{# hello_django/music/templates/show_tag.html#}
<ul>
{% for i in choices %}
<li>{{ i }}</li>
{% endfor %}
</ul>
分配标签
为了简单化设置上下文中变量的标签的创建,Django 提供一个辅助函数assignment_tag
。 除了将标签的结果存储在指定的上下文变量中,而不是直接输出,该函数的工作方式与simple_tag()
相同。
我们之前的current_time
函数从而可以这样写︰
# hello_django/music/templatetages/common_tag
@register.assignment_tag
def current_time_1(format_string):
return datetime.datetime.now().strftime(format_string)
然后你可以使用as
参数后面跟随变量的名称将结果存储在模板变量中,并将它输出到你觉得合适的地方︰
{% current_time_1 '%Y-%m-%d %H:%M:%P' as ctime %}
The time is {{ ctime }}
DJango 基础 (5)的更多相关文章
- Python之路-(js正则表达式、前端页面的模板套用、Django基础)
js正则表达式 前端页面的模板套用 Django基础 js正则表达式: 1.定义正则表达式 /.../ 用于定义正则表达式 /.../g 表示全局匹配 /.../i 表示不区分大小写 /.../m ...
- Django 基础教程
Django 基础教程 这是第一篇 Django 简介 » Django 是由 Python 开发的一个免费的开源网站框架,可以用于快速搭建高性能,优雅的网站! 你一定可以学会,Django 很简单 ...
- python的django基础篇
一.Django基础 Django 是用Python开发的一个免费开源的Web框架,可以用于快速搭建高性能,优雅的网站! Django的特点: 强大的数据库功能:拥有强大的数据库操作接口(QueryS ...
- Python学习(二十六)—— Django基础一
转载自:http://www.cnblogs.com/liwenzhou/p/8258992.html 一.Web框架本质 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的 ...
- Django基础(一)
Django基础(一) 知识预览 Django基本命令 二 路由配置系统(URLconf) 三 编写视图 四 Template 五 数据库与ORM admin的配置 一 什么是web框架? 框架,即f ...
- python3之Django基础篇
一.Django基础 Django 是用Python开发的一个免费开源的Web框架,可以用于快速搭建高性能,优雅的网站! Django的特点: 强大的数据库功能:拥有强大的数据库操作接口(QueryS ...
- DJango 基础 (1)
django基础 知识点: 基本认知 工具准备 新建项目 目录及文件说明 开发服务器 创建视图函数 新建应用(app) 1.基本认知 Django是用Python开发的一个免费开源的Web框架,可以用 ...
- Django基础和基本使用
Django基础 Django是Python下的一款著名的Web框架 框架 任何语言进入到高级部分时,会有认证.session.http.连接数据库等等功能操作,没有框架时需要自己实现 框架 是整个或 ...
- {Django基础十之Form和ModelForm组件}一 Form介绍 二 Form常用字段和插件 三 From所有内置字段 四 字段校验 五 Hook钩子方法 六 进阶补充 七 ModelForm
Django基础十之Form和ModelForm组件 本节目录 一 Form介绍 二 Form常用字段和插件 三 From所有内置字段 四 字段校验 五 Hook钩子方法 六 进阶补充 七 Model ...
- {Django基础九之中间件} 一 前戏 二 中间件介绍 三 自定义中间件 四 中间件的执行流程 五 中间件版登陆认证
Django基础九之中间件 本节目录 一 前戏 二 中间件介绍 三 自定义中间件 四 中间件的执行流程 五 中间件版登陆认证 六 xxx 七 xxx 八 xxx 一 前戏 我们在前面的课程中已经学会了 ...
随机推荐
- Gym - 100796I:Shell Game(圆台的最大内接球半径)
pro:如题.给定上圆半径r,下圆半径R,高度h.问最大内接球半径. sol:由对称性,我们放到二维来看,即给这么一个梯形,问最大内接圆半径. 证明:如果是一个三角形的内接圆C,他内切于三边. 现在这 ...
- 基于python的发送邮件案例
#coding:utf-8 #强制使用utf-8编码格式 import smtplib #加载smtplib模块 from email.mime.text import MIMEText from e ...
- day05 字典
今日内容(dict) 1.基本格式 2.独有方法 3.公共 4.强制转换 1.基本格式 字典(可变类型,3.6之后是有序) 帮助用户去表示一个事物的信息(事物是有多个属性) 键值不能为集合,列表,字典 ...
- 备忘:EBS参考链接
帮助手册查阅网址http://docs.oracle.com/cd/V46499_01/current/html/docset.html 官方 http://www.oracleappshub.co ...
- Excel转datatable
如果想支持 .xls,.xlsx 两种格式 则必须安装一个exe文件,下载路径https://www.microsoft.com/zh-CN/download/details.aspx?id=1325 ...
- 学习Unity -- 理解依赖注入(IOC)三种方式依赖注入
IOC:英文全称:Inversion of Control,中文名称:控制反转,它还有个名字叫依赖注入(Dependency Injection).作用:将各层的对象以松耦合的方式组织在一起,解耦,各 ...
- InnoDB存储引擎文件
InnoDB存储引擎文件 MySQL数据库包括数据库本身的文件和存储引擎文件.数据库自身的文件由参数文件(my.cnf).错误日志文件.慢查询日志文件.查询日志文件.二进制日志文件.套接字文件.pid ...
- 怎样使用PL/SQL在不安装oracle 客户端的情况下使用oracle数据库
在网上查了好多这方面的例子,但是似乎说的都不准确,在咨询朋友后终于实现了本机不安装oracle 的情况下,在windows系统上实现连接服务器上的数据库,现在贴出来与大家共享. 首先,我们需要一个PL ...
- CenterOS7.5中搭建wordpress
centeros7.5中搭建wordpress 1.环境 云平台:华为云 服务器操作系统:CentOS7.: 博客部署的服务器:Apache HTTP: 数据库:mysql: 框架:wordpress ...
- 详解卷积神经网络(CNN)
详解卷积神经网络(CNN) 详解卷积神经网络CNN 概揽 Layers used to build ConvNets 卷积层Convolutional layer 池化层Pooling Layer 全 ...