Django笔记2--视图、路由、render渲染数据

视图2 render渲染数据

通过分路由访问成功不同视图后,客户端在视图中操作数据:

客户端访问:
http://127.0.0.1:8000/myapp/index/

1、客户端进入主路由:
主路由配置(myweb项目下urls.py):
from django.conf.urls import include
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^hello/', hello),
    url(r'^myapp/', include('myapp.urls'))  # 主路由进入myapp分路由
]

在主路由中通过include(‘myapp.urls’)的方式包含分路由,使客户端访问进入分路由;
此时还需要配置myweb项目文件下的setting.py文件,在TEMPLATES中,修改内容:
‘DIRS’: [os.path.join(BASE_DIR,‘templates’)],
然后,在myweb项目文件中新建文件
templates
,再在templates文件中新建文件myapp
最好在myapp文件中创建index.html文件,来与客户端访问路径http://127.0.0.1:8000/myapp/index/对应。

2、分路由
分路由配置:

先在myapp文件中创建的urls.py
urls.py内容如下:

from django.conf.urls import url
from .views import *  # 引入视图

# myapp路由
urlpatterns = [
    url(r'^index/', index),
]

from .views import * # 引入视图
并在分路由中返回对应视图

3、视图渲染值
视图配置(myapp文件下的views.py)

views.py内容如下:

from django.shortcuts import render
from .models import *


# Create your views here.
def index(request):
    book = Books.objects.all()  # Queryset -- 伪数组 - 列表使用 -获取Books数据表中所有数据
    # 将获取的数据render渲染到index.html,并return返回渲染后的index.html.
    return render(request, 'myapp/index.html', {'book': book})  # 向render传递三个值(request,文件url,渲染值)

渲染的index.html文件有特定的接收数据格式:
{{ 输出值,可以是变量,也可以是对象.属性 }}
{% 执行代码段 %}

index.html内容如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Index</title>
</head>
<body>
<table width="300px">
    <tr>
        <td>ID</td><td>编号</td><td>书名</td><td>价格</td><td>生产日期</td><td>操作</td>
    </tr>
    {% for val in book%}
        <tr>
            <td>{{val.id}}</td>
            <td>{{val.bid}}</td>
            <td>{{val.bname}}</td>
            <td>{{val.bprice}}</td>
            <td>{{val.cpub_time}}</td>
            <td>删除</td>
        </tr>
    {% endfor%}
</table>
</body>
</html>

浏览器访问index.html结果:

客户端操作渲染的数据

通过a标签访问不同操作来实现

在开始实现前先修改一下index视图渲染数据的查询方式
修改myapp文件中的views.py:
将原来的:

def index(request):
    book = Books.objects.all()  # Queryset -- 伪数组 - 列表使用 -获取Books数据表中所有数据
    # 将获取的数据render渲染到index.html,并return返回渲染后的index.html.
    return render(request, 'myapp/index.html', {'book': book})  # 向render传递三个值(request,文件url,渲染值)

修改为:

def index(request):
    book = Books.objects.filter(is_delete=0)
    return render(request, 'myapp/index.html', {'book': book})  # render传递三个值(request,文件url,渲染值)

将原来的无条件查询所有,改为过滤器条件查询。
注:修改引用models.py中的类,将class Books(models.Model):中继承models.Model,修改为继承自定义类,以自动添加过滤器中用于过滤的is_delete属性。# TODO 5555555555 I said it’s too late

配置index.html文件

修改index.html文件中的

<td>删除</td>

为:

<td><a href="/myapp/delete/{{val.id}}">删除</a></td>

此时点击删除将访问/myapp/delete,并返回要删除的数据对应的id值;
由于主路由的配置,我们只需在myapp中定义对应的delete操作:

配置myapp分路由(myapp下的urls.py)

修改urls.py内容如下:

from django.conf.urls import url
from .views import *  # 引入视图

# myapp路由
urlpatterns = [
    url(r'^index/', index),
    url(r'^delete/(\d+)', delete),
]

url配置完成后继续配置其对应的操作(delete):
在myapp文件的views.py中添加内容:

def delete(request, bid):
	# 接收客户端request及删除数据的id
    book = Books.objects.get(id=bid)  # 查询该id
    book.is_delete = 1  # 修改过滤属性(0为显示,1为不显示--软删除)
    book.save()  # 保存修改
    return HttpResponseRedirect('/myapp/index')  # a标签访问完/myapp/delete/id后不用真的跳转到该页,继续返回/myapp/index

此即完成!

再次访问:http://127.0.0.1:8000/myapp/index/
在这里插入图片描述
点击删除按钮,删除《哈姆雷特》成功:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值