ทำไมไซต์ผู้ดูแลระบบ django ของฉันไม่มีรูปแบบ css


87

ฉันสร้างไซต์สำหรับผู้ดูแลระบบDjangoโดยใช้Django เวอร์ชันพัฒนา

แต่ไม่มีสไตล์ CSS:

ข้อความแสดงแทน

ฉันจะทำอย่างไร

ขอบคุณ


2
มีสไตล์ที่อ้างถึงที่ไม่ได้โหลดหรือไม่?
Pekka

1
คุณต้องกำหนดค่าเซิร์ฟเวอร์ dev เพื่อให้บริการไฟล์แบบคงที่: docs.djangoproject.com/en/1.2/howto/static-files
Adam Vandenberg

1
@Pekka ใช่มันเป็นสไตล์เริ่มต้นของ django มันอยู่ใน D: \ Python25 \ Lib \ site-Packages \ django \ Contrib \ admin \ media
zjm1126

1
ฉันมีปัญหาเดียวกันกับเนื้อหาคงที่ของผู้ดูแลระบบที่ไม่สามารถใช้งานได้ แต่ใช้ nginx (แทนที่จะเป็นสภาพแวดล้อมการพัฒนา) โดยทั่วไปตรวจสอบไฟล์กำหนดค่า nginx ของคุณและตรวจสอบให้แน่ใจว่าเป็นตำแหน่งของ "collectstatic" ของคุณ รายละเอียดที่นี่: serverfault.com/questions/403264/…
จะ

คำตอบ:


14

Django ไม่ให้บริการไฟล์คงที่ด้วยตัวมันเอง คุณต้องบอกมันว่าไฟล์อยู่ที่ไหน

ADMIN_MEDIA_PREFIX ใน settings.pyจะชี้ Django ในสถานที่ที่เหมาะสม

เนื่องจากคุณกำลังใช้รุ่นพัฒนาคุณจะต้องการเอกสาร dev เฉพาะสำหรับไฟล์แบบคงที่วิธีการ ลิงก์ของอดัมจะนำคุณไปสู่เวอร์ชัน 1.2


11
คำตอบที่ดี แต่ตอนนี้เลิกใช้งานแล้วและไม่มีจาก settings.py อ่านด้านล่างสำหรับโซลูชันล่าสุดเพิ่มเติม
RussellStewart

ฉันมีข้อผิดพลาดเดียวกัน แต่ใน Flask ฉันใส่ css ไว้ในโฟลเดอร์คงที่ และใช้ jinj2 2 suntax เช่น {{url_for ('static', filename = 'css / style.css')}} แต่ฉันยังพบข้อผิดพลาดนี้ในแล็ปท็อปของฉัน ฉันบังคับให้รีเฟรชหน้า แต่ยังคงมีปัญหาอยู่ โปรดช่วย
Salman Mushtaq

67

หลังจากตั้งค่าSTATIC_ROOTและSTATIC_URLคุณอาจต้องเรียกใช้

python manage.py collectstatic

1
สิ่งนี้ใช้ได้กับ 1.5.2 ด้วย ฉันไม่ต้องเปลี่ยนหรือเพิ่มไฟล์หรือรหัสใด ๆ
lukik

1
อาจจะมีประโยชน์สำหรับใครสักคน: คุณควรใช้ชื่อเดียวกันสำหรับSTATIC_ROOTและSTATIC_URLตัวอย่าง: ฉันรวม"staticfiles"และ"คงที่"ใช้และSTATIC_ROOT=os.path.join(BASE_DIR, "staticfiles")" STATIC_URL="/static/"แอปของฉันทำงานได้ดี แต่ไม่พบไฟล์ผู้ดูแลระบบ ดังนั้นให้เปลี่ยนเป็น"staticfiles"หรือ"static"
elano7

17

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


1
สิ่งนี้ไม่ได้ผลสำหรับฉันด้วย ฉันสังเกตเห็นว่าถ้าฉันย้าย (ด้วยตนเอง) โฟลเดอร์static/adminภายในstatic/css/ฉันจะสามารถเข้าถึงไฟล์ css ได้ ดูเหมือนว่าฉันจะสามารถเข้าถึงไฟล์ css ได้หากไฟล์นั้นอยู่ภายในstatic/filesแต่ collectstatic ไม่ได้ใส่ไว้ที่นั่น static/adminแน่นอนว่าการย้ายโฟลเดอร์ด้วยตนเองก็ไม่ได้ทำงานเพราะแม่ยังคงชี้ไปที่
toto_tico

ทำงานให้ฉันเมื่อพยายามเรียกใช้อินเทอร์เฟซผู้ดูแลระบบที่สร้างด้วย Django v1.2 ทดสอบบน 1.3 แล้วปรับใช้ใหม่บน v1.4 ใช้ Ubuntu 12.04 LTE
Adam Lewis

9

ฉันพบปัญหานี้เช่นกันตาม 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'


การไม่ใส่ข้อคิดเห็น 'django.contrib.staticfiles' ในไฟล์ settings.py ตามที่แนะนำข้างต้นก็ใช้ได้ผลกับฉันเช่นกัน "django.contrib.staticfiles" ควรปรากฏเป็นค่าเริ่มต้นในไฟล์ settings.py ของคุณภายใต้ INSTALLED_APPS ขอบคุณ Chris สำหรับคำแนะนำของคุณ
user2471242

มาที่นี่จาก Django Book ด้วย การลบอักขระเพียงตัวเดียวทำได้
pbarill

8

ฉันอ่านกระทู้อื่น ๆ อีกมากมายที่พยายามแก้ไขปัญหานี้ ... สิ่งนี้ถือว่าแอปที่กำหนดเองของคุณให้บริการไฟล์คงที่อย่างถูกต้องซึ่งจะบ่งชี้ว่า 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

หวังว่านี่จะช่วยใครสักคน ... มีกระทู้มากมายในหัวข้อนี้ :(


นี่คือคำตอบที่ใช้งานได้เหมือนมีเสน่ห์ขอบคุณเทย์เลอร์ทำได้ดีมาก
Spikie

3

ใน/project_name/project_name/settings.pyคุณจำเป็นต้องตั้งSTATIC_URLที่จะบอกสิ่งที่เว็บไซต์ของคุณ URL ที่จะใช้สำหรับไฟล์คง

จากนั้นตั้งค่าSTATIC_ROOTเป็นโฟลเดอร์บางโฟลเดอร์ในระบบไฟล์ของคุณที่ไม่เหมือนกับไดเร็กทอรีใด ๆ ของคุณที่อยู่ในSTATICFILES_DIRSรายการ

เมื่อSTATICFILES_ROOTตั้งค่าแล้วคุณจะเรียกใช้python manage.py collectstaticจากไดเรกทอรีโครงการ

การดำเนินการนี้จะคัดลอกไฟล์คงที่ของผู้ดูแลระบบและไฟล์ทั้งหมดในโฟลเดอร์อื่น ๆ ที่อยู่ในSTATICFILES_DIRSรายการ โดยทั่วไปสิ่งนี้จะทำให้ไฟล์คงที่ทั้งหมดของคุณอยู่ในที่เดียวเพื่อให้คุณสามารถย้ายไฟล์เหล่านี้ไปยัง CDN ของคุณเมื่อปรับใช้ไซต์ของคุณ หากคุณเป็นเหมือนฉันและไม่มี CDN คุณมีสองทางเลือก:

  1. เพิ่มโฟลเดอร์ที่คุณตั้งไว้STATIC_ROOTในSTATICFILES_DIRSรายการ สิ่งนี้จะช่วยให้ตัวค้นหา staticfiles ใน django สามารถค้นหาไฟล์คงที่ทั้งหมดได้
  2. ย้ายโฟลเดอร์ทั้งหมดของไฟล์แบบคงที่ไปที่อื่นในระบบไฟล์ของคุณและสั่งSTATICFILES_DIRSให้รวมตำแหน่งใหม่นั้น

ฉันไม่แสดงความคิดเห็นเกี่ยวกับความปลอดภัยด้วยคำตอบนี้มันเป็นเพียงวิธีที่ฉันสามารถพัฒนากับเว็บเซิร์ฟเวอร์สำหรับโครงการขนาดเล็ก ฉันคาดว่าคุณจะต้องการ CDN ตามที่ django แนะนำหากคุณกำลังทำอะไรที่มีขนาดใหญ่กว่านี้

อัปเดต: ฉันเพิ่งพบปัญหานี้และวิธีนี้ไม่ได้ทำในสิ่งที่ฉันคิดว่าคุณต้องการ สิ่งที่ได้ผลสำหรับฉันคือหลังจากที่ฉันรันcollectstaticฉันเพิ่งคัดลอกไฟล์คงที่ของผู้ดูแลระบบที่ใส่ลงSTATICFILES_ROOTในไดเร็กทอรีที่ฉันใช้สำหรับไฟล์คงที่ของฉันเอง นั่นช่วยแก้ปัญหาให้ฉันได้


3

นอกจากคำตอบอื่น ๆ ที่เป็นประโยชน์แล้วฉันยังมีปัญหาที่ยังไม่ได้ระบุ หลังจากอัปเกรดจาก 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/

และตอนนี้ไซต์ผู้ดูแลระบบของฉันทำงานได้อย่างถูกต้อง


2

หากคุณใช้เซิร์ฟเวอร์ Apache เพื่อโฮสต์ไซต์ django ของคุณคุณต้องตรวจสอบให้แน่ใจว่านามแฝงแบบคงที่ชี้ไปที่ / directory to site / site_media / static / ถ้าไฟล์คงที่ของคุณอยู่ใน / directory to site / site / site_media / static / การกำหนดค่านามแฝง Apache ก่อนหน้านี้จะไม่ทำงาน


2

ในขณะที่ติดตามบทช่วยสอน 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


ลองใช้ Django 2.2.1 แล้วไม่ได้ผล ไฟล์. css แบบคงที่ของแผงผู้ดูแลระบบของฉันกำลังให้บริการโดย nginx ด้วยรหัส HTTP 200 แต่ Chrome แจ้งว่ากำลังเข้ามาContent-Type: text/plainและไม่มีการแสดงผลบนหน้านี้
user5359531

2

ปัญหาประเภทเดียวกันที่ฉันพบขณะพัฒนาไซต์ใน 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)

2

ปัญหาของฉันได้รับการแก้ไขโดยการสร้างสภาพแวดล้อมเสมือนใหม่สำหรับโปรเจ็กต์ก่อนหน้านั้นฉันใช้ตัวแปล python ระดับระบบทั่วไป

$ mkvirtualenv myproject

อ้างอิง: https://docs.djangoproject.com/en/2.1/howto/windows/



1

วิ่ง: 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>

จะได้ผลแน่นอน!


ตอบได้ดีมาก. ฉันต้องรันคำสั่ง collectstatic เท่านั้น
PowerAktar

1

ในปัญหานี้อยู่ในเซิร์ฟเวอร์ 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/;
    }
    

1

ใช้งานได้ดีและง่ายดาย ฉันย้าย (ด้วยตนเอง) โฟลเดอร์ เพียงแค่คุณต้องคัดลอกของคุณstatic/adminจากไดเรกทอรีของโครงการหลักและวางลงใน public_html static/หากไม่มีโฟลเดอร์คงที่คุณต้องเรียกใช้คำสั่งต่อไปนี้ในเทอร์มินัล

python manage.py collectstatic

ที่นี่คุณไปกับ css การทำงานของผู้ดูแลระบบ Django


0

หากคุณตั้งค่าไว้ใน settings.py สำหรับ STATICFILES_DIRS และโฟลเดอร์ที่ประกาศไม่มีอยู่หรืออยู่ในตำแหน่งที่ไม่ถูกต้องจะทำให้ผู้ดูแลระบบไม่มีสไตล์เช่นการกำหนด STATICFILES_DIRS = (os.path.join (BASE_DIR, "static" )) และไม่มีโฟลเดอร์แบบคงที่


0

หลังจากลองใช้คำแนะนำกว่า 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 %}" /> 

สิ่งนี้ช่วยแก้ปัญหาให้ฉันได้


0

การกำหนดค่าไฟล์คง ตรวจสอบให้แน่ใจว่าdjango.contrib.staticfilesจะรวมอยู่ในของคุณINSTALLED_APPS

ในไฟล์ settings.py ของคุณกำหนด STATIC_URL ตัวอย่างเช่น:

STATIC_URL = '/static/'

สำหรับรายละเอียดเพิ่มเติม ไฟล์คงที่


0

แผงการดูแลระบบทำงานได้ดียกเว้นไม่ได้โหลด 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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.