ฉันสร้างไซต์สำหรับผู้ดูแลระบบDjangoโดยใช้Django เวอร์ชันพัฒนา
แต่ไม่มีสไตล์ CSS:
ฉันจะทำอย่างไร
ขอบคุณ
ฉันสร้างไซต์สำหรับผู้ดูแลระบบDjangoโดยใช้Django เวอร์ชันพัฒนา
แต่ไม่มีสไตล์ CSS:
ฉันจะทำอย่างไร
ขอบคุณ
คำตอบ:
Django ไม่ให้บริการไฟล์คงที่ด้วยตัวมันเอง คุณต้องบอกมันว่าไฟล์อยู่ที่ไหน
ADMIN_MEDIA_PREFIX ใน settings.pyจะชี้ Django ในสถานที่ที่เหมาะสม
เนื่องจากคุณกำลังใช้รุ่นพัฒนาคุณจะต้องการเอกสาร dev เฉพาะสำหรับไฟล์แบบคงที่วิธีการ ลิงก์ของอดัมจะนำคุณไปสู่เวอร์ชัน 1.2
หลังจากตั้งค่าSTATIC_ROOT
และSTATIC_URL
คุณอาจต้องเรียกใช้
python manage.py collectstatic
STATIC_ROOT
และSTATIC_URL
ตัวอย่าง: ฉันรวม"staticfiles"และ"คงที่"ใช้และSTATIC_ROOT=os.path.join(BASE_DIR, "staticfiles")"
STATIC_URL="/static/"
แอปของฉันทำงานได้ดี แต่ไม่พบไฟล์ผู้ดูแลระบบ ดังนั้นให้เปลี่ยนเป็น"staticfiles"หรือ"static"
ADMIN_MEDIA_PREFIX
เลิกใช้แล้วให้ใช้STATIC_URL
แทน การตั้งค่าSTATIC_URL = '/static/'
ใน settings.py ควรทำงาน ลอง:
import os.path import sys
PROJECT_ROOT = os.path.normpath(os.path.dirname(__file__))
แล้ว:
STATIC_ROOT = os.path.join(PROJECT_ROOT, 'static')
STATIC_URL = '/static/'
ทำงานบน Django 1.4 pre-alpha SVN-16920
static/admin
ภายในstatic/css/
ฉันจะสามารถเข้าถึงไฟล์ css ได้ ดูเหมือนว่าฉันจะสามารถเข้าถึงไฟล์ css ได้หากไฟล์นั้นอยู่ภายในstatic/files
แต่ collectstatic ไม่ได้ใส่ไว้ที่นั่น static/admin
แน่นอนว่าการย้ายโฟลเดอร์ด้วยตนเองก็ไม่ได้ทำงานเพราะแม่ยังคงชี้ไปที่
ฉันพบปัญหานี้เช่นกันตาม Django Book Tutorial ในบทที่ 5 | การติดตั้งโมเดลหนังสือจะระบุเมื่ออ้างถึงค่าเริ่มต้น INSTALLED_APPS- "แสดงความคิดเห็นชั่วคราวทั้งหกสตริงโดยใส่อักขระแฮช (#) ไว้ข้างหน้า" http://www.djangobook.com/th/2.0/chapter05.html
จากนั้นในบทที่ 6 หนังสือจะบอกให้ผู้อ่านยกเลิกความคิดเห็น 4 จาก 6 บรรทัดเหล่านั้น - "โปรดทราบว่าเราได้แสดงความคิดเห็นจากรายการ INSTALLED_APPS ทั้งสี่รายการนี้ในบทที่ 5 โดยไม่ต้องแสดงความคิดเห็นในตอนนี้"
แต่บรรทัด statcifiles เป็นสิ่งที่จำเป็นในการกู้คืน CSS ไปยังหน้าผู้ดูแลระบบดังนั้นจึงไม่ต้องใส่ข้อคิดเห็นว่า 'django.contrib.staticfiles'
ฉันอ่านกระทู้อื่น ๆ อีกมากมายที่พยายามแก้ไขปัญหานี้ ... สิ่งนี้ถือว่าแอปที่กำหนดเองของคุณให้บริการไฟล์คงที่อย่างถูกต้องซึ่งจะบ่งชี้ว่า STATIC_ROOT และ STATIC_URL ของคุณมีการตั้งค่าที่เหมาะสม
STATIC_ROOT = ''
STATIC_URL = '/static/'
จากนั้น (จากไดเร็กทอรีสแตติกของคุณ):
ubuntu@ip-1-2-3-4:/srv/www/mysite.com/app_folder/static$ sudo ln -s /usr/local/lib/python2.7/dist-packages/django/contrib/admin/static/admin/ admin
หวังว่านี่จะช่วยใครสักคน ... มีกระทู้มากมายในหัวข้อนี้ :(
ใน/project_name/project_name/settings.py
คุณจำเป็นต้องตั้งSTATIC_URL
ที่จะบอกสิ่งที่เว็บไซต์ของคุณ URL ที่จะใช้สำหรับไฟล์คง
จากนั้นตั้งค่าSTATIC_ROOT
เป็นโฟลเดอร์บางโฟลเดอร์ในระบบไฟล์ของคุณที่ไม่เหมือนกับไดเร็กทอรีใด ๆ ของคุณที่อยู่ในSTATICFILES_DIRS
รายการ
เมื่อSTATICFILES_ROOT
ตั้งค่าแล้วคุณจะเรียกใช้python manage.py collectstatic
จากไดเรกทอรีโครงการ
การดำเนินการนี้จะคัดลอกไฟล์คงที่ของผู้ดูแลระบบและไฟล์ทั้งหมดในโฟลเดอร์อื่น ๆ ที่อยู่ในSTATICFILES_DIRS
รายการ โดยทั่วไปสิ่งนี้จะทำให้ไฟล์คงที่ทั้งหมดของคุณอยู่ในที่เดียวเพื่อให้คุณสามารถย้ายไฟล์เหล่านี้ไปยัง CDN ของคุณเมื่อปรับใช้ไซต์ของคุณ หากคุณเป็นเหมือนฉันและไม่มี CDN คุณมีสองทางเลือก:
STATIC_ROOT
ในSTATICFILES_DIRS
รายการ สิ่งนี้จะช่วยให้ตัวค้นหา staticfiles ใน django สามารถค้นหาไฟล์คงที่ทั้งหมดได้STATICFILES_DIRS
ให้รวมตำแหน่งใหม่นั้นฉันไม่แสดงความคิดเห็นเกี่ยวกับความปลอดภัยด้วยคำตอบนี้มันเป็นเพียงวิธีที่ฉันสามารถพัฒนากับเว็บเซิร์ฟเวอร์สำหรับโครงการขนาดเล็ก ฉันคาดว่าคุณจะต้องการ CDN ตามที่ django แนะนำหากคุณกำลังทำอะไรที่มีขนาดใหญ่กว่านี้
อัปเดต: ฉันเพิ่งพบปัญหานี้และวิธีนี้ไม่ได้ทำในสิ่งที่ฉันคิดว่าคุณต้องการ สิ่งที่ได้ผลสำหรับฉันคือหลังจากที่ฉันรันcollectstatic
ฉันเพิ่งคัดลอกไฟล์คงที่ของผู้ดูแลระบบที่ใส่ลงSTATICFILES_ROOT
ในไดเร็กทอรีที่ฉันใช้สำหรับไฟล์คงที่ของฉันเอง นั่นช่วยแก้ปัญหาให้ฉันได้
นอกจากคำตอบอื่น ๆ ที่เป็นประโยชน์แล้วฉันยังมีปัญหาที่ยังไม่ได้ระบุ หลังจากอัปเกรดจาก Django 1.3 เป็น 1.6 ไดเร็กทอรีไฟล์แบบคงที่ของฉันมีลิงก์สัญลักษณ์ที่ใช้งานไม่ได้ไปยังไฟล์คงที่ของผู้ดูแลระบบ django
settings.py ของฉันถูกกำหนดค่าด้วย:
STATICFILES_DIRS = (
'/var/www/static/my-dev',
)
ตามคำตอบนี้ ,
Django คาดว่าจะพบไฟล์คงที่ของผู้ดูแลระบบภายใต้ URL / admin /
ฉันมีลิงก์สัญลักษณ์/var/www/static/my-dev/admin
ซึ่งตั้งค่าเป็น:
admin -> /usr/local/lib/python2.7/dist-packages/django/contrib/admin/media/
ตำแหน่งนั้นไม่มีอยู่ใน django 1.6 อีกต่อไปดังนั้นฉันจึงอัปเดตลิงก์ไปที่:
admin -> /usr/local/lib/python2.7/dist-packages/django/contrib/admin/static/admin/
และตอนนี้ไซต์ผู้ดูแลระบบของฉันทำงานได้อย่างถูกต้อง
หากคุณใช้เซิร์ฟเวอร์ Apache เพื่อโฮสต์ไซต์ django ของคุณคุณต้องตรวจสอบให้แน่ใจว่านามแฝงแบบคงที่ชี้ไปที่ / directory to site / site_media / static / ถ้าไฟล์คงที่ของคุณอยู่ใน / directory to site / site / site_media / static / การกำหนดค่านามแฝง Apache ก่อนหน้านี้จะไม่ทำงาน
ในขณะที่ติดตามบทช่วยสอน Django ฉันมีปัญหาที่คล้ายกันและในกรณีของฉันปัญหาคือ mimetype ที่เซิร์ฟเวอร์การพัฒนาใช้เมื่อให้บริการไฟล์ css
mimetype ที่ให้บริการคือ 'application / x-css' ซึ่งนำไปสู่ข้อความเตือนต่อไปนี้ใน Chrome (ในแท็บ 'เครือข่าย' ของเครื่องมือสำหรับนักพัฒนา):
ทรัพยากรถูกตีความว่าเป็นสไตล์ชีต แต่ถ่ายโอนด้วยแอปพลิเคชันประเภท MIME / x-css: " http://127.0.0.1:8000/static/admin/css/base.css "
วิธีแก้ปัญหาที่ฉันพบ: การเปลี่ยน mimetype ที่จะให้บริการโดยการเพิ่มบรรทัดต่อไปนี้ในไฟล์ Manage.py ของ django webapp:
import mimetypes
mimetypes.init()
mimetypes.types_map['.css'] = 'text/css'
หมายเหตุ: ทำงานให้ฉันกับ Django 1.7.4 บน Python 2.7 และ Chrome 40.0
Content-Type: text/plain
และไม่มีการแสดงผลบนหน้านี้
ปัญหาประเภทเดียวกันที่ฉันพบขณะพัฒนาไซต์ใน django-1.10.5 และ python-2.7.13 แต่ใน firefox-51 และ chrome ของฉันหน้าล็อกอินสามารถรับ css ได้ แต่ยังไม่มีสไตล์ แต่น่าแปลกที่มันทำงานบน IE-8 ..
ฉันพยายามทำทุกสิ่งที่เป็นไปได้ที่กล่าวถึงที่นี่และเหมาะสมกับชุดเวอร์ชัน sw ของฉัน ไม่มีผล
แต่เมื่อฉันลองไซต์เดียวกันในระบบอื่นที่มี python-2.7.8 มันก็ใช้ได้ ..
เพิ่งโพสต์เผื่อว่าอาจช่วยใครได้ ...
แก้ไข: ภายหลังฉันพบว่าใน python-2.7.13 การเขียนสองบรรทัดต่อไปนี้ใน settings.py (รวมถึงการล้างแคชของเบราว์เซอร์) ได้ทำเคล็ดลับ
import mimetypes
mimetypes.add_type("text/css", ".css", True)
ปัญหาของฉันได้รับการแก้ไขโดยการสร้างสภาพแวดล้อมเสมือนใหม่สำหรับโปรเจ็กต์ก่อนหน้านั้นฉันใช้ตัวแปล python ระดับระบบทั่วไป
$ mkvirtualenv myproject
อ้างอิง: https://docs.djangoproject.com/en/2.1/howto/windows/
ตรวจสอบให้แน่ใจว่า'django.contrib.staticfiles'
อยู่ในINSTALLED_APPS
settings.py ของคุณ
วิ่ง: python manage.py collectstatic
เพิ่มบรรทัดนี้ใน Vhost ซึ่งอยู่ที่: /etc/apache2/sites-available/000-default.conf
นามแฝง / static / admin / /var/www/html/example.com/static/admin
นี่คือการตั้งค่า Vhost ทั้งหมดสำหรับการตั้งค่า django
<VirtualHost *:80>
ServerName gautam.tech
ServerAlias www.gautam.tech
WSGIDaemonProcess gautam.tech python-path=/var/www/html/gautam.tech python-home=/var/www/html/gautam.tech/venv
WSGIProcessGroup gautam.tech
#Your static files location
Alias /static /var/www/html/gautam.tech/static
Alias /media/ /var/www/html/gautam.tech/media
Alias /static/admin/ /var/www/html/gautam.tech/static/admin
<Directory /var/www/html/gautam.tech/static>
Require all granted
</Directory>
<Directory /var/www/html/gautam.tech/media>
Require all granted
</Directory>
WSGIScriptAlias / /var/www/html/gautam.tech/myproject/wsgi.py
DocumentRoot /var/www/html/gautam.tech
<Directory /var/www/html/gautam.tech>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
CustomLog /var/www/html/gautam.tech/access.log combined
ErrorLog /var/www/html/gautam.tech/error.log
</VirtualHost>
จะได้ผลแน่นอน!
ในปัญหานี้อยู่ในเซิร์ฟเวอร์ dev / test / prod และใช้ Nginx โปรดทำตามขั้นตอนด้านล่าง
ตั้งค่าคอนฟิกใน settings.py เป็นบางอย่างด้านล่าง
STATIC_URL = '/static/'
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
เรียกใช้คำสั่งด้านล่างเพื่อสร้างไฟล์ css และ js ในโฟลเดอร์แบบคงที่
$ python manage.py collectstatic
config ใน / etc / nginx / sites-enabled / example (Nginx) เพื่อให้บริการไฟล์แบบคงที่
location /static/ {
alias /project/root/folder/static/;
}
ใช้งานได้ดีและง่ายดาย ฉันย้าย (ด้วยตนเอง) โฟลเดอร์ เพียงแค่คุณต้องคัดลอกของคุณstatic/admin
จากไดเรกทอรีของโครงการหลักและวางลงใน public_html static/
หากไม่มีโฟลเดอร์คงที่คุณต้องเรียกใช้คำสั่งต่อไปนี้ในเทอร์มินัล
python manage.py collectstatic
ที่นี่คุณไปกับ css การทำงานของผู้ดูแลระบบ Django
หากคุณตั้งค่าไว้ใน settings.py สำหรับ STATICFILES_DIRS และโฟลเดอร์ที่ประกาศไม่มีอยู่หรืออยู่ในตำแหน่งที่ไม่ถูกต้องจะทำให้ผู้ดูแลระบบไม่มีสไตล์เช่นการกำหนด STATICFILES_DIRS = (os.path.join (BASE_DIR, "static" )) และไม่มีโฟลเดอร์แบบคงที่
หลังจากลองใช้คำแนะนำกว่า 1,000 ข้อในที่สุดฉันก็พบวิธีแก้ปัญหาที่ช่วยได้ นี่คือสิ่งที่ฉันลองและสิ่งที่ฉันใช้ ฉันใช้เว็บเซิร์ฟเวอร์ django-1.11 และ nginx ประการแรกฉันตรวจสอบให้แน่ใจว่าไฟล์ CSS / js ของฉันไม่ได้รับ 404 ในคอนโซลของเบราว์เซอร์ หลังจากนั้นฉันก็เห็นคำเตือน
ทรัพยากรตีความเป็นสไตล์ชีต แต่ถ่ายโอนด้วยข้อความประเภท mime / ธรรมดา
ฉันพบ base.html ในเทมเพลตผู้ดูแลระบบและนำออก
type="text/css"
และตอนนี้เส้นจะมีลักษณะดังนี้:
<link rel="stylesheet" href="{% block stylesheet %}{% static "admin/css/base.css" %}{% endblock %}" />
สิ่งนี้ช่วยแก้ปัญหาให้ฉันได้
การกำหนดค่าไฟล์คง
ตรวจสอบให้แน่ใจว่าdjango.contrib.staticfiles
จะรวมอยู่ในของคุณINSTALLED_APPS
ในไฟล์ settings.py ของคุณกำหนด STATIC_URL ตัวอย่างเช่น:
STATIC_URL = '/static/'
สำหรับรายละเอียดเพิ่มเติม ไฟล์คงที่
แผงการดูแลระบบทำงานได้ดียกเว้นไม่ได้โหลด css สิ่งนี้ใช้ได้กับLightsail Django กับ Apache
1. กำหนด STATIC_ROOT และ STATIC_URL ใน settings.py
STATIC_ROOT = '/opt/bitnami/projects/decisions/decision/'
STATIC_URL = '/static/'
2. ฉาย (คัดลอก) ไฟล์เนื้อหาของผู้ดูแลระบบไปยังโครงการ
รันpython manage.py collectstatic
คำสั่งนี้สร้าง/opt/bitnami/projects/decisions/decision/admin
โฟลเดอร์ที่มีcss/
fonts/
img/
js/
โฟลเดอร์ย่อย
3. สร้าง / คง url เข้าถึงได้จาก apache
วางข้อมูลโค้ดนี้ลงใน/opt/bitnami/apache2/conf/bitnami/bitnami.conf
(หากคุณตั้งค่า ssl ตำแหน่งไฟล์จะเป็น/opt/bitnami/apache2/conf/bitnami/bitnami-ssl.conf
)
Alias /static/ "/opt/bitnami/projects/decisions/decision/"
<Directory "/opt/bitnami/projects/decisions/decision/">
Order allow,deny
Options Indexes
Allow from all
IndexOptions FancyIndexing
</Directory>
4. อย่าลืมรีสตาร์ท apache
sudo /opt/bitnami/ctlscript.sh restart apache