安装django
具体安装那个版本的django
要看你当前python的版本
pip install django
安装完成后会
django-admin.py startproject [项目名]
执行后会在当前目录下生成一个 [项目名同名的主包]和manage.py(程序的主入口)
切换到有manage.py的路径下
cd [项目名]
然后
启动本地服务
0.0.0.0:8000就是本地服务 访问输入127.0.0.1:8000
这么写是为了让同局域网下的其他人可以通过ip来访问你的服务
python manage.py runserver 0.0.0.0:8000
在初始化结束后主包中有一个urls.py
在这个urls.py文件中去配置路由地址,配置好之后就可以通过url去访问配置好的地址了
views.py
from django.http import HttpResponse
def hello(request):
return HttpResponse("Hello world ! ")
urls.py
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.hello),
]
使用模板常常用引用的模块
from django.shortcuts import render # 用来将数据渲染到html文件中并且返回回来
from django import template # 用来设置自定义过滤器和自定义标签
register = template.Library() #register的名字是固定的,不可改变
from django.utils.safestring import mark_safe # 可以将字符串通过该方法转为html元素
用法一会再说
def runoob(request):
name ="菜鸟教程"
return render(request, "runoob.html", {
"name": name})
@register.filter # 装饰器的参数最多只能有 2 个。
def my_filter(v1, v2):
return v1 * v2
python中有自己的一套模板语法{ { }} {% %}
首先在manage.py同级目录下创建一个templates
文件夹
然后在里面创建html文件
然后
使用模板首先要在主包中的setting.py
配置加载的模板地址
下面的DIRS数组内容就是要新增的
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR,'templates')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
配置好了就可以使用模板了
templates/index.html
{
{name}}
主包\views.py
from django.shortcuts import render
def template(request):
name = '菜鸟教程'
return render(request,'index.html',{
'name':name})
然后在urls
from django.conf.url import url
from . import views
urlpatterns = [
url(r'templateText',views.template)
]
然后就可以通过 url 127.0.0.1:8000/templateText
去访问这个内容
模板用法
{
{
变量名 | 过滤器:可选参数 }}
{
{
name|lower}} # 将英文字母转化为小写
{
{
name|upper}} # 将英文字母转化为大写
也可以嵌套使用 | 又称管道符 可以将上一个的输出当作下一个输入
# 'name':'aaaaa'
{
{
name|first|upper}} # A first获取第一个字符然后后转化为大写
# 'article':"xxxxxx xxxxxxxx xxxxxxxxxx xxxxxxxx"
{
{
article|truncatewords:"2"}} # xxxxxx xxxxxxxx...
# 这是获取当前文章的前两个单纯 超出部分变成...
{
{
article|truncatechars:"2"}} # x...
# 'text':'\cc\'"\cccaaaaa'
{
{
text|addslashes}} # 在反斜杠、单引号、双引号前添加反斜杠
# \\cc\'\"\\cccaaaaa
# import datetime
# now = datetime.datetime.now()
# render(request,'index.html',{'time':now})
{
{
time|date:"Y-m-d"}} # 实例 2020-8-23
# Y-m-d H:i:s 返回年-月-日 小时:分钟:秒
# url = '百度'
{
{
url }} # 百度
{
{
url|safe }} # 百度(可以跳转的超链接)
# safe代码当前的字符串绝对安全不需要转义 然后浏览器就会把他解析成html元素
{
{
acc|default:"我的默认值"}} # 当前面的值返回为false时就会显示默认值
# name = '111'
{
{
name|length}} # 打印当前字符串的长度
# num = 1024
{
{
num|filesizeformat}} # 1.0KB 将文件大小转化为更加可读的显示方式
{
% 语法关键字 %}
{
% end+语法关键字 %}
{
% if name == 123 %}
<div>name == 123</div>
{
% endif %}
{
% if name == 123 %}
<div>name == 123</div>
{
% elif name == 456%}
<div>name == 456</div>
{
% else %}
<div>{
{
name}}</div>
{
% endif %}
if可以使用and or这样的关键字代表 && ||
# 'name':123
{
% ifequel name 123 %}
pass... {
# 会执行这里的内容#}
{
% else %}
这里也支持else分支
{
% endifequal %}
{
% ifnotequal name '123' %}
pass...
{
% endifnotequal %}
# 假如 我在使用这个模板时
# render(request,'index.html',{'arr':[1,2,3,4,5,6]})
{
% for x in arr %}
<div>{
{
x}}</div>
{
{
forloop}} # 这是一个存在于for语法中内容 是一个dict类型有7个属性值
{
{
forloop.counter }}
{
{
forloop.counter0 }}
{
{
forloop.revcounter }}
{
{
forloop.revcounter0 }}
{
{
forloop.first }}
{
{
forloop.last }}
{
{
forloop.parentloop }}
# 空属性 当list为空时展示这个
{
% empty %}
<div>arr的length==0</div>
{
% endfor %}
{
%%
{
% csrf_token %}
这个是防止跨站点伪造请求要写form 中去
假如nav.html是一个多个页面中的公共元素
templates/nav.html
是要在setting.py中加载过的路径才可以导入
{
% include 'nav.html'%}
为降低代码的耦合度,实现复用
{
# 我是一段注释 #}
extends 和 block 的处理逻辑
extends告诉浏览器要重载当前页面内容
block是告诉浏览器那些部分不需要重载 通过 block 名称 这个名称去判断那里不重载
注意:{
% extends 'xxx.html'%}
必须写在python中提供的标签中的第一个 然后他会对之后的内容进行重载 前面的html标签不会重载
{
% extends '父模板路径' %}
{
% block 名称 %}
内容
{
% endblock %}
extends是加载父模板
假如
'nav.html'
<div>我是nav</div>
{
% block my %}
<div>我也是nav</div>
{
% endblock%}
'index.html'
<div>我是index.html页面</div>
{
% extends 'nav.html' %}
{
% block my%}
<div>不,你是index</div>
{
% endblock%}
**页面最后会解析成**
<div>我是index.html页面</div>
<div>我是nav</div>
<div>不,你是index</div>
接下来
在manage.py同级下创建templatetags
文件夹
templatetags/my_tags.py
from django import template
register = template.Library() # register名字固定
@register.filter # 自定义过滤器修饰符
def my_filter(v1,v2): # 最多两个参数
return v1 * v2
@register.simple_tag # 自定义标签
def my_tag1(v1,v2,v3): # 多少参数都可以 可变参数还没试过
return v1 * v2 * v3
# 可以将字符串转化为html标签的方法
from django.utils.safestring import mark_safe
@register.simple_tag
def my_html(v1, v2):
temp_html = "" %(v1, v2)
return mark_safe(temp_html)
现在写好了这些自定义内容
然后要把他们挂到服务里面需要修改setting.py
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [BASE_DIR+"/templates",],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
"libraries":{ # 添加这边三行配置
'my_tags':'templatetags.my_tags' # 添加这边三行配置
} # 添加这边三行配置
},
},
]
使用自定义
{
# 使用前要把这个加载到html中 #}
{
% load my_tags%}
{
{
11|my_filter:22 }} # 11 * 22
{
% my_tag1 11 22 33 %} # 11 * 22 * 33
{
% my_html "zzz" "xxx" %} # 会返回一个input
有些静态资源是要存储到服务器上的比如图片、视频 服务启动之后要通过url去访问这些资源
配置路径
在manages.py同级下创建statics
文件夹
修改setting.py
STATIC_URL = '/static/' # url访问前缀 还有别名
STATICFILES_DIRS = [
os.path.join(BASE_DIR,'statics')
]
然后就可以 通过 127.0.0.1:8000/static/文件名称
去访问静态资源
使用静态资源时可以通过url 也可以通过
{% load static %}
{% static 文件在静态目录下的地址 %}