Table of Contents
หน้านี้เป็นส่วนหนึ่งของตัวอย่างการพัฒนาโปรแกรมด้วย Django: uquiz
เราเริ่มพัฒนาโดยสร้าง project
django-admin.py startproject uquiz
แก้ settings.py ขั้นแรก
จากนั้นเข้าไปแก้ settings.py คร่าว ๆ ดังนี้
เพิ่มบรรทัดเหล่านี้ตอนต้นแฟ้มเพื่อกำหนดค่าคงที่ PROJECT_DIR
import os.path PROJECT_DIR = os.path.dirname(__file__)
จากนั้นตั้งค่า DATABASE_ENGINE
(เป็น sqlite3
) และ DATABASE_NAME
เป็นชื่อแฟ้มสำหรับเก็บฐานข้อมูล เช่น development.db
เราจะใช้ระบบ template แน่นอน โดยเราจะเก็บไว้ที่ไดเร็กทอรีย่อย templates ใน project ของเรา ดังนั้นไประบุข้อมูลดังกล่าว โดยเข้าไปแก้ในส่วน TEMPLATE_DIRS
TEMPLATE_DIRS = ( # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates". # Always use forward slashes, even on Windows. # Don't forget to use absolute paths, not relative paths. os.path.join(PROJECT_DIR,'templates'), # <------ Add this line ########## )
สร้าง app
จากนั้นเราจะไปสร้าง app ของเรา
ให้ออกไปที่ไดเร็กทอรีของ project แล้วสั่ง
python manage.py startapp quiz
เพื่อสร้าง app quiz
เราจะไปเพิ่ม app นี้รวมทั้ง admin ใน settings.py
โดยแก้ส่วน INSTALLED_APPS
ให้เป็นดังด้านล่าง
INSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.admin', # <------ add this two lines ########### 'uquiz.quiz', # )
จากนั้นให้ไปที่ไดเร็กทอรีของ project และ syncdb โดยสั่ง
python manage.py syncdb
อย่าลืมรหัสผ่านในระบบ admin
หน้าแรก
เราจะสร้างหน้าแรกของเว็บ รวมถึงจัดการ config ในส่วนการแจกจ่ายเนื้อหา static สำหรับ css
เราจะสร้างไฟล์ templates/base.html
เอาไว้ใส่โครงขอหน้าเว็บของเรา ดังนี้
<html> <body> <h1>uQuiz</h1> <div id="main-content"> {% block content %} {% endblock %} </div> <div id="footer">uQuiz is a demo for class 204223.</div> </body> </html>
และสร้างแฟ้ม templates/quiz/index.html
ไว้เป็นหน้าแรก ดังนี้
{% extends "base.html" %} {% block content %} <p> Welcome to uQuiz. It's time to start creating quizes. </p> <p> What you can do here: <ul> <li>Create quizes</li> <li>Play quizes</li> </ul> </p> {% endblock %}
จากนั้นเราจะไปแก้แฟ้ม quiz/views.py
เพื่อสร้างฟังก์ชันวิว index
สำหรับแสดงหน้าแรก
from django.shortcuts import render_to_response def index(request): return render_to_response("quiz/index.html")
และสุดท้าย ไปแก้แฟ้ม urls.py
ให้เรียกวิวฟังก์ชันนี้ เมื่อผู้ใช้เข้ามาหน้าแรก
urlpatterns = patterns('', (r'^$', 'quiz.views.index'), # <--- add this line ######### )
CSS
เราจะใช้ CSS ในการจัดรูปแบบหน้าเว็บของเรา
ก่อนอื่นเราต้องไปกำหนดค่าให้ระบบแจกจ่ายแฟ้ม static เสียก่อน (ดูรายละเอียดเพิ่มเติมที่ การใช้แฟ้ม_static)
ด้านล่างแสดงการแก้ไขที่เห็นด้วยคำสั่ง diff โดยบรรทัดที่ขึ้นด้วย +
คือบรรทัดที่เพิ่มเข้ามา ส่วน -
คือบรรทัดที่หายไป ต่อไปการแก้ไขมักจะแสดงด้วยวิธีนี้เพื่อความง่ายให้การเขียนเอกสารนี้
เราไปเพิ่มค่าคงที่ใน settings.py
ระบุไดเร็กทอรีที่เก็บ static file (หรือมักเรียกว่า media)
--- a/settings.py Sun Sep 13 22:53:34 2009 +0700 +++ b/settings.py Sun Sep 13 22:56:53 2009 +0700 @@ -83,3 +83,5 @@ 'django.contrib.admin', 'uquiz.quiz', ) + +STATIC_DOC_ROOT = os.path.join(PROJECT_DIR,'media')
จากนั้นทำ url mapping สังเกตว่าเราต้อง import โมดูล settings มาด้วย เพราะเราต้องการค่าคงที่ STATIC_DOC_ROOT
--- a/urls.py Sun Sep 13 22:53:34 2009 +0700 +++ b/urls.py Sun Sep 13 22:56:53 2009 +0700 @@ -1,4 +1,5 @@ from django.conf.urls.defaults import * +from django.conf import settings # Uncomment the next two lines to enable the admin: # from django.contrib import admin @@ -15,4 +16,8 @@ # Uncomment the next line to enable the admin: # (r'^admin/', include(admin.site.urls)), + + # for serving static files + (r'^site_media/(?P<path>.*)$', 'django.views.static.serve', + {'document_root': settings.STATIC_DOC_ROOT}), )
สังเกตว่าเรา map url ที่ขึ้นต้นด้วย site_media
ไปที่วิวมาตรฐานของ django ชื่อ django.views.static.serve
.
จากนั้นสร้างไดเร็กทอรี media
และ media/css
และสร้างแฟ้ม style.css ดังด้านล่าง
h1 { color: white; background: black; height: 40px; padding-left: 5px; } #main-content { margin: 10px; padding: 5px; background: #edf3fe; } #footer { text-align: center; font-size: 70%; }
สุดท้ายเราไปเพิ่มส่วน tag head
ใน templates/base.html
ให้อ่าน css มาด้วย ดังนี้ โดยส่วน head
จะต้องอยู่ก่อนหน้า body
ดังแสดงด้านล่าง
<html> <head> <link href="/site_media/css/style.css" rel="stylesheet" type="text/css"/> </head> <body> ... ละไว้ ... </body> </html>