ホーム画面とグローバル404、500設定
- バンカー画像
- 公開コース
- 教学機構
新規viewの作成
## ホーム画面view
class TopPageView(View):
def get(self, request):
# バンカー画像を取得
all_banners = Banner.objects.all().order_by('display_order')[:5]
# 通常コース
normal_courses = Course.objects.filter(is_banner=False)[:6]
# バンカーコース(3件)
banner_courses = Course.objects.filter(is_banner=True)[:3]
# コース機構
course_orgs = CourseOrg.objects.all()[:15]
return render(request, 'index.html', {
'all_banners': all_banners,
'normal_courses': normal_courses,
'banner_courses': banner_courses,
'course_orgs': course_orgs,
})
Courseモデルにフィールドを追加:
is_banner = models.BooleanField(default=False, verbose_name="バンカー表示")
CourseOrgモデルにフィールドを追加:
category = models.CharField(max_length=10, default="国内有名大学", verbose_name="機構カテゴリ")
フロントエンドページ
{% block content %}
<div class="banner">
<div class="wp">
<div class="fl">
<div class="imgslide">
{% for banner\_item in all\_banners %} - [  ](<{{ banner_item.link_url }}>)
{% endfor %}
</div>
<div class="unslider-arrow prev"></div>
<div class="unslider-arrow next"></div>
</div>
</div>
</div>
<section>
<div class="wp">
- 専門性と権威
- 最新のコース
- ベテラン講師
- 正確なデータ
</div>
</section>
<section>
<div class="module">
<div class="wp">
<h1>公開コース</h1>
<div class="module1 eachmod">
<div class="module1_1 left">

<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">
{% for b\_course in banner\_courses %} - [  ](<{% url 'course:course_detail' b_course.id %}>)
{% endfor %}
</div>
<div class="unslider-arrow2 prev"></div>
<div class="unslider-arrow2 next"></div>
</div>
{% for n_course in normal_courses %}
<div class="module1_{{ forloop.counter|add:2 }} box">
<a href="{% url 'course:course_detail' n_course.id %}">

</a>
<div class="des">
<a href="{% url 'course:course_detail' n_course.id %}">
<h2 title="{{ n_course.title }}">{{ n_course.title }}</h2>
</a>
<span class="fl">難易度:<i class="key">{{ n_course.get_level_display }}</i></span>
<span class="fr">学習者数:{{ n_course.enrolled_count }}</span>
</div>
<div class="bottom">
<span class="fl"
title="{{ n_course.organization.name }}">{{ n_course.organization.name }}</span>
<span class="star fr">{{ n_course.favorite_count }}</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">

<p class="fisrt_word">名校来袭<br/>権威認定</p>
<a class="more" href="{% url 'org:org_list' %}">更多機構を見る ></a>
</div>
<div class="right">
{% for org\_item in course\_orgs %} - [<div class="company"> <div class="score"><div class="circle">{{ org\_item.category }}
------------------------
</div> </div> </div><span class="key" title="{{ org_item.name }}">{{ org\_item.name }}</span>
](<{% url 'org:org_home' org_item.id %}>)
{% endfor %}
</div>
</div>
</div>
</div>
</section>
{% endblock %}
{% block custom_js %}
<script type="text/javascript" src="{% static 'js/index.js' %}"></script>
{% endblock %}
説明1:コース
コースにはis_banner=Falseとis_banner=Trueの2種類があり、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対応handle view
def pag_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サーバーが代理转发する
nginxやApacheは自動的にこれらの静的ファイルを代理する
方法:独自のurlでstaticに応答する
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
re_path(r'^static/(?P<path>.*)', serve, {"document_root": STATIC_ROOT }),
# グローバル500handle関数
def page_error(request):
from django.shortcuts import render_to_response
response = render_to_response('500.html', {})
response.status_code = 500
return response