python+Django框架运用(二)
Django应用 与 模板
应用就是网站中的一个独立的程序模块,在Django 中,主目录一般不处理用户的具体请求,
主目录主要做的是项目的初始化和设置,以及请求的分发。
创建应用
1. 创建应用命令
./manage.py startapp 应用名称
2. 注册应用
创建完应用后,必须在settings.py中进行注册
在文件中找到INSTALLED_APPS(列表)中加上注册的应用名
3.应用的结构组成
migrations(目录) ------> 存放数据库中间文件(日志文件)
__init__.py ------> 应用的初始化文件
admin.py ------> 应用的后台管理配置文件
apps.py ------> 应用的属性配置文件
models.py ------> 模型文件,与数据库相关
tests.py ------> 测试模块
views.py ------> 定义视图的文件
Django中模板--(Templates)
模板是要动态给用户呈现的网页内容,其实就是一个网页(一个前后端结合的网页)。
模板设置
模板的设置与settings.py中TEMPLATES变量(列表)相关,里面存放的字典。
BACKEND: 指定模板的搜索引擎(一般不用更改)
DIRS:指定模板的存放的目录,如果为空,Django会到应用中去搜索名为templates
的目录,作为模板的管理目录。
例如: DIRS = ['index.temp'] ----> 表示指定index应用的模板存放目录为temp
ps: 这里一般都是为空,然后在每个应用中创建一个templates目录。
APP_DIRS:(布尔值)为True则表示,先从DIRS中指定的目录中查找模板,
没有再搜templates目录
模板的加载方式
1、使用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': ''
} te = loader.get_template('login.html')
html = te.render(dic)
return HttpResponse(html) # render 方式
def login_views(request):
dic = {
'user': 'laige',
'pwd': ''
}
# 将模板渲染,并返回
return render(request, 'login.html', dic) # 将本地变量传入 -- locals()
def login_views(request):
dic = {
'user': 'laige',
'pwd': ''
}
# 将模板渲染,并返回
return render(request, 'login.html', locals())
模板的标签
标签可以将服务器中的一些功能嵌入到模板中
基本语法:{% 标签内容 %}
常用的一些标签:
<!-- for 循环
允许使用 for 提供的内置变量 - forloop
1、forloop.counter
记录当前循环的次数,从1开始
2、forloop.first
是否是第一次循环(第一项)
3、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中设置静态文件的访问和存储路径:
# 1、指定静态文件访问路径:
# 当访问路径是:http://localhost:8000/static/*** 一律到静态文件存储路径中搜索静态文件
STATIC_URL = '/static/' # 2、指定静态文件存储路径:
# 在项目中的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视图
未完待续......
python+Django框架运用(二)的更多相关文章
- 利用 Python django 框架 输入汉字,数字,字符,等。。转成二维码!
利用 Python django 框架 输入汉字,数字,字符,等..转成二维码! 模块必备:Python环境 + pillow + qrcode 模块 核心代码import qrcode qr = ...
- [Python] Django框架入门
说明:Django框架入门 当前项目环境:python3.5.django-1.11 项目名:test1 应用名:booktest 命令可简写为:python manager.py xxx => ...
- Python Django框架笔记(五):模型
#前言部分来自Django Book (一) 前言 大多数web应用本质上: 1. 每个页面都是将数据库的数据以HTML格式进行展现. 2. 向用户提供修改数据库数据的方法.(例如:注册.发表评 ...
- Python Django框架笔记(三):django工作方式简单说明和创建用户界面
(一) 说明 简单说明下django的工作方式,并举2个例子. (二) Django工作方式 假定我们有下面这些文件 ,这里在前2篇的基础上增加了 templates目录(存放html文件) 和s ...
- Python Django框架笔记(一):安装及创建项目
#推荐一本书<Python核心编程>(适合有一定基础的),美国人Wesley Chun编写的,京东.淘宝应该都有.我是觉得写的很好,详细.简洁.满满的干货,不像有的书整本看完也没什么用. ...
- python django框架(一)
s4day63内容回顾: 1. 安装 2. 创建用户 + 授权 3. 连接 - 数据库 终端创建数据库(字符编码) - 数据表 终端 ORM pymysql create ...)engine=inn ...
- [Python] Django框架入门5——静态文件、中间件、上传图片和分页
说明: 本文主要描述Django其他的内容,涉及静态文件处理.中间件.上传文件.分页等. 开发环境:win10.Python3.5.Django1.10. 一.静态文件处理 在Django项目的静态文 ...
- python Django框架正式准备工作
之前由于不太了解数据库方面的知识,但经过一段时间的web应用的开发学习,成功的用其他框架连接了数据库,并完成了相关操作,数据爬取也初识了,更了解了python这门语言的语法,但路还很长,因此现在才能正 ...
- Python Django 学习 (二) 【Django 模型】
注: 由于自己排版确实很难看,本文开始使用markdown编辑,希望有所改善 官方定义 A model is the single, definitive source of information ...
- Python Django框架笔记(六):模板
(一){%%}和{{ }} {% for post in posts %} <a href=""><h2>{{ post.title }}</h2&g ...
随机推荐
- C# 未能加载文件或程序集“mysql.data”或它的某一个依赖项。找到的程序集清单定义与程序集引用不匹配。 (异常来自 HRESULT:0x80131040)
报错信息: 在web.config中已经加了以下代码. <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-co ...
- 关于kvm虚拟机的克隆方法总结
kvm虚拟机的克隆分为两种情况,第一种kvm宿主机上对虚拟机直接克隆 第二种通过复制配置文件与磁盘文件的虚拟机复制克隆(适用于异机的静态迁移). 现笔者将分别两种kvm虚拟机克隆的的详细操作过程都记录 ...
- mysql操作常用技巧
删除一张表的数据,条件在另一张表 delete a from A a,B b where a.tel=b.tel and a.code=b.code and a.day='201808';
- 基于pandas python的美团某商家的评论销售数据分析(可视化)
基于pandas python的美团某商家的评论销售数据分析 第一篇 数据初步的统计 本文是该可视化系列的第二篇 第三篇 数据中的评论数据用于自然语言处理 导入相关库 from pyecharts i ...
- inline-blcok 之间的空白间隙
前言: inline-blcok 布局时,通常情况下, inline-blocks 之间有空白,尽管通常我们是不想要的,毕竟不像padding或者margin一样好控制,如图: <div cla ...
- Asp.net MVC]Asp.net MVC5系列——实现编辑、删除与明细信息视图
目录 概述 实现信息的明细视图 实现信息的编辑视图 实现信息的删除视图 总结 系列文章 [Asp.net MVC]Asp.net MVC5系列——第一个项目 [Asp.net MVC]Asp.net ...
- Equinox P2 介绍(一)Getting Start
一直觉得 Equinox 的 P2 是个神秘的东西,常常使得 Eclipse 或 Equinox 表现出一些奇怪的行为,于是找来官方文档读一读,试图更好地理解与应用 Equinox . 官方文档很多, ...
- HOJ 2091 Chess(三维简单DP)
Chess My Tags (Edit) Source : Univ. of Alberta Local Contest 1999.10.16 Time limit : 1 sec Memory li ...
- 计蒜客 30996 - Lpl and Energy-saving Lamps - [线段树][2018ICPC南京网络预赛G题]
题目链接:https://nanti.jisuanke.com/t/30996 During tea-drinking, princess, amongst other things, asked w ...
- 设计模式之——flyweight模式
flyweight模式,又叫做享元模式. 顾名思义,享元模式就是共享一个元素. 百度百科 解释为: 享元模式(英语:Flyweight Pattern)是一种软件设计模式.它使用共享物件,用来尽可能减 ...