Django入门 ----模板详解

1. 语法

1. 变量 (variables)

  • 模板中的变量一般使用双括号 {{ }} 包围
  • 使用 . 获取一个变量(字典、对象和列表)的属性
    {{ my_dict.key }}  
    {{ my_object.attribute }}
    {{ my_list.0 }}

2. 标签 (tags)

  • 标签用双括号 {% %} 包裹
# 内容块
{% block content %} 代码块 {% endblock %}

# 防csrf攻击
{% csrf_token %} 表单专用

# for循环
<ul> 
    {% for athlete in athlete_list %}   
    <li>{{ forloop.counter }} - {{ athlete.name }}</li> 
    {% empty %}   
    <li>Sorry, no athletes。</li> 
    {% endfor %} 
</ul>

# if判断
{% if title == "python" %} 
   Say python. 
{% elif title == "django"}
   Say django.
{% elif title == "django"}
   Say django.
{% else %}
   Say java.
{% endif %} 

# url反向解析
{% url 'blog:article_detail' article.id %}

# with
{% with total=business.employees.count %}   
    {{ total }} employee{{ total|pluralize }} 
{% endwith %}

# 载入模板标签过滤器
{% load sometags_library %}

# 模板包含
{% include "header.html" %}

# 模板继承
{% include "base.html" %}

# 获取当前时间now
{% now "jS F Y H:i" %}

3. 过滤器 (filters)

  • 过滤器可以改变变量在模板中的显示形式
  • 比如 {{ article.title | lower }} 中lower过滤器可以让文章的标题转化为小写
过滤器例子作用
lower, upper{{ article.title | lower }}大小写
length{{ name | length }}长度
default{{ value | default: “0” }}默认值
date{{ picture.date | date:”Y-m-j “ }}日期格式
dicsort{{ value | dicsort: “name” }}字典排序
escape{{ title | escape }}转义
filesizeformat{{ file | filesizeformat }}文件大小
first, last{{ list | first }}首或尾
floatformat{{ value | floatformat }}浮点格式
get_digit{{ value | get_digit }}位数
join{{ list | join: “,” }}字符连接
make_list{{ value | make_list }}转字符串
pluralize{{ number | pluralize }}复数
random{{ list | random }}随机
slice{{ list | slice: “:2” }}切片
slugify{{ title | slugify }}转为slug
striptags{{ body | striptags }}去除tags
time{{ value | time: “H:i” }}时间格式
timesince{{ pub_date | timesince: given_date }}
truncatechars{{ title | truncatechars: 10 }}
truncatewords{{ title | truncatewords: 2 }}
truncatechars_html{{ title | truncatechars_html: 2 }}
urlencode{{ path | urlencode }}URL转义
wordcount{{ body | wordcount }}单词字数

2. 加载

1. 模板文件路径

  • 项目(project)模板,一般是项目根目录下的templates文件夹
  • 应用(app)模板,一般是app目录下的app/templates/app文件夹
myproject/ # 项目名
    manage.py
    myproject/
    blog/ # 应用名
        __init__.py
        models.py
        managers.py
        views.py
        urls.py
        templates/ # 应用模板文件
            blog/
                base.html
                list.html
                detail.html
     templates/ # 项目模板文件
         base.html
         index.html

  • 对于上面这种规范的项目布局,在使用render方法指定渲染模板时,无需给出完整的路径,只需给出相对于templates的路径即可
# 指定项目模板
return render(request, "index.html", { "msg": "hello world!",})

# 指定应用模板
return render(request, "blog/list.html", { "articles": articles,})

2. 模板的继承

  • 使用extends标签用于模板继承
  • 可以重写同名模块
# index.html
{% extends "base.html" %}
{% block content %}
     {{ some code }}
{% endblock }

3. 加载静态文件(css, js)

  1. 静态文件属于整个项目project
# 1. 假设属于整个项目的静态文件放在根目录下的static文件夹和/var/www/static/里
# 2. 通过setting.py中STATICFILES_DIRS定义静态文件文件夹列表

STATIC_URL = '/static/'

  1. 静态文件属于各个app
# 1. 在app目录下新建一个static文件夹,然后再建一个app子目录,放入你需要的静态文件
# 2. 此时静态文件路径变为app/static/app/main.js
# 3. 确保 INSTALLED_APPS 中加入了 django.contrib.staticfiles
# 4. 设置静态文件目录STATIC_URL, 默认为static
# 5. 其作用是告诉Django静态文件会存放在各app下的static目录里
STATIC_URL = '/static/'
  1. 模板中引用
{% load static %}

<!DOCTYPE html>
<html lang="en">
<head>
<title>{% block title %} Django Web Applications {% endblock %} </title>
    <link rel="stylesheet" href="{% static 'app/custom.css' %}">
    <script type='text/javascript' src="{% static 'app/main.js' %}"></script>  
  • 首先得载入 static 标签,并且放在html的头部位置
  • 如果 extends 标签和 load 同时存在,extends 需要放在最上面,然后再放 load 等标签
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值