首页和全局404,500配置

  • 轮播图
  • 公开课
  • 授课机构

新建view

  1. ## 首页view
  2. class IndexView(View):
  3. def get(self,request):
  4. # 取出轮播图
  5. all_banner = Banner.objects.all().order_by('index')[:5]
  6. # 正常位课程
  7. courses = Course.objects.filter(is_banner=False)[:6]
  8. # 轮播图课程取三个
  9. banner_courses = Course.objects.filter(is_banner=True)[:3]
  10. # 课程机构
  11. course_orgs = CourseOrg.objects.all()[:15]
  12. return render(request, 'index.html', {
  13. "all_banner":all_banner,
  14. "courses":courses,
  15. "banner_courses":banner_courses,
  16. "course_orgs":course_orgs,
  17. })

为Course添加字段: isbanner

  1. is_banner = models.BooleanField(default=False, verbose_name="是否轮播")

CourseOrg添加一个字段

  1. tag = models.CharField(max_length=10, default= "国内名校",verbose_name="机构标签")

前端页面

  1. {% block content %}
  2. <div class="banner">
  3. <div class="wp">
  4. <div class="fl">
  5. <div class="imgslide">
  6. <ul class="imgs">
  7. {% for banner in all_banner %}
  8. <li>
  9. <a href="{{ banner.url }}">
  10. <img width="1200" height="478" src="{{ MEDIA_URL }}{{ banner.image }}">
  11. </a>
  12. </li>
  13. {% endfor %}
  14. </ul>
  15. </div>
  16. <div class="unslider-arrow prev"></div>
  17. <div class="unslider-arrow next"></div>
  18. </div>
  19. </div>
  20. </div>
  21. <section>
  22. <div class="wp">
  23. <ul class="feature">
  24. <li class="feature1">
  25. <img class="pic" src="{% static "images/feature1.png" %}">
  26. <p class="center">专业权威</p>
  27. </li>
  28. <li class="feature2">
  29. <img class="pic" src="{% static "images/feature2.png" %}">
  30. <p class="center">课程最新</p>
  31. </li>
  32. <li class="feature3">
  33. <img class="pic" src="{% static "images/feature3.png" %}">
  34. <p class="center">名师授课</p>
  35. </li>
  36. <li class="feature4">
  37. <img class="pic" src="{% static "images/feature4.png" %}">
  38. <p class="center">数据真实</p>
  39. </li>
  40. </ul>
  41. </div>
  42. </section>
  43. <section>
  44. <div class="module">
  45. <div class="wp">
  46. <h1>公开课程</h1>
  47. <div class="module1 eachmod">
  48. <div class="module1_1 left">
  49. <img width="228" height="614" src="{% static "images/module1_1.jpg" %}">
  50. <p class="fisrt_word">名师授课<br/>专业权威</p>
  51. <a class="more" href="{% url 'course:list' %}">查看更多课程 ></a>
  52. </div>
  53. <div class="right group_list">
  54. <div class="module1_2 box">
  55. <div class="imgslide2">
  56. <ul class="imgs">
  57. {% for cours in banner_courses %}
  58. <li>
  59. <a href="{% url 'course:course_detail' cours.id %}">
  60. <img width="470" height="300" src="{{ MEDIA_URL }}{{ cours.image }}">
  61. </a>
  62. </li>
  63. {% endfor %}
  64. </ul>
  65. </div>
  66. <div class="unslider-arrow2 prev"></div>
  67. <div class="unslider-arrow2 next"></div>
  68. </div>
  69. {% for cours in courses %}
  70. <div class="module1_{{ forloop.counter|add:2 }} box">
  71. <a href="{% url 'course:course_detail' cours.id %}">
  72. <img width="233" height="190" src="{{ MEDIA_URL }}{{ cours.image }}">
  73. </a>
  74. <div class="des">
  75. <a href="{% url 'course:course_detail' cours.id %}">
  76. <h2 title="{{ cours.name }}">{{ cours.name }}</h2>
  77. </a>
  78. <span class="fl">难度:<i class="key">{{ cours.get_degree_display }}</i></span>
  79. <span class="fr">学习人数:{{ cours.students }}</span>
  80. </div>
  81. <div class="bottom">
  82. <span class="fl"
  83. title="{{ cours.course_org.name }}">{{ cours.course_org.name }}</span>
  84. <span class="star fr">{{ cours.fav_nums }}</span>
  85. </div>
  86. </div>
  87. {% endfor %}
  88. </div>
  89. </div>
  90. </div>
  91. </div>
  92. </section>
  93. <section>
  94. <div class="module greybg">
  95. <div class="wp">
  96. <h1>课程机构</h1>
  97. <div class="module3 eachmod">
  98. <div class="module3_1 left">
  99. <img width="228" height="463" src="{% static "images/module3_1.jpg" %}">
  100. <p class="fisrt_word">名校来袭<br/>权威认证</p>
  101. <a class="more" href="{% url 'org:org_list' %}">查看更多机构 ></a>
  102. </div>
  103. <div class="right">
  104. <ul>
  105. {% for org in course_orgs %}
  106. <li class="{% if forloop.counter|divisibleby:5 %}five{% endif %}">
  107. <a href="{% url 'org:org_home' org.id %}">
  108. <div class="company">
  109. <img width="184" height="100" src="{{ MEDIA_URL }}{{ org.image }}"/>
  110. <div class="score">
  111. <div class="circle">
  112. <h2>{{ org.tag }}</h2>
  113. </div>
  114. </div>
  115. </div>
  116. <p><span class="key" title="{{ org.name }}">{{ org.name }}</span></p>
  117. </a>
  118. </li>
  119. {% endfor %}
  120. </ul>
  121. </div>
  122. </div>
  123. </div>
  124. </div>
  125. </section>
  126. {% endblock %}
  127. {% block custom_js %}
  128. <script type="text/javascript" src="{% static "js/index.js" %}"></script>
  129. {% endblock %}

说明1:课程

课程分is_banner=Falseis_banner=True,两种课程的class属性不一样

is_banner=True的class是class="module1_2 box"

is_banner=False的class是class="module1_3 box",

所以这里要

  1. class="module1_{{ forloop.counter|add:2 }}

说明2:课程机构

课程机构的class分为class=""class="five"

这里要做个判断,

  1. class="{% if forloop.counter|divisibleby:5 %}five{% endif %}

divisibleby过滤器:能不能整除

配置全局404和500

关于全局404和500,

如果不进行配置,Django会自定调用templates下的404.html和500.html

https://docs.djangoproject.com/en/2.1/ref/urls/#handler404

根目录下的urls.py文件MxOnline/urls.py

  1. # 全局404页面配置
  2. handler404 = 'users.views.pag_not_found'
  3. # 全局500页面配置
  4. handler500 = 'users.views.page_error'
  1. # 404对应处理view
  2. def page_not_found(request):
  3. from django.shortcuts import render_to_response
  4. response = render_to_response("404.html", {
  5. })
  6. # 设置response的状态码
  7. response.status_code = 404
  8. return response

Debug = True 时 404是不起作用的

  1. ALLOWED_HOSTS = ['*']

在debug为false情况下。

我们在访问media的时候配置过用serve来取

告诉它访问media的时候去哪个路径下找

debug为True

会自动前往STATICFILES_DIRS取文件的

一旦debug改为false,django就不会代管你的静态文件,

一般静态文件通过第三方http服务器代理转发。

nignx 和 Apache都会自动代理这些静态文件

方法:我们自己url响应我们的static

  1. STATIC_ROOT = os.path.join(BASE_DIR, 'static')
  1. re_path(r'^static/(?P<path>.*)', serve, {"document_root": STATIC_ROOT }),
  1. # 全局500处理函数
  2. def page_error(request):
  3. from django.shortcuts import render_to_response
  4. response = render_to_response('500.html', {})
  5. response.status_code = 500
  6. return response

Django+Xadmin打造在线教育系统(八)的更多相关文章

  1. Django+Xadmin打造在线教育系统(四)

    完成授课机构的功能 模板继承 在templates目录下,新建base.html,剪切org-list.html内容到里面 编写org-list.html内容 继承base.html,将里面的面包屑和 ...

  2. Django+Xadmin打造在线教育系统(三)

    完成登录 注册 找回密码 激活 验证码集成 将HTML文件拷贝到templates目录下,css,js,img,media,images文件夹拷贝到static文件夹下 修改index.html和lo ...

  3. Django+Xadmin打造在线教育系统(二)

    基于xadmin的后台管理 先使用pip进行安装xadmin及其依赖包 pip install django-adminx 安装完成后卸载xadmin,保留依赖包即可 pip uninstall dj ...

  4. Django+Xadmin打造在线教育系统(九)

    xadmin的进阶开发 因版本问题.有些配置可能无效 自定义icon xadmin的图标采用的是第三方css样式font awesome,我们可以进官网下载最新的样式替代原本的,下载地址:http:/ ...

  5. Django+Xadmin打造在线教育系统(七)

    全局导航&个人中心&全局搜索 配置全局导航 让index页面也继承base页面,注意首页有个单独的__index.js__ base页面的导航栏也进行配置 <nav> &l ...

  6. Django+Xadmin打造在线教育系统(一)

    系统概括: 系统具有完整的用户登录注册以及找回密码功能,拥有完整个人中心. 个人中心: 修改头像,修改密码,修改邮箱,可以看到我的课程以及我的收藏.可以删除收藏,我的消息. 导航栏: 公开课,授课讲师 ...

  7. Django+Xadmin打造在线教育系统(五)

    课程相关功能实现 课程列表 创建课程相关的urls.py path("course/", include('course.urls', namespace="course ...

  8. Django+Xadmin打造在线教育系统(六)

    讲师相关功能实现 拷贝并修改teacher-list.html和teacher-detail.html, 继承base模板 # 讲师列表 path('teacher_list/', TeacherLi ...

  9. Django+xadmin打造在线教育平台(一)

    目录 在线教育平台(一)      在线教育平台(二) 在线教育平台(三)      在线教育平台(四) 在线教育平台(五)      在线教育平台(六) 在线教育平台(七)      在线教育平台( ...

随机推荐

  1. 【React】开发一个城市选择控件

    想到做这个,是因为无意中在github上看到了这一个仓库https://github.com/lunlunshiwo/ChooseCity,做的就是一个城市选择控件,是用vue写的,说的是阿里的一道题 ...

  2. Javascript模板引擎handlebars使用

    源地址:http://rfyiamcool.blog.51cto.com/1030776/1278620 代码示例: <!DOCTYPE html> <html> <he ...

  3. 软件工程(FZU2015) 赛季得分榜,第五回合

    SE_FZU目录:1 2 3 4 5 6 7 8 9 10 11 12 13 积分规则 积分制: 作业为10分制,练习为3分制:alpha30分: 团队项目分=团队得分+个人贡献分 个人贡献分: 个人 ...

  4. nginx 编译安装以及简单配置

    前言 Nginx的大名如雷贯耳,资料太多了,网上一搜一大把,所以这里就不阐述nginx的工作原理了,只是简单的编译安装nginx,然后呢,简单配置一下下. 下载Nginx.安装 下载地址:http:/ ...

  5. node学习: package.json

    package.json 定义了这个项目所需要的各种模块,以及项目的配置信息(比如名称.版本.许可证等元数据) 1.创建 package.json npm init npm init –yes 2.p ...

  6. vue单页面模板说明文档(1)

    Introduction This boilerplate is targeted towards large, serious projects and assumes you are somewh ...

  7. jQuery EasyUI 选项卡面板tabs使用实例精讲

    1. 对选项卡面板区域 div 设置 class=”easyui-tabs” 2. 对选项卡面板区域添加多个 div,每个 div 就是一个选项卡(每个面板一定设置 title) 3. 设置面板 fi ...

  8. vue 动态插入组件

    HTML代码: <div id="app"> <p>{{ message }}</p> <button @click="add( ...

  9. Spring 配置详解

    spring4配置文件详解 一.配置数据源 基本的加载properties配置文件 <context:property-placeholder location="classpath* ...

  10. StringTokenizer

    StringTokenizer是一个用来分隔String的应用类,相当于VB的split函数. 1.构造函数 public StringTokenizer(String str) public Str ...