Django入门 ----模板详解

文章目录

    • 1. 语法
      • 1. 变量 (variables)
      • 2. 标签 (tags)
      • 3. 过滤器 (filters)
    • 2. 加载
      • 1. 模板文件路径
      • 2. 模板的继承
      • 3. 加载静态文件(css, js)

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 等标签

你可能感兴趣的:(Django,Python,django,python)