Template และ media (stylesheet, images) ใน Django

สวัสดีครับ ช่วงนี้ถามเรื่องจังโก้บ่อย อย่าเพิ่งรำคาญนะครับ คือผมไม่สามารถทำให้รูปภาพหรือ stylesheet ที่กำหนดไว้ใน directory หนึ่ง มีผลต่อโปรเจ็กที่สร้างโดยจังโก้น่ะครับ

ในไฟล์ setting.py จะมีตัวแปรชื่อ MEDIA_ROOT เข้าใจว่านั่นคือการกำหนดพาธให้จังโก้รู้ว่า เราต้องการใช้รูปภาพหรือ stylesheet จากที่ไหน

แต่หลังจากพยายามงมอยู่หลายรอบ ในเวลาหลายวัน ก็ไม่สามารถทำให้มันแสดงผลได้อย่างถูกต้องได้ ลองกำหนดตรงๆ แบบดื้อๆ คือ

มันกลับไปดึงไฟล์มาจากโฟลเดอร์ media ของ admin แทน (ผมตั้งชื่อโฟลเดอร์สำหรับ template ว่า media เหมือนกัน)

ผมจึงไม่แน่ใจว่าในไฟล์ template ต้องมีการกำหนดตัวแปรอะไรเพิ่มเติม เพื่อแทรกลงในพาธที่อ้างถึง directory ดังกล่าวหรือไม่

setting.py

# Absolute path to the directory that holds media.
MEDIA_ROOT = "/home/crucifier/paymentgateway/media/"

template (base.html)

<link href="css/content.css" rel="stylesheet" type="text/css">

ขอความกรุณาด้วยนะครับ

sugree's picture

ใน settings.py จะมีตัวแปรที่เกี่ยวข้อง 3 ตัว คือ MEDIA_ROOT MEDIA_URL และ ADMIN_MEDIA_PREFIX ในกรณีนี้ผมเดาว่ามมันเกิดจากไม่ได้เซ็ต MEDIA_URL ให้ถูกต้อง ลองดูแบบที่ผมใช้

MEDIA_ROOT = '/home/sugree/work/djangosite/media/'
MEDIA_URL = 'http://localhost:8000/m'
ADMIN_MEDIA_PREFIX = '/media/'

แล้วก็ใส่ใน urls.py ด้วย

from django.conf.urls.defaults import *
 
urlpatterns = patterns('',
    (r'^/', include('djangosite.modules.urls')),
    (r'^admin/', include('django.contrib.admin.urls')),
    (r'^m/(?P<path>.*)$', 'django.views.static.serve', {'document_root': '/home/sugree/work/djangosite/media'}),
)

จุดสำคัญอยู่ที่ ^m/ เพราะว่าเราไม่ได้ใช้ apache จริงๆ แล้ว django แนะนำให้เอา media ไปใส่ไว้ใน apache น่ะครับ แต่อันนี้แค่รันทดสอบ

ขอบคุณมากๆ เลยครับ คุณ sugree ผมทำได้แล้ว

ว่าแต่ปัญหานี้ ผมพยายามหาอ่านใน doc ของ Django แล้ว ทำไมไม่เจอนะ Google ก็ไม่เห็น

sugree's picture

มีอธิบายในนั้น แต่ไม่ได้ยกตัวอย่างชัดเจน มันกะว่ายังไงก็ควรจะแยก media ออกไปข้างนอก

ย้าย Codenone

ประกาศย้าย Codenone ไปใช้ Forum ของ Blognone แทนครับ ตามไปตั้งกระทู้ต่อได้ที่ Codenone Forum (รายละเอียดอ่านจากกระทู้ ย้าย Codenone ไปรวมกับ Blognone)

กระทู้เก่าๆ จะย้ายตามไปในภายหลัง ตอนนี้ปิดการโพสต์กระทู้ไว้ เหลือไว้เฉพาะอ้างอิงเท่านั้น