接下来就是对orglist.html的数据进行动态的绑定,也就是下边箭头的内容
现在的数据是在html中写死的,我们要做的是吧数据库中的数据渲染到前台页面中来。
1.在orglist.html中找到改盒子的html代码,因为要改变其中的数据
在内容的插槽中找:
找到以后留一个即可,把它折叠,做个标记
因为我们要做的是从数据库中查出来数据,在前端循环遍历就行了
2.编写视图层
打开apps/organizations/view.py:
之前为了显示orglist页面,我们编写了简单的视图,现在要对它进行一系列操作
再想想我们要显示哪些信息:
2.1首先导入模型类
from apps.organizations.models import *
2.2编写视图函数
from django.shortcuts import render
# Create your views here.
from django.views.generic import View
from apps.organizations.models import *
class OrgView(View):
def get(self,request,*args,**kwargs):
'''
展示授课机构的列表页
:param request:
:param args:
:param kwargs:
:return:
'''
#查询所有的机构信息
all_orgs = CourseOrg.objects.all()
#查询机构的个数
org_nums = all_orgs.count()
#查询所有的城市信息
all_citys = City.objects.all()
return render(request, 'orglist.html',{
'all_orgs':all_orgs,
'org_nums':org_nums,
'all_citys':all_citys
})
3.去xadmin添加数据到数据库中
没有数据怎么玩
进入xadmin后台管理后先添加城市信息:北京市和沈阳市
机构信息:东软睿道和清华大学
然后我们发现我们上传的logo不显示:
但是在项目中确实出现了一个文件夹org里面有我们上传的图片:
为什么会上传到这呢?
原来我们在设计模型类的时候,把图片的上传地址设置成了:
打开organizations/models.py:
这样不好,多了不好管理。
我们初级阶段这么解决,当数据量不是特别大的时候:
在项目中新建media目录:
用于存储图片。
然后删除刚才的org文件夹。
配置media文件
打开MXOnline/settinds.py,添加:
#配置图片文件media
MEDIA_URL = '/media/'
#配置图片文件media
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
记住MEDIA_ROOT最后没有逗号
再次在xadmin中添加信息:
再次点击详细信图片还是没有传进去。
但是在项目目录中的media目录中传进去了。
先放着,最后在解决
4.对模板进行数据绑定
打开orglist.html,找到要进行数据绑定的地方:
(1)首先对机构个数进行修改:
运行:
(2)对内容进行循环显示
编写一个for循环,并把这个盒子放进去:
修改数据:
绑定了四处数据。
运行一下:
成功显示
图片加载问题
首先我们打开数据库中organizations_CoursesOrg表:
发现image的地址还是org/y/m
我们配置的media并没有生效。数据库中并没有改变
解决方案:
首先找到orglist.html的显示图片的代码:
并且修改图片的路径为media+数据库中村相互的路径。
但是再次运行图片还是没有出来。
这是因为没有设置类似权限的东西,就是不能任何人都能访问吧
解决:
1.打开settings.py:
在OPTIONS中增加:
'django.template.context_processors.media'
2.配置url
#导入url(正则表达式方式)
from django.conf.urls import url
#负责静态文件处理
from django.views.static import serve
#导入MEDIA_ROOT
from MXOnline.settings import MEDIA_ROOT
urlpatterns = [
#配置上传文件的访问 document_root:指定文件的给根路径
url(r'^media/(?P<path>.*)$',serve,{'document_root':MEDIA_ROOT}),
]
运行:
成功显示。
打开xadmin后台管理:
也能回显。
上下文
为什么要把media配置到setting中的上下文里?
这样的话,我们在不管在哪个页面都能访问到。
那么就可以在orglist.html使用上下文
对路径进行更改。
再次运行:
还是有的。
这样的好处就是跟哪个static文件一样,便于管理,当更改路径时,只需要更改settings中的MEDIA_ROOT就行。
提交github













网友评论