应用就是网站中的一个独立的程序模块,在Django 中,主目录通常不处理用户的具体请求,css
主目录主要作的是项目的初始化和设置,以及请求的分发。html
1. 建立应用命令数据库
./manage.py startapp 应用名称django
2. 注册应用后端
建立完应用后,必须在settings.py中进行注册服务器
在文件中找到INSTALLED_APPS(列表)中加上注册的应用名app
3.应用的结构组成函数
migrations(目录) ------> 存放数据库中间文件(日志文件)oop
__init__.py ------> 应用的初始化文件测试
admin.py ------> 应用的后台管理配置文件
apps.py ------> 应用的属性配置文件
models.py ------> 模型文件,与数据库相关
tests.py ------> 测试模块
views.py ------> 定义视图的文件
模板是要动态给用户呈现的网页内容,其实就是一个网页(一个先后端结合的网页)。
模板的设置与settings.py中TEMPLATES变量(列表)相关,里面存放的字典。
BACKEND: 指定模板的搜索引擎(通常不用更改)
DIRS:指定模板的存放的目录,若是为空,Django会到应用中去搜索名为templates
的目录,做为模板的管理目录。
例如: DIRS = ['index.temp'] ----> 表示指定index应用的模板存放目录为temp
ps: 这里通常都是为空,而后在每一个应用中建立一个templates目录。
APP_DIRS:(布尔值)为True则表示,先从DIRS中指定的目录中查找模板,
没有再搜templates目录
一、使用loader获取模板,经过HttpResponse进行响应
from django.shortcuts import render
from django.template import loader
def login_views(request): # 加载模板,login.html为模板文件 te = loader.get_template('login.html') # 将模板渲染成字符串 html = te.render() # HttpResponse响应给客户端 return HttpResponse(html)
2.使用render直接加载模板并返回(推荐)
from django.shortcuts import render
def login_views(request): # 将模板渲染,并返回 return render(request, 'login.html')
将后端的数据传递给模板,在模板中,会根据变量的值进行显示。
在Django中,容许传递给模板的数据类型,数值类型、字符串、列表、元组、字典、函数、对象
# loader 方式 def login_views(request): dic = { 'user': 'laige', 'pwd': '123456' } te = loader.get_template('login.html') html = te.render(dic) return HttpResponse(html) # render 方式 def login_views(request): dic = { 'user': 'laige', 'pwd': '123456' } # 将模板渲染,并返回 return render(request, 'login.html', dic) # 将本地变量传入 -- locals() def login_views(request): dic = { 'user': 'laige', 'pwd': '123456' } # 将模板渲染,并返回 return render(request, 'login.html', locals())
标签能够将服务器中的一些功能嵌入到模板中
基本语法:{% 标签内容 %}
经常使用的一些标签:
<!-- for 循环 容许使用 for 提供的内置变量 - forloop 一、forloop.counter 记录当前循环的次数,从1开始 二、forloop.first 是不是第一次循环(第一项) 三、forloop.last 是不是最后一次循环(最后一项) --> {% for 变量 in 迭代对象 %} <h3>hello hello !</h3> {% endfor %} <!-- if 条件 ps: 注意条件中and和or不能同时出现 --> {% if 条件 %} <p> 知足条件,执行!</p> {% elif 条件1 %} <p> 知足条件1,执行!</p> {% else %} <p>不知足以上条件,执行!</p> {% endif %}
ps:这里只是举了两个经常使用的例子,
具体更多的标签内容能够查看文档:https://docs.djangoproject.com/en/2.0/ref/templates/builtins/
过滤器主要是在显示变量的数据以前,对数据进行筛选和改变
基本语法:{{ 变量|过滤器:参数 }}
几个简单的过滤器:
<!-- 将value变为大写字符 --> {{value|upper}} <!-- 将value变为小写字符 --> {{value|lower}} <!-- 将num累加到value以后 --> {{value|add:num}} <!-- 将value四舍五入到n位小数 --> {{value|floatformat:n}} <!-- 将字符串截取到n位(包含...) --> {{value|truncatechars:n}}
ps:具体更多的过滤器内容能够查看文档:https://docs.djangoproject.com/en/2.0/ref/templates/builtins/
这里的静态文件指的是不须要嵌入到服务器端的内容的文件,
好比:图片、css、js、html都属于静态文件
在Django中静态文件的处理,须要在settings.py中设置静态文件的访问和存储路径:
# 一、指定静态文件访问路径: # 当访问路径是:http://localhost:8000/static/*** 一概到静态文件存储路径中搜索静态文件 STATIC_URL = '/static/' # 二、指定静态文件存储路径: # 在项目中的static目录中以及全部应用中的static目录中存放的都是静态文件 STATICFILES_DIRS=(BASE_DIR, 'static')
Django中访问静态文件:
<!-- 直接使用localhost:8000/static/*** --> <img src='/static/***'> <!-- 在模板的最顶层增长 --> {% load static %} <!-- 使用{% static %}访问静态文件资源 --> <img src="{% static 'img/logo.jpg' %}">
当多个模板(网页)具有大部分相同内容时,可使用继承的方式,将相同的内容
继承过来,再增长、修改属于本身的内容便可。
基础语法:
<!-- 父模板 --> <!-- 必须在父模板中标识出哪些内容时容许被修改的 --> <!-- block标签,定义子模板容许被修改的内容 在子模板中,若是不修改block中内容,则按照父模板中内容正常显示 --> {% block 名称 %} 父模板正常显示,可在子模板修改的内容 {% endblock %}
<!-- 子模板 --> <!-- 在最顶端增长,继承父模板 login.html是父模板的文件名称 --> {% extents 'login.html' %} <!-- 增长block标签, 修改须要更改的内容 这里修改的内容必须是在父模板中使用block定义过的 --> {% block 名称 %} 子模板本身的内容 {% endblock %}
*这里补充一个内容:
urls.py路由文件中的url函数,url有个name参数,是指定路径的别名的。
url(r'^login/$', login_views, name='login')
只有定义以后,能够在模板中使用url的别名:
{% url '别名' %}
例如:
<a href={% url 'login' %}>登陆</a>
这样点击登陆这个连接,就会根据别名,跳转到login_views视图
未完待续......