1、Django简介:
是一个开放源代码的Web应用框架,由Python写成。采用了MVC的框架模式,即模型M,视图V和控制器C。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是CMS(内容管理系统)软件。
Django是一个基于MVC构造的框架。但是在Django中,控制器接受用户输入的部分由框架自行处理,所以 Django 里更关注的是模型(Model)、模板(Template)和视图(Views),称为 MTV模式
2、Django目录的简要说明:
1、 manage.py
manage.py是用于与该django进行交互的命令行工具集的入口,也就是项目管理器。我们通过执行python manage.py来查看所有命令。
2、 _init.py
这是python中声明模块的文件,内容默认为空。有了它,myblog就成可了一个模块,可以直接引用
3、settings.py
项目的总配置文件,里面包含了数据库、web应用、时间等配置
4、 urls.py
url配置文件,django项目中所有的地址页面都需要在这个文件中配置url
5、. wsgi.py
python应用与web服务器之间的接口,英文名为Python Web Server Gateway Interface,没事不用去动它
6、views.py文件
一般我们将视图函数单独的写在一个脚本文件中,一般名称为views.py
7、templates
就是放你所需要的html文件,有时候它需要在settings文件中配置
8、static文件夹,用来放一些静态文件,比如图片,css文件,js文件等等
3、 Django模板系统
(1)目的:向页面中填充内容。
(2)常用符号:
如果在模板中需要解析变量使用{{}}.
如果在模板中进行逻辑相关操作使用{%%}
注释 {# ... #},单行注释。
(3)
在Django的模板系统中变量使用的语法:{{ 变量名 }}。
当模版引擎遇到变量,就会用值替换掉变量。
变量的命名可以是字母数字以及下划线 ("_")的组合。
变量名称中不能有空格或标点符号。
( 对于目前的我来说,传递数据的方式就是字典的方式,即在html文件中,同过{字典的键},来得到Python代码的值)
html文件:
veiws文件:
urls文件中(urlpatterns 的值):
(4)点(.)的特殊含义(important)
字典查询 :如果向页面传递的是一个字典类型变量,变量名.key 获取值
属性或方法查询:如果传递一个对象,变量名.变量名
(此变量名有可能是属性,有可能是无参数方法名称)。
数字索引查询:如果传递一个列表,变量名.索引。
举例:
对象的方式:
views.py文件:
class Person():
def __init__(self,name):
self.name=name
p1=Person('老大')
p3=Person('老三')
p2=Person('老二')
list_name=[p1,p2,p3]
def demo8_filter(request):
return render(request, 'filter&&Tags.html', {'demo_for':list_name})
urls.py文件:
path('demo_filter8/', demo8_filter)
html文件
{{ demo_for.0.name }}{{ demo_for.1.name }}{{ demo_for.2.name }}
4、Filters 过滤器
在Django的模板语言中,通过使用 过滤器 来改变变量的显示。(注:过滤器是函数)
过滤器的语法: {{ 变量名|过滤器名称:参数 }}
使用管道符"|"来应用过滤器。
(1).default:如果一个变量是false或者为空,使用给定的默认值。 否则,使用变量的值。
(2).length:返回值的长度,作用于字符串和列表。
(3).slice:切片格式:{{value|slice:“2:-1”}}
(4).date:日期格式化过滤器:格式:{{ value|date:“Y-m-d H:i:s”}}
(5).safe
Django的模板中会对HTML标签和JS等语法标签进行自动转义,原因显而易见,这样是为了安全。但是有的时候我们可能不希望这些HTML元素被转义,比如我们做一个内容管理系统,后台添加的文章中是经过修饰的,这些修饰可能是通过一个类似于FCKeditor编辑加注了HTML修饰符的文本,如果自动转义的话显示的就是保护HTML标签的源文件。为了在Django中关闭HTML的自动转义有两种方式,如果是一个单独的变量我们可以通过过滤器“|safe”的方式告诉Django这段代码是安全的不必转义。
比如:value = “点我”
格式:{{ value|safe}}
(6).cut
移除value中所有的与给出的变量相同的字符串
格式:{{ value|cut:’ ’ }},如果value为’i love you’,那么将输出’iloveyou’.
(7).join
使用拼接符连接列表,例如Python的str.join(list)
格式: {{value|join:”_”}}
代码实例:
veiws.py文件:
from django.shortcuts import HttpResponse,render
import datetime
class Person():
def __init__(self,name):
self.name=name
p1=Person('老大')
p3=Person('老三')
p2=Person('老二')
list_name=[p1,p2,p3]
#过滤器,将大写的HELLO 改为 小写的hello 用 lower
def demo_filter(request):
return render(request, 'filter&&Tags.html', {'str': 'HELLO'})
#默认值
def demo1_filter(request):
return render(request, 'filter&&Tags.html', {'str': ''})
#length 查看长度
def demo2_filter(request):
return render(request, 'filter&&Tags.html', {'str': '小狗狗'})
#slice 切片
def demo3_filter(request):
return render(request, 'filter&&Tags.html', {'strr': 'asasasadajfdadlfjlfdsa'})
#date 时间
def demo4_filter(request):
return render(request, 'filter&&Tags.html', {'strr_date':datetime.datetime.now()})
#safe 弹窗提示
def demo5_filter(request):
js="""
<script>
alert('hello')
</script>
"""
return render(request, 'filter&&Tags.html', {'strr_js': 'dsasasasasa'})
#cut 切空格 i love you -->iloveyou
def demo6_filter(request):
return render(request, 'filter&&Tags.html', {'str_cut': 'i love you'})
#join 拼接 用‘-’来拼接 iloveyou-->i
def demo7_filter(request):
return render(request, 'filter&&Tags.html', {'str_join': 'i love you'})
#标签 for循环
def demo8_filter(request):
return render(request, 'filter&&Tags.html', {'demo_for':list_name})
#标签 for--empty循环
def demo9_filter(request):
list_name=[]
return render(request, 'filter&&Tags.html', {'demo_for_empty':list_name})
#标签 if 判断,个数超过10 显示内容,反之不显示
def demo10_filter(request):
return render(request, 'filter&&Tags.html', {'demo_if':' sajlds'})
html文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{{ str }}
<br>
{#过滤器 将大写变为小写#}
{{ str|lower }}
<hr>
{#默认值#}
{{ str|default:'我是你爸爸' }}
<hr>
{#length#}
{{ str }} <br>
{{ str|length }}
<hr>
{#slice 切片#}
{{ strr }} <br>
{{ strr|slice:'0:3' }}
<hr>
{#safe,弹窗#}
{{ strr_js }}
<br>
{{ strr_js|safe }}
<hr>
{#date时间#}
{{ strr_date }}
<br>
{{ strr_date|date:"Y-m-d H:i:s" }}
<hr>
{#cut 切空格#}
{{ str_cut }}
<br>
{{ str_cut|cut:' ' }}
<hr>
{#join 字符串拼接#}
{{ str_join }}
<br>
{{ str_join|join:'_' }}
<hr>
{#标签,for循环输出name_list#}
<ul>
{% for foo in demo_for %}
<li>{{ forloop.counter }}:{{ foo.name }}--->{{ forloop.first }}--->{{ forloop.last}}</li>
{% endfor %}
</ul>
<hr>
{#标签,for-empty循环输出name_list#}
<ul>
{% for foo in demo_for_empty %}
<li>{{ foo.name }}</li>
{% empty %} {#如果列表没东西#}
<spaan>空空如也</spaan>
{% endfor %}
</ul>
<hr>
{#标签,if 如果字母个数超过10 ,则显示,反之,不显示#}
<ul>
{% if demo_if|length > 10 %}
这个超过了10
{% endif %}
</ul>
</body>
</html>
urls文件
from django.contrib import admin
from django.urls import path
from .views import demo_filter,demo1_filter,demo2_filter,demo3_filter,demo4_filter,demo5_filter,demo6_filter
from .views import demo7_filter,demo8_filter,demo9_filter,demo10_filter
urlpatterns = [
path('admin/', admin.site.urls),
path('demo_filter/', demo_filter),#lower大小写
path('demo_filter1/', demo1_filter),#default默认值
path('demo_filter2/', demo2_filter),#length长度
path('demo_filter3/', demo3_filter),#slice
path('demo_filter4/', demo4_filter),#时间date
path('demo_filter5/', demo5_filter),#safe
path('demo_filter6/', demo6_filter),#cut
path('demo_filter7/', demo7_filter),#join i_ _l_o_v_e_ _y_o_u
path('demo_filter8/', demo8_filter),#标签,for循环遍历出对象的name
path('demo_filter9/', demo9_filter),#标签,for-empty循环遍历出对象的name,如果列表中没有 执行empty下的内容
path('demo_filter10/', demo10_filter),#标签 if,判断,个数超过10 显示内容,反之不显示
]