django是实现了MVT处理模式的web框架
- M:model: 数据模型
- V:view: 视图
- T:template: 模板
主要内容
1、view 视图-------网页
-
子项目的网页视图处理[html]
-
子项目的静态文件处理[css/js/image/..]
-
根项目的公共网页视图处理
-
根项目的公共静态文件处理
这里以门户网站mysite来举例说明1、手动创建一个web项目 django-admin startproject mysite 2、增加一个子模块blog: django-admin startapp blog 3、配置路由,修改主目录下settings.py 文件 4、开始定义视图模块
具体操作如下:
--- 子项目的网页的定义:
1、在子模块blog 根目录下新建文件`templates/`文件夹
2、在`blog/templates/` 目录下新建`blog/`文件夹----> `blog/templates/blog/`
3、在 `blog/templates/blog/`文件加下新建'html' 文件 (如下图所示)
html文件.png
在视图处理函数中,渲染返回指定的网页
Django底层复杂的操作方式
# 引入需要的模块
from django.template import loader
from django.http import HttpResponse
# 第一种方式
def index1(request):
# 查询到网页并加载到程序中
# get_template()函数,会自动在子项目中templates文件中查询文件
# 如果查询到文件,直接将文件加载到程序中
temp = loader.get_template('blog/index.html')
# 把网页返回给客户端进行展示
# msg DTL模板语法--变量操作
return HttpResponse(temp.render({'msg':'我是服务器复杂方式返回的数据'},request))
---
接下来需要配置blog子项目的urls.py 文件
# 导入需要的模块
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$',views.index1,name='index1'),
url(r'^index1/$',views.index1,name='index1'),
]
编辑index.html文件(复杂方式和简单操作共用)
Django提供的快捷操作方式
# 引入需要的模块
from django.shortcuts import render
# 第二种方式
def index2(request):
'''
网页展示第二种方式
:param request: 请求对象,将渲染的网页返回给谁---request确定
参数2:要渲染的网页,会自动在子项目中的templates/文件中查询
参数三:传递给网页上要展示的字典数据
:return:
'''
return render(request,'blog/index.html',{'msg':'我是服务器简单方式返回的数据'})
---
编辑urls.py 文件
url(r'^index1/$',views.index1,name='index1'),
--- 子项目的静态网页视图处理(css/js/images/....):
1、在子项目blog中新建一个文件夹 :`static/`
2、在static/文件夹中,创建一个子文件夹:名称和子项目一致:`static/blog/`
3、在`static/blog/`目录下就可以定义不同静态文件的目录了
静态文件.png
--- 根项目的公共网页视图处理
根项目中的网页一般都是所有子项目公共可以访问的网页根项目中公共网页的操作和子项目有所不一致
1、在项目主文件夹中,创建一个任意名称的文件夹,如:temp/,用来存放公共网页
2、修改根项目配置文件settings.py中的TEMPLATES配置项,DIRS中添加刚才新增的文件夹名称
3、在视图处理函数中,就可以访问这个网页了!
跟项目中的视图文件,静态文件
--- 根项目的公共静态文件处理
1、 在项目主文件下,创建一个任意名称的文件夹,如:static/,用来存放静态文件
2、修改根项目配置文件settings.py,新增STATICFILES_DIRS配置项,将刚才创建的文件夹添加进去
image.png
2、template django模板------数据从后端传递给前台页面展示
1、模板变量操作
views.py文件
def index1(request):
temp = loader.get_template('blog/index.html')
# 把网页返回给客户端进行展示
# DTL模板语法--变量操作
return HttpResponse(temp.render({'msg':'我是服务器复杂方式返回的数据'},request))
---
index.html文件
<h1>{{msg}}</h1>
---
在urls.py中配置路由
url(r'^index1/$',views.index1,name='index1'),
2、模板程序结构——选择结构
编辑views.py文件
def index3(req):
#DTL模板语法----选择结构
# name = 'tom'
name = ''
return render(req,'blog/index3.html',{'name': name})
---
index3.html
<h1>博客首页--选择结构</h1>
{% if name %}
<h2>欢迎{{name}}登陆成功</a></h2>
{% else %}
<h2>用户名不存在</h2>
{% endif %}
---
在urls.py中配置路由
url(r'^index3/$',views.index3,name='index3'),
3、模板程序结构——循环结构
编辑views.py文件
def index4(req):
#DTL模板语法之:循环结构
name = ['李易峰','杨幂','李曦瑞','迪丽热巴']
# name = ''
return render(req,'blog/index4.html',{'name_list':name})
---
index4.html
<h1>DTL模板语法之:循环结构</h1>
{% for name in name_list %}
<li>{{forloop.counter}}.{{name}}<a href="#">查看更多信息</a></li>
<li>{{forloop.counter0}}.{{name}}<a href="#">查看更多信息</a></li>
{% empty %}
<li>暂无用户使用</li>
{% endfor %}
4、模板继承操作( 体现的思想:内容的复用 和 功能的扩展)
新建一个news模块进行路由等其他内容的配置
在mysite\news\templates\news 新建base.html编辑模板
<head>
<meta charset="UTF-8">
<title>公司门户首页-{% block title %}公司首页{% endblock %}</title>
</head>
<body>
<h1>公司网站首页头部公共内容</h1>
{% block top %}公司门户首页头部内容{% endblock %}
<h2>公司网站首页中间显示的公共内容</h2>
{% block content %}公司门户首页头部内容{% endblock %}
<h3>公司网站首页中间显示的公共内容</h3>
{% block bottom %}公司门户首页头部内容{% endblock %}
</body>
-----------------------------------------------------------------------
在mysite\news\templates\news 新建index1.html编辑模板
<!-- 让当前网页继承base.html网页模板 -->
{% extends 'news/base.html' %}
<!-- 填充标题部分内容 -->
{% block title %}
第一个页面标题
{% endblock%}
<!-- 头部内容部填充 -->
<!-- 填充主题部分内容 -->
{% block content %}
第一个页面主题部分展示的数据
<ul>
<li><a href="#">友情链接</a></li>
</ul>
{% endblock%}
<!-- 底部内容部填充 -->
---
接下来编辑views.py 和 urls.py 文件即可
网友评论