• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
难受得一匹
博客园    首页    新随笔    联系   管理    订阅  订阅
模板变量,过滤器和静态文件引用

模板变量,过滤器和静态文件引用

模板路径

  • Djiango先到settings里面找templates下的DIRS查看是否有路径,也是从上往下依次寻找,找到就返回。
  • 如果DIRS没有,就到APP_DIRS里面寻找。但是APP要先在INSTALLED_APPS里面进行注册然后根据INSTALLED_APPS里面从上往下顺序依次寻找。

模板变量

  • 动态页面:随时间改变会改变相应数据内容等(并不是JS就是动态页面)

  • 静态页面:反之

  • 语法:{{变量名}},变量名命名规则和py变量一样,但是却不能以下划线_开头;注意避免关键字。

例如编写显示时间:

from datetime import datetime

def index(request):
    now = datetime.now()
    return render(request,'teacher/index.html',context={'now' : now})

#HTML
<p>当前时间是:{{now}}</p>
#注意,俩个大括号里面的now对应的是context里的key的now

此时显示的时间并不是北京时间,要进行修改。
到项目目录下的settings里面最下面的TIME_ZONE = 'UTC'进行修改
改为TIME_ZONE = 'Asia/Shanghai'
(不要问我为什么不是Beijing,改成Beijing会报错,毕竟上海比较有名吧,估计是历史原因)

修改之后:

关于模板变量的解析

- 列表list
    lt = [0,1,2]
    return render(request,'teacher/index.html',
                  context={
                      'lt':lt
                  })

#HTML
<p>传递的列表是:{{ lt }}</p>
<p>列表下标是1的元素是:{{ lt.1 }}</p>

说明:
传递列表的时候获取某个元素要使用list_name.索引的形式进行获取

结果如图:

  • 字典
dt = {'name' : '小明','age' : 1}
 return render(request,'teacher/index.html',
                  context={
                      'dt':dt
                  })

#HTML
<p>传递的字典是:{{ dt }}</p>
<p>传递的字典['name']是:{{ dt.name }}</p>

说明:同样是通过dt_name.key的形式获取某个value

结果如图:

  • 函数
    def func():
        return 'Hello world'

    return render(request,'teacher/index.html',
                  context={
                      'func':func
                  })

#HTML
<p>传递的func是:{{ func }}</p>

说明:
函数不能设置有参数,只能设置无参数函数。因为在解析的时候解析的是变量名,而变量名是不可以携带变量的。

结果如图:

变量解析规则

  1. 当模板引擎遇到了变量时,会计算该变量,并以结果替换之
  2. 当模板引擎遇到了变量时,按照以下顺序尝试查找:
    • 字典键值查找
    • 属性或方法查找
    • 数字索引查找
  3. 如果结果是一个可调用的(callabled),则调用他,结果为模板变量的值

解释:

  1. 如果ret = 1+1,的时候,解析出来的结果会用2代替1+1
  2. 字典.方法名,会解析出来方法的返回值;但是如果字典里面含有和方法重名的key的时候,会按照顺序,解析为所对应的value
  3. 调用函数

常用的过滤器

现在先介绍内置过滤器(自定义以后聊)

过滤器:

  • 语法:{{fruits|lower}}
  • 作用: 对变量进行过滤。在真正渲染出来之前,过滤器会根据功能处理好变量,然后得出结果后再替换掉原来的变量展示出来。
  • 管道符号进行链式调用,比如实现一个功能,先把所有字符变成小写,把第一个字符转换成大写。{
  • 使用参数:过滤器可以使用参数,在过滤器名称后面使用冒号”:”再加上参数,比如要把一个字符串中所有的空格去掉,则可以使用cut过滤器,{{fruits|cut:" "}}

语法:{{变量名|过滤器}}
例如:

  • 时间的:{{name|date:"D d M Y"}}
  • 列表的:
    • name|add:数字
    • name|first/last
    • name|slice:"num:num"

注意:不要习惯性在冒号俩边加上空格,会报错

常用的过滤器:

date和time过滤器格式:

静态文件的引用

路径设置

静态文件由内建APP'django.contrib.staticfiles'管理,调试用到,实际使用不会用到
django.contrib.staticfiles这个app被包含在INSTALL_APPS中
配置语法:

#setting.py
STATICFILES_DIRS = []

步骤:

  1. 在项目根目录下创建一个static,注意要分APP文件夹
  2. 写入STATIC_URL = '/static/'(默认就有)
  3. 在settings最下面加入STATICFILES_DIRS = [os.path.join(BASE_DIR,'static')]

静态文件引用

{% load static %}#写在模板顶部

#导入的时候
src = "{% static 'app_name/img/name.jpg' %}"
如此类推
posted on 2019-03-27 15:19  难受得一匹  阅读(154)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3