Django学习(三)

Django的设计模式及模板层

传统的MVC(例如java)

Django的MTV

模板层:

模板加载:

代码:

views.py

python 复制代码
def test_html(request):
    #方案一
    # from django.template import loader
    # 1. 使用loader加载模板
    # t = loader.get_template('test_html.html')
    # # 将t转换成html字符串
    # html = t.render()
    # return HttpResponse(html)
    # 方案二
    from django.shortcuts import render
    return render(request, 'test_html.html')

urls.py

python 复制代码
    path('test_html', views.test_html)

templates.py

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>Hello World</h1>
</body>
</html>

视图层与模板层之间的交互:

代码:

views.py

python 复制代码
def test_html(request):
    #方案一
    # from django.template import loader
    # 1. 使用loader加载模板
    # t = loader.get_template('test_html.html')
    # # 将t转换成html字符串
    # html = t.render()
    # return HttpResponse(html)
    # 方案二
    from django.shortcuts import render
    dic = {
        'name': 'zhangsan',
        'age': 18,
        'sex': '男',
        'hobby': ['吃饭', '睡觉', '打豆豆'],
        'person': {'name': 'lisi', 'age': 20},
    }
    return render(request, 'test_html.html', dic)

templates

python 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>{{name}}今年{{ age }}性别{{ sex }}爱好{{ hobby }}</h1>
</body>
</html>

urls.py

python 复制代码
    path('test_html', views.test_html)

结果:

模板的变量和标签:

代码:

urls.py

python 复制代码
    path('test_html_param', views.test_html_param)

views.py

python 复制代码
def test_html_param(request):
    dic = {}
    dic['int'] = 88
    dic['str'] = 'xiaobai'
    dic['lst'] = ['Tom', 'Jack', 'Lily']
    dic['dict'] = {'a': 9, 'b': 8}
    dic['func'] = say_hi
    dic['classobj'] = Dog()
    return render(request, 'test_html_param.html', dic)


def say_hi():
    return 'hahah'


class Dog(object):
    def say(self):
        return 'wangwang'

templates

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h3>int是{{int }}</h3>
<h3>str是{{str }}</h3>
<h3>lst 是{{lst}}</h3>
<h3>lst是{{lst.0 }}</h3>
<h3>dict是{{dict}}</h3>
<h3>dict['a']是{{dict.a}}</h3>
<h3>function是{{func}}</h3>
<h3>class obj是{{classobj.say}}</h3>
</body>
</html>

结果:

模板标签:

代码:

urls.py

python 复制代码
    path('test_if_for', views.test_if_for)

views.py

python 复制代码
def test_if_for(request):
    dic = {}
    dic['x'] = 5
    return render(request, 'test_if_for.html', dic)

templates

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>测试if和for</title>
</head>
<body>
{% if x >= 4 %}
输入的值大于等于4
{% else %}
输入的值为小于4
{% endif %}
</body>
</html>

注意:在标签中使用变量时,直接使用变量名即可,不需要加双大括号

for标签:

urls:

python 复制代码
    path('test_if_for', views.test_if_for)

views.py:

python 复制代码
def test_if_for(request):
    dic = {}
    dic['x'] = 5
    dic['ls'] = ['a', 'b', 'c']
    return render(request, 'test_if_for.html', dic)

templates:

python 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>测试if和for</title>
</head>
<body>
<p>
{% if x >= 4 %}
输入的值大于等于4
{% else %}
输入的值为小于4
{% endif %}
<br>
{% for name in ls %}
    {%  if forloop.first %}########{% endif %}
    {{ forloop.counter0 }}{{ name }}</p>
    {% if forloop.last %}########{% endif %}
{% empty %}
没有值
{% endfor %}
</body>
</html>
相关推荐
果丁智能1 分钟前
智慧校园一卡通深度融合方案:基于超级SIM卡的手机碰一碰智能开锁技术落地实践
数据结构·人工智能·python·科技·算法·智能家居·信息与通信
码来的小朋友5 分钟前
[Python] 制作小游戏创意之3D魔方
python·3d·pygame
hunterkkk(c++)6 分钟前
二分图的学习
学习
老徐聊GEO9 分钟前
芜湖Ai搜索获客亲测有效案例分享
人工智能·python
叫我:松哥13 分钟前
基于机器学习和flask的体育健身风险智能分析系统,系统集成DeepSeek、聚类算法、分类算法等,准确率达90%
人工智能·python·神经网络·算法·机器学习·flask·聚类
码云骑士14 分钟前
03-Python可变对象与不可变对象(下)-深浅拷贝的底层真相
开发语言·python
与代码不die不休15 分钟前
RTX5060显卡torch和torch_radon库安装避坑指南(仅linux系统)
linux·图像处理·python·深度学习
砍材农夫15 分钟前
python环境|pip|uv|venv|Conda区别
后端·python·conda·pip·uv
向量引擎16 分钟前
AI API 正在进入“请求生命周期治理”阶段:从模型迁移、Agent 接入到成本与安全排错的工程化方法
java·人工智能·python·aigc·ai编程·ai写作·gpu算力
梦想不只是梦与想18 分钟前
Python 中的线程(Thread)
python·线程·thread