视图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'))
]
在主路由中通过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 *
urlpatterns = [
url(r'^index/', index),
]
from .views import * # 引入视图 并在分路由中返回对应视图
3、视图渲染值
视图配置(myapp文件下的views.py)
views.py内容如下:
from django.shortcuts import render
from .models import *
def index(request):
book = Books.objects.all()
return render(request, 'myapp/index.html', {'book': book})
渲染的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()
return render(request, 'myapp/index.html', {'book': book})
修改为:
def index(request):
book = Books.objects.filter(is_delete=0)
return render(request, 'myapp/index.html', {'book': book})
将原来的无条件查询所有,改为过滤器条件查询。 注:修改引用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 *
urlpatterns = [
url(r'^index/', index),
url(r'^delete/(\d+)', delete),
]
url配置完成后继续配置其对应的操作(delete): 在myapp文件的views.py中添加内容:
def delete(request, bid):
book = Books.objects.get(id=bid)
book.is_delete = 1
book.save()
return HttpResponseRedirect('/myapp/index')
此即完成!
再次访问:http://127.0.0.1:8000/myapp/index/ 点击删除按钮,删除《哈姆雷特》成功:
|