url(r'^book/(d+)/(d+)/',views.Book.as_view()),
from django.shortcuts import render,HttpResponse
from django.views View
class Book(View):
def get(self,request,year,month):
return HttpResponse(year+ month + 书籍')
post(self,1)">pass
'''重点: 反射,将请求方法分发到同名的类方法去处理'''
def dispatch(self,*args,**kwargs):
if request.method.lower() in self.http_method_names:
handler = getattr(self,request.method.lower(),self.http_method_not_allowed)
else:
handler = self.http_method_not_allowed
return handler(request,**kwargs)
View
kwargs):
print(dispatch front)
ret = super().dispatch( request,**kwargs) # 继承父类dispatch的所有内容
dispatch behind)
return ret
get methodpass
执行结果'''
dispatch前
get方法
dispatch后
render
home(request):
username = SByaya' 可以传字符串
num = 10 可以传数字
lst1 = [11,22,33] 可以传列表
dict1 = {k1':v1k2v2'} 可以传字典
A:
def __init__(self):
self.name = yayasillydog'
get_name(self):
return self.name + 太蠢了
a = A() 可以传类对象
dic = {
username:username,num:num,1)">lst1:lst1,1)">dict1:dict1,1)">a:a,}
return render(request,1)">home.htmlhome.html
<!DOCTYPE html>
<html lang="zh-CN"head>
meta charset="utf-8"</body>
h1>Welcome to dog's home!!>{{ username }}>{{ num }}>{{ lst1 }}>{{ lst1.1 }}> <!-- 用点索引来取值 -->
>{{ dict1 }}>{{ dict1.k1 }} 字典.键来取值 >{{ a.name }} 可以获取对象里的属性 >{{ a.get_name }} 只能获取对象里的无参方法,不能够获取有参方法 -->
html>
过滤器
过滤器语法
语法:{{ value|filter_name:参数 }}
注意点:管道符两边不能有空格,有参数的冒号加参数,无参数的不需要冒号
常见的过滤器
1.default默认值
如果一个变量没有传值或者值为空,使用给定的默认值。 否则,使用变量的值。
没有传值
没有传值yayapig 可以传字符串
dic = {
'username':username,# 没有传username
}
值为空
username = ''
default默认值语法
p>
{{ username|default:'Libolun' }}
p
2.length 判断长度
3.filesizeformat 展示为可读的大小,自动计算单位
{{ file_size|filesizeformat }}
>
4.slice 切片
5.date 日期格式化
{{ current_time|date:"Y-m-d H:i:s" }} 注意分钟是用i来表示 >
6.safe 将标签字符串识别为一个标签效果
使用safe的目的:防止xss攻击(跨站脚本攻击)
views.py
test(requqest):
a_tag = <a href="">某宝</a>'
test.htmla_tag':a_tag})
test.html
<p>
{{ a_tag|safe }}
</p>
7.truncatechars 字符截断
注意:7包括4个字符加3个省略号
{{ msg|truncatechars:7 }}
>
8.truncatewords 单词截断
{{ msg|truncatewords:2 }}
>
9.cut 移除value中所有的与给出的变量相同的字符串
{{ msg|cut:' ' }} 去除value中所有的空格 >
10.join 字符串拼接
{{ list1|join:'+' }} 等同于python中的"+".join(list1) >
标签
标签语法
语法: {% 标签逻辑 %}
for循环标签
1.循环列表
ul
{% for i in lst1 %}
li>{{ i }}
{% empty %}
span>哥,啥也木有啊
{% endfor %}
如果lst1为空,或者后台没有给lst1数据,那么就展示empty下面的内容 -->
2.循环字典
{% for k,v in dic1.items %}
>{{ k }}--->{{ v }} 在循环中,可以接dic1.keys values items -->
3.循环嵌套
{% for i in lst1 %}
>{{ i }}--->{{ forloop.counter }}
{% if forloop.last %}
{% for ii in i %}
>{{ ii }}--->{{ forloop.counter }}--->{{ forloop.parentloop.counter }}
{% endfor %}
{% endif %}
{% endfor %}
>
forloop用法
forloop.counter 当前循环的索引值(从1开始),forloop是循环器,通过点来使用功能
forloop.counter0 当前循环的索引值(从0开始)
forloop.revcounter 当前循环的倒序索引值(从1开始)
forloop.revcounter0 当前循环的倒序索引值(从0开始)
forloop.first 当前循环是不是第一次循环(布尔值)
forloop.last 当前循环是不是最后一次循环(布尔值)
forloop.parentloop 本层循环的外层循环的对象,再通过上面的几个属性来显示外层循环的计数等
if循环标签
if语句支持 and 、or、==、>、<、!=、<=、>=、in、not in、is、is not判断,注意条件两边都有空格。
views.py
home(request):
number = 102
dic =number:number,dic)
home.html
{% if number == 100 %}
>猜对了
{% elif number == 101 %}
>101不对呀
{% else %}
>这更不对了
{% endif %}
if语句也可以和过滤配合使用
{% if user_list|length > 5 %} 结合过滤器来使用-->
可以可以
{% else %}
不行不行
{% endif %}
组件
组件:把完整的一套功能封装成模块
在前端中,就是把一套完整的样式封装起来,供其他人使用
在其他的html文件中引入一个html文件
在index.html中如果我们想使用已经封装好的zujian.html,该怎么引入呢?
index.html
{% include 'zujian.html' %}
zujian.html
="en"="UTF-8"title>Titleh1 style="color:red;">这是导航栏>
静态文件配置
1.在项目根目录下创建一个文件夹,比如名称为xx
2.在setting.py中写入如下内容
STATIC_URL = /static/别名
STATICFILES_DIRS = [
os.path.join(BASE_DIR,1)">jingtaiwenjian'), 注意别忘了写逗号,第二个参数就是项目中你存放静态文件的文件夹名称
]
3.在html文件中使用别名
设置STATIC_URL的意义
别名也是一种安全机制,浏览器上通过调试台你能够看到的是别名的名字,这样别人就不能知道你静态文件夹的名字了,不然别人就能通过这个文件夹路径进行攻击。
STATIC_URL的用法
两种引入方式 link rel="stylesheet" href="/static/css/test.css"="{% static 'css/test.css' %}" 导入一张图片 img src="/static/imgs/test.png" alt="" 引入js文件 script ="/static/js/xx.js"></script>
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!