คือ ผมอยากรบกวน ไฟล์ .css ที่กำหนดการจัดหน้า base.html(กำหนดให้เป็นหน้า template) ไม่ทำงานครับ ไม่ทราบว่าต้องทำยังไงครับ
1. settings.py
TEMPLATE_DIRS = (
'/home/somkid/Desktop/sanook/web/mysite/template'
)
หน้า base.html และ .css เก็บเอาใว้ที่เดียวกันครับภายใน
พาธนี้ครับ -->> '/home/somkid/Desktop/sanook/web/mysite/template'
คำตอบที่ต้องการ ทราบคือ ว่าเพราะอะไรถึง base.html ไม่โหลด .css มาทำงานครับ และจะมีวิธีการอย่างไรครับ สำหรับที่จะทำให้มันทำงานครับ
ขอบคุณไว้ ณ ที่นี้ครับ
อันนี้ผมไม่เก่ง Python นะครับ
แต่ปกติ CSS ที่โหลดผ่านไฟล์ HTML จะใช้ TAG ในการโหลดขึ้นมาใช่ไหมครับ?
เช่น
<link type="text/css" rel="stylesheet" href="/modules/views/css/views.css?8" />
ในกรณีนี้สามารถเขียน HTML เป็น
<link type="text/css" rel="stylesheet" href="ชื่อไฟล์CSS.css" />
ได้เลยครับ ถ้าอยู่ไดเร็คทรอรี่เดียวกัน
กรณีที่ Include CSS ผ่าน Template แล้วรันผ่าน Web Server
ให้ดูก่อนว่า path ที่เราเปิดอยู่ที่ไหน โดยไม่ต้องคำนึงว่าบนเครื่องเราเก็บอยู่ที่ไหนครับ
เช่น ถ้าเปิดเว็บที่ Include ผ่าน Browser ที่ URL http://localhost/web/mysite/
แสดงว่าถ้าเราอยากดู CSS ก็อยู่ที่ http://localhost/web/mysite/template/ชื่อไฟล์CSS.css
ซึ่งอยู่คนละที่กับ Template ที่เราวางไว้
วิธีง่ายๆ คือ ให้ลองใส่ ../ เพื่อย้อนไดเร็คทรอรี่ข้างหน้าชื่อไฟล์ CSS ที่ละครั้งแล้วรันดูเช่น
<link type="text/css" rel="stylesheet" href="../ชื่อไฟล์CSS.css" />
(หากรันที่ http://localhost/web/mysite/)
ถ้ายังไม่ได้ก็เป็น
<link type="text/css" rel="stylesheet" href="../../ชื่อไฟล์CSS.css" />
(หากรันที่ http://localhost/web/)
ลองดูครับ ^^
กลับไปที่ Concept การออกแบบเหมือนเดิมครับ DJango Template ไม่ใช่ Static File ดังนั้น หากคุณนำไฟล์ CSS ไปรวมไว้ใน Template ก็ไม่เกิดผล เพราะตัว Django ก็จะมองมันเป็นเพียง Template อีกอันนึงเท่านั้น ให้คุณลองนำไฟล์ css แยกไปต่างหาก และกำหนดให้เป็น static file เสียก็จะเรียบร้อย
ลองอ่านเพิ่มเติมที่นี่ How to serve static files
ขอติงเรื่องตั้งคำถาม หัวข้อกระทู้ไม่ได้สื่อความถึงคำถามที่อยากได้ ลองอ่านกติการมารยาทในการตั้งคำถามดูหน่อย ปักหมุดอยู่อันแรก
อีกเรื่อง ผมไม่ใช่เทพ การที่ผมมาตอบคำถามคงไม่เป็นการจุ้นจ้านเกินไปนะครับ
ไปอ่านตามลิงค์แล้วครับก็ยังไม่ได้ อยู่ดีครับ ถ้าไม่เป็นการบกวนเกินไปช่วยอธิบายขั้นตอนหน่อยได้ไหมครับ
CSS ที่พูดถึงเป็น link ไปยังไฟล์ถูกหรือไม่ครับ
ให้ทดลองนำ CSS มาไว้ใน template ดูก่อน จะพบว่าทำงานได้ถูกต้อง
แสดงว่าเกิดปัญหาจาก Django หาไฟล์ CSS ไม่เจอ
เพราะว่าอะไร?
เกิดจากกระบวนการ Render template ของ Django ไม่ได้มอง Template เป็น Static file ทั่วไป ในเวลาแสดงผล Django จะโหลดข้อมูล Template และนำมาประมวลผล แล้วตอบกลับเป็น HTML หรืออื่นๆ ดังนั้น ไฟล์ CSS จะไม่ได้อยู่ในกระบวนการนี้
แล้วจะทำยังไง
เราจะต้องกำหนดให้ Django รู้ว่า Path ต่อไปนี้ เป็น Static file ธรรมดา ไม่ต้องประมวลผล Webserver สามารถใช้ไฟล์นี้ได้เลย ยกตัวอย่างเช่น
เพิ่มข้อมูลลง url.conf
แปลว่าถ้าอ้างถึง http://website.com/css ให้ไปเลือกหาไฟล์จาก '/path/to/css' เลย
ขอบคุณมากๆๆ ครับได้แล้วครับ
ขอบคุณครับ