Django+Xadmin打造在线教育系统(八)

首页和全局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
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,445评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,889评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,047评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,760评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,745评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,638评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,011评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,669评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,923评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,655评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,740评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,406评论 4 320
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,995评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,961评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,023评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,483评论 2 342

推荐阅读更多精彩内容