首页和全局404,500配置

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

新建view

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

为Course添加字段: isbanner

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

CourseOrg添加一个字段

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

前端页面

        {% block content %}
<div class="banner">
<div class="wp">
<div class="fl">
<div class="imgslide">
<ul class="imgs">
{% for banner in all_banner %}
<li>
<a href="{{ banner.url }}">
<img width="1200" height="478" src="{{ MEDIA_URL }}{{ banner.image }}">
</a>
</li>
{% endfor %}
</ul>
</div>
<div class="unslider-arrow prev"></div>
<div class="unslider-arrow next"></div>
</div>
</div>
</div> <section>
<div class="wp">
<ul class="feature">
<li class="feature1">
<img class="pic" src="{% static "images/feature1.png" %}">
<p class="center">专业权威</p>
</li>
<li class="feature2">
<img class="pic" src="{% static "images/feature2.png" %}">
<p class="center">课程最新</p>
</li>
<li class="feature3">
<img class="pic" src="{% static "images/feature3.png" %}">
<p class="center">名师授课</p>
</li>
<li class="feature4">
<img class="pic" src="{% static "images/feature4.png" %}">
<p class="center">数据真实</p>
</li>
</ul>
</div>
</section> <section>
<div class="module">
<div class="wp">
<h1>公开课程</h1>
<div class="module1 eachmod">
<div class="module1_1 left">
<img width="228" height="614" src="{% static "images/module1_1.jpg" %}">
<p class="fisrt_word">名师授课<br/>专业权威</p>
<a class="more" href="{% url 'course:list' %}">查看更多课程 ></a>
</div>
<div class="right group_list">
<div class="module1_2 box">
<div class="imgslide2">
<ul class="imgs">
{% for cours in banner_courses %}
<li>
<a href="{% url 'course:course_detail' cours.id %}">
<img width="470" height="300" src="{{ MEDIA_URL }}{{ cours.image }}">
</a>
</li>
{% endfor %}
</ul>
</div>
<div class="unslider-arrow2 prev"></div>
<div class="unslider-arrow2 next"></div>
</div>
{% for cours in courses %}
<div class="module1_{{ forloop.counter|add:2 }} box">
<a href="{% url 'course:course_detail' cours.id %}">
<img width="233" height="190" src="{{ MEDIA_URL }}{{ cours.image }}">
</a>
<div class="des">
<a href="{% url 'course:course_detail' cours.id %}">
<h2 title="{{ cours.name }}">{{ cours.name }}</h2>
</a>
<span class="fl">难度:<i class="key">{{ cours.get_degree_display }}</i></span>
<span class="fr">学习人数:{{ cours.students }}</span>
</div>
<div class="bottom">
<span class="fl"
title="{{ cours.course_org.name }}">{{ cours.course_org.name }}</span>
<span class="star fr">{{ cours.fav_nums }}</span>
</div>
</div>
{% endfor %}
</div>
</div>
</div>
</div>
</section>
<section>
<div class="module greybg">
<div class="wp">
<h1>课程机构</h1>
<div class="module3 eachmod">
<div class="module3_1 left">
<img width="228" height="463" src="{% static "images/module3_1.jpg" %}">
<p class="fisrt_word">名校来袭<br/>权威认证</p>
<a class="more" href="{% url 'org:org_list' %}">查看更多机构 ></a>
</div>
<div class="right">
<ul>
{% for org in course_orgs %}
<li class="{% if forloop.counter|divisibleby:5 %}five{% endif %}">
<a href="{% url 'org:org_home' org.id %}">
<div class="company">
<img width="184" height="100" src="{{ MEDIA_URL }}{{ org.image }}"/>
<div class="score">
<div class="circle">
<h2>{{ org.tag }}</h2>
</div>
</div>
</div>
<p><span class="key" title="{{ org.name }}">{{ org.name }}</span></p>
</a>
</li>
{% endfor %}
</ul>
</div>
</div>
</div>
</div>
</section>
{% endblock %} {% block custom_js %}
<script type="text/javascript" src="{% static "js/index.js" %}"></script>
{% endblock %}

说明1:课程

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

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

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

所以这里要

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

说明2:课程机构

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

这里要做个判断,

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

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

Debug = True 时 404是不起作用的

ALLOWED_HOSTS = ['*']

在debug为false情况下。

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

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

debug为True

会自动前往STATICFILES_DIRS取文件的

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

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

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

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

STATIC_ROOT = os.path.join(BASE_DIR, 'static')
re_path(r'^static/(?P<path>.*)', serve, {"document_root": STATIC_ROOT }),
    # 全局500处理函数
def page_error(request):
from django.shortcuts import render_to_response
response = render_to_response('500.html', {})
response.status_code = 500
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. C#.NET 大型通用信息化系统集成快速开发平台 4.1 版本 - 严格的用户账户审核功能

    整个集团有几万个用户,一个个用户添加是不现实的,只有每个公司的系统管理员添加.或者用户申请帐户,然后有相应的管理员审核,才会更准确一些. 每个公司.分公司.部门的账户情况只有所在公司的管理员是最清楚的 ...

  2. portscaner 多线程、多协程并发端口扫描

    import socket,time,re,sys,os,threading import gevent from gevent import monkey monkey.patch_all() so ...

  3. pandas删除某一列的方法

    方法一:直接del df['column-name'] 删除sub_grade_列, 输入del df['sub_grade_x'] 方法二:采用drop方法,有下面三种等价的表达式: 1. df= ...

  4. 线程中的current thread not owner异常错误

    多线程常用的一些方法: wait(),wait(long),notify(),notifyAll()等 这些方法是当前类的实例方法, wait()      是使持有对象锁的线程释放锁;wait(lo ...

  5. 【kindle笔记】之 《浪潮之巅》- 2018-1-

    <浪潮之巅> 这本书推荐自最爱的政治课老师. 政治课老师张巍老师.我会一直记得你的. 以这样的身份来到这个学校,他人的质疑,自己的忐忑,老板的不公.犹犹豫豫谨小慎微地前进. 第一次听到这样 ...

  6. JUnit的配置及使用

    一.安装插件JUnitGenertor V2.0 File->Setting->Plugins->在搜索框里输入JUintGenerator V2.0 二.导入JUnit相关jar包 ...

  7. Python3练习题 011:成绩打分

    # print('-----判断输入值和60大小判断')# b=int(input('input num'))# if b >60:# print('良')# elif b==60:# prin ...

  8. 【学亮IT手记】jQuery each()函数用法实例

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script sr ...

  9. ELK日志系统+x-pack安全验证

    根据之前已经搭好的ELK系统,现在加一个x-pack插件上去,不然谁拿到ip和端口都可以访问elasticsearch和kibana. 要的效果如下:打开kibana界面的时候要让其输入用户名密码才能 ...

  10. CodeForces 113B Petr#

    题目链接:http://codeforces.com/problemset/problem/113/B 题目大意: 多组数据每组给定3个字符串T,Sbeg,Sed,求字符串T中有多少子串是以Sbeg开 ...