Django视图函数 Django模块系统,过滤器,标签

请求流程和视图函数

流程

(1) .启动服务端等待客户端来连接

(2) .浏览器发出请求然后经过wsgiref.py模块。

(3) .执行urls.py中的列表,请求url和列表中的参数进行匹配。

(4) .匹配成功后执行对应的视图函数。

(5) .将结果返回给浏览器。

(6) .断开连接

视图函数

(1) .函数名称任意,但是一般要见名知意(看见函数名称就知道做什么事情)

(2) .函数至少有一个参数,一般命名为request,request参数是django.http模块中的 HttpRequest类的一个对象包含了所有的请求信息,例如请求路径,参数等等。

(3) .返回值 HttpResponse的实例可以给浏览器返回一段文本信息。

views.py文件

一般我们将视图函数单独的写在一个脚本文件中,一般名称为views.py

Django模块系统

模板系统(template)

向页面中填充内容

模板系统常用符号

如果在模板中需要解析变量使用{{}}

如果在模板中进行逻辑相关操作使用{%%}

注释 {# … #},单行注释【ctrl+/】,多行注释【ctrl+ship+/】

变量

在Django的模板系统中变量使用的语法:{{ 变量名 }}。

当模版引擎遇到变量,就会用值替换掉变量。

变量的命名可以是字母数字以及下划线 ("_")的组合。 变量名称中不能有空格或标点符号。

如果使用的变量不存在, 它被默认设置为(空字符串) 。

HTML中内容体:{{name}} {{age}}{{height}}

视图中函数
def third(request):
     return render(request,'third.html',{'name':'老王','age':38,'height':1.79})
#使用字典的key值连接,将变量替换为values值。
扩展
def third2(request):
    name='老王'
    age=19
    height=1.7
    print(locals())
    # return render(request,'third2.html',{'name':name,'age':age,'height':hight})
    return render(request,'third2.html',locals())

url.py文件
urlpatterns = [
    path('admin/', admin.site.urls),
    path('third/',view.third) ——》路径,函数名。
]
点(.)的特殊含义

当模版系统遇到点("."),它将以以下顺序查询:

字典查询 :如果向页面传递的是一个字典类型变量,变量名.key 获取值,

属性或方法查询:如果传递一个对象,变量名.变量名

(此变量名有可能是属性,有可能是无参数方法名称)。
数字索引查询:如果传递一个列表,变量名.索引。

view.py 文件
def index02(request):
    """传递字典参数"""
    data = {'name': '刘瑞'}
    return render(request, 'index02.html', {'data': data})

class Person(object):
    def __init__(self, name):
        self.name = name

    def dream(self):
        return "{}的梦想是做一名老师".format(self.name)


def index03(request):
    """传递对象"""
    person = Person('张三')
    return render(request, 'index02.html', {'person': person})


def index04(request):
    """传递列表"""
    lst = ['zs', 'ls', 'ww']
    return render(request, 'index02.html', {'lst': lst})

html文件
{{user_info.name}},年龄{{user_info.age}},身高{{user_info.height}}
{姓名{{person.name}},年龄{{person.age}},梦想{{person.dream}}
{{ name_lst.0 }}——》{{ name_lst.1 }}——》{{ name_lst.2 }}

Filters(过滤器)

在Django的模板语言中,通过使用 过滤器 来改变变量的显示。(注:过滤器是函数)

过滤器的语法: {{ 变量名|过滤器名称:参数 }}

使用管道符"|"来应用过滤器。例如:{{ name|lower }}会将name变量应用lower过滤器之后再显示它的值。

default

default,给定默认值。如果一个变量是false或者为空,使用给定的默认值。 否则,使用变量的值。

{{ value|default:“nothing”}}——》如果value没有传值或者值为空的话就显示nothing

length

返回值的长度,作用于字符串和列表。

{{ value|length }},返回value的长度,如 value=[‘a’, ‘b’, ‘c’, ‘d’]的话,就显示4.

slice

切片

格式:{{value|slice:“2:-1”}} ,返回从第二个字符到最后一个字符。

date

日期格式化过滤器

格式:{{ value|date:“Y-m-d H:i:s”}} 下面加粗为常用

视图view.py 
import datetime
def third9(request):
    return render(request, 'third2.html', {'time':datetime.datetime.now() })
html
{{ time }}——》{{ time|date:'Y-m-d H:i:s' }}
格式化字符描述示例输出
a'a.m.‘或’p.m.’(请注意,这与PHP的输出略有不同,因为这包括符合Associated Press风格的期间)‘a.m.’
A‘AM’或’PM’。‘AM’
b月,文字,3个字母,小写。‘jan’
B未实现。
cISO 8601格式。 (注意:与其他格式化程序不同,例如“Z”,“O”或“r”,如果值为naive datetime,则“c”格式化程序不会添加时区偏移量(请参阅datetime.tzinfo) 。2008-01-02T10:30:00.000123+02:00或2008-01-02T10:30:00.000123如果datetime是天真的
d月的日子,带前导零的2位数字。’01’到’31’
D一周中的文字,3个字母。“星期五”
e时区名称 可能是任何格式,或者可能返回一个空字符串,具体取决于datetime。‘’、‘GMT’、’-500’、'US/Eastern’等
E月份,特定地区的替代表示通常用于长日期表示。‘listopada’(对于波兰语区域,而不是’Listopad’)
f时间,在12小时的小时和分钟内,如果它们为零,则分钟停留。 专有扩展。‘1’,‘1:30’
F月,文,长。‘一月’
g小时,12小时格式,无前导零。‘1’到’12’
G小时,24小时格式,无前导零。‘0’到’23’
h小时,12小时格式。‘01’到’12’
H小时,24小时格式。’00’到’23’
i分钟。’00’到’59’
I夏令时间,无论是否生效。‘1’或’0’
j没有前导零的月份的日子。‘1’到’31’
l星期几,文字长。‘星期五’
L布尔值是否是一个闰年。True或False
m月,2位数字带前导零。’01’到’12’
M月,文字,3个字母。“扬”
n月无前导零。‘1’到’12’
N美联社风格的月份缩写。 专有扩展。‘Jan.’,‘Feb.’,‘March’,‘May’
oISO-8601周编号,对应于使用闰年的ISO-8601周数(W)。 对于更常见的年份格式,请参见Y。‘1999年’
O与格林威治时间的差异在几小时内。‘+0200’
P时间为12小时,分钟和’a.m。’/‘p.m。’,如果为零,分钟停留,特殊情况下的字符串“午夜”和“中午”。 专有扩展。‘1 am’,‘1:30 pm’ / t3>,‘midnight’,‘noon’,‘12:30 pm’ / T10>
rRFC 5322格式化日期。‘Thu, 21 Dec 2000 16:01:07 +0200’
s秒,带前导零的2位数字。’00’到’59’
S一个月的英文序数后缀,2个字符。‘st’,‘nd’,‘rd’或’th’
t给定月份的天数。28 to 31
T本机的时区。‘EST’,‘MDT’
u微秒。000000 to 999999
U自Unix Epoch以来的二分之一(1970年1月1日00:00:00 UTC)。
w星期几,数字无前导零。‘0’(星期日)至’6’(星期六)
WISO-8601周数,周数从星期一开始。1,53
y年份,2位数字。‘99’
Y年,4位数。’1999年’
z一年中的日子0到365
Z时区偏移量,单位为秒。UTC以西时区的偏移量总是为负数,对于UTC以东时,它们总是为正。-43200到43200
safe

Django的模板中会对HTML标签和JS等语法标签进行自动转义,原因显而易见,这样是为了安全。但是有的时候我们可能不希望这些HTML元素被转义。如果是一个单独的变量我们可以通过过滤器“|safe”的方式告诉Django这段代码是安全的不必转义。

cut

移除value中所有的与给出的变量相同的字符串

格式:{{ value|cut:’ ’ }},如果value为’i love you’,那么将输出’iloveyou’.剪切掉空格

join

使用拼接符连接列表,例如Python的str.join(list)

格式: {{value|join:”_”}} 如果value为’asdf’,那么将输出’a_s_d_f’

过滤器注意事项
  1. '|'左右没有空格
  2. django的模板语言中提供了大约六十个内置过滤器。

tags标签

使用Django中的标签可以在模板中做一些简单的逻辑判断。

标签和{%%}配合使用。

for标签
<ul>
    {% for name in name_lst %}
{#        <li>{{ forloop.counter }}{{ name }}</li>正序(从1开始)  counter0(从0开始) #}
{#        <li>{{ forloop.revcounter }}{{ name }}</li> 倒序(到1结束)revcounter0(到0结束)#}
{#    <li>{{ forloop.revcounter0 }}—》{{ name }}—》{{ forloop.first }}—》{{forloop.last }}</li>#}  {#判断是否开头 ,结束#}
    {% endfor %}
</ul>

for循环可用的一些参数:

VariableDescription
forloop.counter当前循环的索引值(从1开始)
forloop.counter0当前循环的索引值(从0开始)
forloop.revcounter当前循环的倒序索引值(从1开始)
forloop.revcounter0当前循环的倒序索引值(从0开始)
forloop.first当前循环是不是第一次循环(布尔值)
forloop.last当前循环是不是最后一次循环(布尔值)
for…empty标签

如果变量名不存在或者内容为空的时候显示{%empty%}中的内容,否则不执行。

<ul>

    {% for name in name_list %}
        <li>{{ name }}</li>

    {% empty %}
        空空如也!!!
    {% endfor %}

</ul>
if标签

注: if 语句支持 and、or、==、<、>、!=、<=,>=,in、not in、is、is not判断。

<ul>
    {% if name|length > 15 %}
        用户名长度符合要求!
    {% else %}
        不符合
    {% endif %}

</ul>
if…elif…else 标签
{% if name_length|length > 6 %}
    姓名长度符合
{% elif age == 20 %}
    性别符合
{% else %}
    不符合
{% endif %}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值