7-1 django templates模板继承1

  • 机构可以筛选类别
  • 机构可以根据所在地区进行分类

右侧我要学习功能: form表单提交
右下:授课机构排名

页面头部与底部为全局头和全局底部。

Django template 共用头部底部机制

将head和foot放在两个html中,然后在写其他需要这两个部分的页面时include进来。

Django也是支持include机制的。

include的问题

include的进来的死页面,这时候该怎么办?

解决这种问题:进行模板的继承机制。定义一个父类的框架,子类可以替换其中一部分block,子类只需要重写自己需要改变的block。

template中新建base.html

将课程机构列表页。orglist拷贝进template目录

将orglist内容替换base内容。

 
mark

将div收起来

 
mark

loadstaticfiles & 修改静态文件路径为static

这个步骤做过太多遍了,自行完成。耐心就行了。

定义父模板: 包含head & footer

title应该是可以被子页面替换的所以要包起来。

 
mark

css有共用的部分,也有可以被子页面替换的部分。

 
mark

js同理

 
mark

面包屑是需要被各个页面自己替换的。

 
mark

将正文内容包起来;

 
mark

此时base页面就制作好了

7-2 开始orglist编写

第一步:清空所有内容

  • 继承base页面
 
mark
  • 覆盖父类的title
 
mark
  • 书写课程机构view
    organization/views.py
# encoding: utf-8
from django.views.generic.base import View
# 处理课程机构列表的view
class OrgView(View):
def get(self,request):
return render(request, "org-list.html", { })
  • Django2.0.1配置课程机构首页url
    # 课程机构首页url
path('org_list/', OrgView.as_view(), name="org_list"),
  • Django1.9.8配置url:
    # 课程机构首页url
url(r'^org_list/$', OrgView.as_view(), name="org_list"),

修改面包屑

  • base中只保留首页

  • org中重写block custom_bread

  • block之间没有先后顺序。

  • 将base中block content拿到orglist重写

 
mark
  • 然后将base中block中间section删除掉
 
mark

orglist开始loadstaticfiles

ctrl+d快速删除

 
mark

页面的继承关系使得变量也可以直接用

比如user中的form数据传递到register文件当中.如果register继承的是base页面。
base页面当中也是可以用这些数据的。参数的向上传递

每个request对象都会传递到html中来,如果继承了base,request也会向上传递到base。
base中就可以加入我们的逻辑: 用户是否登录等。

小节结束对应commit:

完成Django templates的继承关系了解,机构列表展示页。对应7-1 & 2

7-3 课程机构列表页数据展示1

确定由后台传过来的动态数据:

授课机构列表本身, 授课机构的排名,所在地区(后台取出所有地区), 机构类别写成静态,因为一般不怎么变动。

在xadmin中添加城市信息,课程信息。

添加城市

 
mark

添加机构。

插播知识点:

 
mark

这里指定的路径是一个相对路径

setting中要配置我们把文件存放在哪个根目录之下

# 设置我们上传文件的路径

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

在项目根目录创建media文件夹

在后台上传图片

 
mark
 
mark

修改机构信息中封面图为logo

自行添加十个课程机构

models中添加机构类别

organization/models.py:

class CourseOrg(models.Model):
ORG_CHOICES =(
("pxjg", u"培训机构"),
("gx", u"高校"),
("gr", u"个人"),
) name = models.CharField(max_length=50, verbose_name=u"机构名称")
# 机构描述,后面会替换为富文本展示
desc = models.TextField(verbose_name=u"机构描述")
# 机构类别:
category = models.CharField(max_length=20, choices=ORG_CHOICES, verbose_name=u"机构类别", default="pxjg")

修改了models之后做数据库的变动:

makemigrations organization
migrate organization
 
mark

完成之后打开Navicat进行验证:

 
mark

可以看到新增了。

完善我们的view

将列表里的静态数据变成后台获取的动态数据

organization/views.py

from .models import CourseOrg, CityDict

class OrgView(View):
def get(self,request):
# 查找到所有的课程机构
all_orgs = CourseOrg.objects.all()
# 取出所有的城市
all_citys = CityDict.objects.all() return render(request, "org-list.html", {
"all_orgs":all_orgs,
"all_citys": all_citys,
})

作者:原文学习来自简书,作者:天涯明月笙
链接:https://www.jianshu.com/p/90aa4d5fae6a

django+xadmin在线教育平台(十四)的更多相关文章

  1. django+xadmin在线教育平台(四)

    3-2 配置表单页面 必要的该说的,该了解的 前置条件: 你已经学习了前面教程.将项目的文件夹目录结构,setting配置等修改完毕与我保持一致. 本节通过Django快速的配置一个留言板页面来学习 ...

  2. django+xadmin在线教育平台(一)

    大家好,此教程为在慕学网的实战教程Python升级3.6 强力Django+杀手级Xadmin打造在线教育平台的学习笔记,不对望指正! 使用Django+Xadmin打造在线教育平台(Python2, ...

  3. django+xadmin在线教育平台(五)

    3-3 django orm介绍与model设计 上节教程完成后代码(来学习本节前置条件): 对应commit: 留言板前端页面展示.本次内容截止教程3-2结束. 可能现在你还在通过手写sql语句来操 ...

  4. django+xadmin在线教育平台(十)

    剩余app model注册 courses注册 新建courses/adminx.py: # encoding: utf-8 __author__ = 'mtianyan' __date__ = '2 ...

  5. django+xadmin在线教育平台(十六)

    7-7 modelform 提交我要学习咨询1 对应表userask form会对字段先做验证,然后保存到数据库中. 可以看到我们的forms和我们的model中有很多内容是一样的.我们如何让代码重复 ...

  6. django+xadmin在线教育平台(十五)

    7-4 课程机构列表页数据展示2 前去html中进行数据填充   mark 可以看到所有城市是通过a标签,当前选中城市为active.   mark 之后把下面的写死的城市删除掉.   mark 这时 ...

  7. django+xadmin在线教育平台(十二)

    6-4 用form实现登录-1 上面我们的用户登录的方法是基于函数来做的.本节我们做一个基于类方法的版本. 要求对类的继承有了解. 基础教程中基本上都是基于函数来做的,其实更推荐基于类来做.基于类可以 ...

  8. django+xadmin在线教育平台(六)

    4-1 使用py3.6和django1.11开发系统前注意事项 直接通过Python3.6和django最新版本来开发我们的系统的一些注意事项. 原版本: Python 2.7 & djang ...

  9. django+xadmin在线教育平台(十七)

    8-1 课程列表 拷贝课程列表页到template目录 创建课程相关的urls.py Mxonline2/urls.py中声明包含到course的url中: # 课程app的url配置 url(r&q ...

随机推荐

  1. SolrCloud的搭建的连接

    1 什么是SolrCloud SolrCloud(solr 云)是Solr提供的分布式搜索方案,当你需要大规模,容错,分布式索引和检索能力时使用SolrCloud.当一个系统的索引数据量少的时候是不需 ...

  2. 如何在smarty模板中执行php代码

    Smarty模板主要的目的是分离逻辑层和表现层,所以在模板中不应该包含逻辑部分,逻辑层也不应该含有HTML.要在模板中插入逻辑程序的这种做法"非常"不被推荐,在你的case中. 如 ...

  3. Session [php]

    1.启动会话 session_start() 通过session_register()函数创建会话 session_register()函数用来为会话登录一个变量来隐含地启动会话,但要求php.ini ...

  4. Machine learning preface

    Machine learning Preface Definition T: Task E: Experience P: Performance Sequence: T -> E -> P ...

  5. wait/notify

    某面试题,实现一个生产者——消费者模型 题目:采用多线程技术,通过wait/notify,设计实现一个符合生产者和消费者问题的程序,对某一个对象(枪膛)进行操作,其最大容量是20颗子弹,生产者线程是一 ...

  6. java使用jdbc连接数据库步骤

    确定连接的数据库类型<mysql,oracle,db2,moangdb,sqlservlet> 下载数据库的驱动(http://mvnrepository.org),并把jar包添加到项目 ...

  7. maven课程 项目管理利器-maven 3-8 maven依赖传递 4星

    本节主要讲了 1 maven依赖传递 本地项目路径:F:\xiangmu3\Xin\FuQiang\maven\code 2 maven排除依赖 3 注意事项 4 零散知识点 1 maven依赖传递 ...

  8. spring mvc改造成spring boot

    一.新增依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId> ...

  9. react- 相关

    生命周期方法 组件的生命周期分成三个状态: Mounting:已插入真实 DOM Updating:正在被重新渲染 Unmounting:已移出真实 DOM React 为每个状态都提供了两种处理函数 ...

  10. u-boot分析(八)----串口初始化

    u-boot分析(八) 上篇博文我们按照210的启动流程,分析到了内存初始化,今天我们继续按照u-boot的启动流程对串口的初始化进行分析. 今天我们会用到的文档: 1.        2440芯片手 ...