djang学习第二课(上)

web框架设计模式

  • MVC
  • MTV

MVC

经典的MVC模式中:

  • M(model)业务模型,代表一个存储数据的对象
  • V(view)用户界面,代表模型数据的可视化
  • C(controller)控制器,作用于模型和视图上。它控制数据流向,并在数据变化时更新视图。它使视图与模式解耦。

MTV

django的设计模式称为MTV,本质上跟MVC一样,只是叫法不同

  • M(Model)模型,与MVC中的M功能相同,负责和数据库交互,进行数据处理
  • V(VIew),视图,与MVC中的C功能相同,接收请求,进行业务处理,返回响应
  • T(Template),模板,与MVC中的V功能相同,负责构造要返回的html页面
    在这里插入图片描述
    django中数据流和请求流程如下:
    1、用户通过浏览器发起请求
    2、view根据请求和业务逻辑向model获取或者发送数据
    3、model根据视图的要求和数据库进行交互
    4、view收到model返回的结果后,将结果发送给template
    5、template将收到的数据渲染成最终的html返回给view
    6、view将最终包含结果数据的html返回给用户

模板

直接返回一个html页面,确定,内容多时很不方便

def index(request):
    return HttpResponse("<h1 style='color:red'>这个是首页面</h1>")

创建templates

1、在crm应用同级目录,创建一个templates目录,在templates目录下创建crm(应用名)目录,然后在crm目录下创建模板文件index.html
在这里插入图片描述
2、在index.html中的body中添加一行代码

<body>
    <h1 style="color: green">{content}</h1>
</body>

此处预留的content,后续用来传参。
此处的{}可能会和js的{}冲突,所以可以使用{{}}
3、导入项目BASE_DIR

from django.conf import settings
def index(request):
    content = '这是首页面123'
    with open(settings.BASE_DIR / 'templates/crm/index.html', 'r', encoding='utf-8') as f:
        template = f.read()

    template = template.format(content=content)
    return HttpResponse(template)

format后面跟的content与index.html中content对应

配置模板路径

django框架找模板的配置

在study_django目录下的settings.py文件中找到TEMPLATES列表中的字典的关键字DIRS设置参数。

'DIRS': [str(BASE_DIR / 'templates')],
pycharm配置

右键点击templates,选择Mark Directory as --> Template Folder
在这里插入图片描述

调用templates

方式一:

from django.template.loader import get_template
def index(request):
    content = '这是首页面123'
    template = get_template('crm/index.html')
    html = template.render(context={'content':content})
    return HttpResponse(html)

注: context的参数是字典,且字典的key是需要渲染的变量的名称,index.html中变量需要使用{{ content }}
方式二:

from django.shortcuts import render
def index(request):
    content = '这是首页面123'
	return render(request, 'crm/index.html', context={'content': content})

传字典、列表和函数
index.html

<body>
    <h1 style="color: green">{{ content }}</h1>
    <p>列表ls = {{ ls }}</p>
    <p>ls[0] = {{ ls.0 }}</p>
    <p>字典dc = {{ dc }}</p>
    <p>字典dc['name'] = {{ dc.name }}</p>
    <p>函数fu = {{ fu }}</p>
</body>

view.py

def index(request):
    content = '这是首页面12345'
    ls = [1, 2, 3]
    dc = {'name': 'abc', 'age': 17}
    def fu():
        return "这是一个函数"
    return render(request, 'crm/index.html', context={'content': content, "ls": ls, "dc": dc, "fu": fu})

模板变量的解析规则
1、当模板引擎遇到模板变量时,它会计算该变量,并将其替换为结果
2、当模板引擎在变量中遇到.时(x.y形式),它会按以下顺序尝试查找:
1、字典键值查找
2、属性或方法查找
3、数字索引查找
3、如果结果是可调用的,则调用它时不带参数。调用结果成为模板值

模板标签

只能见到渲染变量,显然不能满足需求,django的模板系统中还提供了模板标签来实现更多的渲染,例如判断和循环

for循环

循环浏览数组中的每个项目,使该项目可以在上下文变量中可用,例如,要显示students_list中提供的学生列表
在student_list.html文件中使用for循环遍历students列表中的值

<table border>
    <thead>
    <tr>
        <th>序号</th>
        <th>姓名</th>
        <th>年龄</th>
        <th>性别</th>
    </tr>
    </thead>
    <tbody>
    {% for student in students %}
        <tr>
            <td>{{ forloop.counter }}</td>
            <td>{{ student.name }}</td>
            <td>{{ student.age }}</td>
            <td>{{ student.sex }}</td>
        </tr>
    {% endfor %}
    </tbody>
</table>

在这里插入图片描述

if

{% if %}标签会判断给定的变量,当变量为True时(比如存在、非空、非布尔值False),就会输出块的内容:

{% if student_list %}
	学生的数量:{{ student_list|length }}
{% else %}
	没有学生
{% endif %}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值