tại sao trang web quản trị django của tôi không có phong cách css


85

Tôi tạo trang web quản trị Django bằng phiên bản phát triển Django

Nhưng nó không có kiểu CSS:

văn bản thay thế

tôi có thể làm gì?

cảm ơn


2
Có kiểu được tham chiếu nào không được tải không?
Pekka

1
Bạn cần phải cấu hình máy chủ dev để phục vụ các tập tin tĩnh: docs.djangoproject.com/en/1.2/howto/static-files
Adam Vandenberg

1
@Pekka, vâng, đó là kiểu mặc định của django, nó có trong D: \ Python25 \ Lib \ site-package \ django \ Contrib \ admin \ media
zjm1126 12/12/10

1
Tôi đã gặp vấn đề tương tự là nội dung tĩnh của quản trị viên không thể tồn tại được, nhưng với nginx (thay vì môi trường phát triển). Về cơ bản, hãy kiểm tra tệp cấu hình nginx của bạn và đảm bảo rằng đó là vị trí của 'bộ sưu tập' của bạn. Thông tin chi tiết tại đây: serverfault.com/questions/403264/…
Sẽ

Câu trả lời:


14

Django không tự phục vụ các tệp tĩnh. Bạn phải cho nó biết các tập tin đang ở đâu.

Các ADMIN_MEDIA_PREFIX trong settings.py sẽ chỉ Django ở vị trí bên phải.

Vì bạn đang sử dụng phiên bản phát triển, bạn sẽ muốn có tài liệu dành riêng cho nhà phát triển cho các tệp tĩnh . Liên kết của Adam sẽ dẫn bạn đến phiên bản 1.2.


11
Câu trả lời hay nhưng hiện không được dùng nữa và không có trong settings.py. Đọc bên dưới để biết thêm các giải pháp cập nhật.
RussellStewart

Tôi gặp lỗi tương tự nhưng trong Flask, tôi đặt css của mình bên trong thư mục tĩnh. Và sử dụng jinj2 2 suntax tức là {{url_for ('static', filename = 'css / style.css')}}, nhưng trên máy tính xách tay của tôi vẫn bị lỗi này. Tôi đã buộc làm mới trang nhưng vấn đề vẫn tồn tại. Xin vui lòng giúp đỡ
Salman Mushtaq

67

Sau khi thiết lập STATIC_ROOTSTATIC_URL, bạn có thể phải chạy

python manage.py collectstatic

1
Điều này cũng hoạt động trên 1.5.2. Tôi không phải thay đổi hoặc thêm bất kỳ tệp hoặc mã nào
lukik

1
Có thể hữu ích cho ai đó: bạn nên sử dụng cùng một tên cho STATIC_ROOTSTATIC_URL, ví dụ: Tôi đã kết hợp "staticfiles""static" , được sử dụng STATIC_ROOT=os.path.join(BASE_DIR, "staticfiles")"STATIC_URL="/static/". Ứng dụng của tôi hoạt động tốt nhưng không thể tìm thấy tệp quản trị viên. vì vậy hãy thay đổi cả hai thành "staticfiles" hoặc "static"
elano7

17

ADMIN_MEDIA_PREFIXbây giờ không được dùng nữa, hãy sử dụng STATIC_URLthay thế. Cài đặt STATIC_URL = '/static/'trong settings.py sẽ thực hiện công việc. Thử:

import os.path  import sys

PROJECT_ROOT = os.path.normpath(os.path.dirname(__file__))

và sau đó:

STATIC_ROOT = os.path.join(PROJECT_ROOT, 'static')
STATIC_URL = '/static/'

Hoạt động trên Django 1.4 pre-alpha SVN-16920.


1
Điều này cũng không hiệu quả với tôi. Tôi nhận thấy rằng nếu tôi di chuyển (thủ công) thư mục static/adminbên trong static/css/thì tôi có thể truy cập các tệp css. Vì vậy, có vẻ như tôi có thể truy cập các tệp css chỉ khi chúng ở bên trong static/filesnhưng bộ sưu tập không đặt chúng ở đó. Tất nhiên, việc di chuyển thư mục theo cách thủ công sẽ không hoạt động vì các mẫu tiếp tục trỏ đến static/admin.
toto_tico

Đã làm việc cho tôi khi cố gắng chạy giao diện quản trị được tạo bằng Django v1.2, được thử nghiệm trên 1.3 và sau đó được triển khai lại trên v1.4. Chạy Ubuntu 12.04 LTE
Adam Lewis

9

Tôi gặp phải vấn đề này cũng như làm theo Hướng dẫn Sách Django. Trong Chương 5 | Cài đặt mô hình, cuốn sách tuyên bố khi đề cập đến INSTALLED_APPS mặc định- "Tạm thời nhận xét tất cả sáu chuỗi đó bằng cách đặt một ký tự băm (#) trước chúng." http://www.djangobook.com/en/2.0/chapter05.html

Sau đó, trong Chương 6, Sách yêu cầu người đọc bỏ ghi chú 4 trong số 6 dòng đó - "lưu ý rằng chúng tôi đã nhận xét bốn mục INSTALLED_APPS này trong Chương 5. Bây giờ hãy bỏ ghi chú chúng."

Nhưng dòng statcifiles là thứ cần thiết để khôi phục CSS về trang quản trị, vì vậy hãy bỏ ghi chú rằng 'django.contrib.staticfiles',


Việc bỏ chú thích 'django.contrib.staticfiles' trong tệp settings.py như được đề xuất ở trên cũng hiệu quả với tôi. 'django.contrib.staticfiles' phải hiển thị theo mặc định trong tệp settings.py của bạn trong INSTALLED_APPS. Cảm ơn Chris cho đề xuất của bạn.
dùng2471242

Cũng có ở đây từ Sách Django. Loại bỏ một ký tự đó thực hiện điều đó.
pbarill

8

Tôi đã đọc một số chủ đề khác đang cố gắng khắc phục điều này ... sử dụng bí danh như trong các chủ đề khác. Điều này giả định rằng ứng dụng tùy chỉnh của riêng bạn đang phân phối chính xác các tệp tĩnh, điều này sẽ cho thấy rằng STATIC_ROOT và STATIC_URL của bạn có cài đặt phù hợp.

STATIC_ROOT = ''
STATIC_URL = '/static/'

Sau đó (từ thư mục tĩnh của bạn):

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

Hy vọng điều này sẽ giúp ai đó ... có rất nhiều chủ đề về chủ đề này. :(


đây là công trình câu trả lời như quyến rũ cảm ơn bạn taylor.well thực hiện
Spikie

3

Trong /project_name/project_name/settings.pybạn cần thiết lập STATIC_URLđể cho trang web của bạn biết url nào sẽ sử dụng cho các tệp tĩnh.

Sau đó, đặt thành STATIC_ROOTmột thư mục nào đó trên hệ thống tệp của bạn không giống với bất kỳ thư mục nào được liệt kê trong STATICFILES_DIRSdanh sách.

Sau khi STATICFILES_ROOTđược thiết lập, bạn sẽ chạypython manage.py collectstatic từ thư mục dự án.

Thao tác này sẽ sao chép tất cả các tệp tĩnh của quản trị viên và tất cả các tệp trong bất kỳ thư mục nào khác được liệt kê trong STATICFILES_DIRSdanh sách. Về cơ bản, điều này đặt tất cả các tệp tĩnh của bạn ở một nơi để bạn có thể di chuyển chúng sang CDN khi triển khai trang web của mình. Nếu bạn giống tôi và không có CDN, thì bạn có hai lựa chọn:

  1. Thêm thư mục mà bạn đặt làm STATIC_ROOTvàoSTATICFILES_DIRS danh sách. Điều này sẽ cho phép các công cụ tìm tệp tĩnh trong django định vị tất cả các tệp tĩnh.
  2. Di chuyển toàn bộ thư mục chứa các tệp tĩnh đến một nơi khác trên hệ thống tệp của bạn và chuyển trực tiếp STATICFILES_DIRSđến vị trí mới đó.

Tôi không đưa ra nhận xét nào về bảo mật với câu trả lời này, đó chỉ là cách tôi có thể phát triển với máy chủ web của mình cho các dự án nhỏ. Tôi hy vọng rằng bạn sẽ muốn có một CDN như django đề xuất nếu bạn đang làm bất cứ điều gì ở quy mô lớn hơn.

CẬP NHẬT: Tôi vừa gặp sự cố này và phương pháp này không hoàn toàn làm được những gì tôi nghĩ bạn muốn. Những gì kết thúc với tôi là sau khi chạy, collectstatictôi chỉ sao chép các tệp tĩnh quản trị viên mà nó đã đưa vào STATICFILES_ROOTthư mục mà tôi đã sử dụng cho các tệp tĩnh của riêng mình. Điều đó đã giải quyết vấn đề cho tôi.


3

Ngoài nhiều câu trả lời hữu ích khác, tôi có một vấn đề chưa được lưu ý. Sau khi nâng cấp từ Django 1.3 lên 1.6, thư mục tệp tĩnh của tôi đã bị hỏng liên kết tượng trưng đến tệp tĩnh quản trị viên django.

Settings.py của tôi đã được định cấu hình với:

STATICFILES_DIRS = (
    '/var/www/static/my-dev',
)

Theo câu trả lời này ,

Django giờ sẽ tìm thấy các tệp tĩnh quản trị viên theo URL / admin /.

Tôi đã có một liên kết tượng trưng /var/www/static/my-dev/adminđược đặt thành:

admin -> /usr/local/lib/python2.7/dist-packages/django/contrib/admin/media/

Vị trí đó không còn tồn tại trong django 1.6, vì vậy tôi đã cập nhật liên kết thành:

admin -> /usr/local/lib/python2.7/dist-packages/django/contrib/admin/static/admin/

Và bây giờ trang quản trị của tôi đang hoạt động bình thường.


2

Nếu bạn đang sử dụng máy chủ Apache để lưu trữ trang web django của mình, bạn cần đảm bảo bí danh tĩnh trỏ đến thư mục / của bạn tới site / site_media / static /. Nếu các tệp tĩnh của bạn nằm trong / thư mục tới site / site / site_media / static /, thì cấu hình bí danh Apache trước đó sẽ không hoạt động.


2

Trong khi làm theo hướng dẫn Django, tôi đã gặp sự cố tương tự và trong trường hợp của tôi, sự cố là kiểu mimety được máy chủ phát triển sử dụng khi cung cấp tệp css.

Loại mimetype được phân phát là 'application / x-css' dẫn đến thông báo cảnh báo sau trong Chrome (trong tab 'Mạng' của Công cụ dành cho nhà phát triển):

Tài nguyên được hiểu là Biểu định kiểu nhưng được chuyển với ứng dụng kiểu MIME / x-css: " http://127.0.0.1:8000/static/admin/css/base.css "

Cách giải quyết mà tôi đã tìm thấy: thay đổi kiểu mimetype sẽ được phân phát bằng cách thêm các dòng sau vào tệp management.py của django webapp:

import mimetypes
mimetypes.init()
mimetypes.types_map['.css'] = 'text/css'

Lưu ý: đã làm việc cho tôi với Django 1.7.4 trên Python 2.7 và Chrome 40.0


đã thử điều này với Django 2.2.1 và nó không hoạt động. Các tệp .css tĩnh trong bảng điều khiển quản trị của tôi đang được cung cấp bởi nginx với mã HTTP 200, nhưng Chrome cho biết chúng đang đến Content-Type: text/plainvà chúng không được hiển thị trên trang.
user5359531

2

Cùng một loại vấn đề mà tôi gặp phải khi phát triển trang web trong django-1.10.5 và python-2.7.13. Nhưng trong firefox-51 và chrome của tôi, trang đăng nhập đã có thể lấy css nhưng vẫn không có kiểu dáng. Nhưng kỳ lạ là nó đang hoạt động trên IE-8..

Tôi đã cố gắng làm mọi điều có thể được đề cập ở đây và phù hợp với tập hợp các phiên bản sw của tôi. Không có tác dụng nào.

Nhưng khi tôi thử cùng một trang web trên hệ thống khác có python-2.7.8, nó đã hoạt động ..

Chỉ đăng nếu nó có thể giúp ai đó ...

đã chỉnh sửa: sau đó, tôi thấy rằng trong python-2.7.13, viết hai dòng sau trong settings.py (cộng với xóa bộ nhớ cache của trình duyệt) đã thực hiện thủ thuật

import mimetypes
mimetypes.add_type("text/css", ".css", True)


1

Đảm bảo rằng điều đó 'django.contrib.staticfiles'có trong của bạn INSTALLED_APPStrong settings.py


1

chạy: python manage.py collectstatic

Thêm dòng này vào Vhost có tại: /etc/apache2/sites-available/000-default.conf

Bí danh / static / admin / /var/www/html/example.com/static/admin

Đây là toàn bộ cài đặt Vhost để thiết lập 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>

Điều này chắc chắn sẽ hoạt động!


Câu trả lời rất hay. Tôi chỉ phải chạy lệnh thu thập.
PowerAktar

0

Nếu bạn có một giá trị được đặt trong settings.py cho STATICFILES_DIRS và thư mục được khai báo không tồn tại hoặc ở vị trí sai, điều đó sẽ khiến Quản trị viên không có kiểu dáng, ví dụ bằng cách xác định STATICFILES_DIRS = (os.path.join (BASE_DIR, "static" )) và thư mục tĩnh không tồn tại


0

Thất bại sau khi thử hàng nghìn đề xuất, cuối cùng tôi đã tìm ra giải pháp hữu ích. Đây là những gì tôi đã thử và những gì tôi đang sử dụng. Tôi đang sử dụng máy chủ web django-1.11 và nginx. Đầu tiên, tôi đảm bảo rằng các tệp CSS / js của tôi không nhận được 404 trong bảng điều khiển của trình duyệt. Sau đó, tôi có thể thấy một cảnh báo

Tài nguyên được hiểu là Biểu định kiểu nhưng được chuyển với kiểu kịch câm văn bản / thuần túy

Tôi đã tìm thấy base.html trong các mẫu quản trị và đã xóa

type="text/css"

và bây giờ các dòng trông như thế này:

<link rel="stylesheet"  href="{% block stylesheet %}{% static "admin/css/base.css" %}{% endblock %}" /> 

Điều này đã khắc phục sự cố cho tôi.


0

Vấn đề là trong máy chủ dev / test / prod và sử dụng Nginx, vui lòng làm theo các bước dưới đây.

  • đặt cấu hình trong settings.py như một cái gì đó bên dưới

    STATIC_URL = '/static/'
    
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    STATIC_ROOT = os.path.join(BASE_DIR, 'static')
    
  • Chạy lệnh dưới đây để tạo tệp css và js trong thư mục tĩnh

    $ python manage.py collectstatic
    
  • cấu hình trong / etc / nginx / sites-enable / example (Nginx) để cung cấp các tệp tĩnh

    location /static/ {
            alias /project/root/folder/static/;
    }
    

0

điều này hoạt động tốt và dễ dàng. Tôi đã di chuyển (thủ công) thư mục. chỉ cần bạn sao chép của bạn static/admintừ thư mục của Dự án chính và dán nó vào public_html static/ nếu không có thư mục tĩnh, bạn phải chạy lệnh sau trong terminal

python manage.py collectstatic

đây là cách bạn làm việc với css của quản trị viên Django


0

Định cấu hình tệp tĩnh Đảm bảo rằng tệp đó django.contrib.staticfilesđược bao gồm trong INSTALLED_APPS của bạn .

Trong tệp settings.py của bạn, hãy xác định STATIC_URL, ví dụ:

STATIC_URL = '/static/'

để biết thêm chi tiết các tệp tĩnh


0

Bảng điều khiển quản trị đã hoạt động tốt ngoại trừ css không được tải. Điều này đã làm việc cho Lightsail Django với Apache

1. Xác định STATIC_ROOT và STATIC_URL trong settings.py

STATIC_ROOT = '/opt/bitnami/projects/decisions/decision/'
STATIC_URL = '/static/'

2.Đưa (sao chép) các tệp tài sản quản trị vào dự án

chạy python manage.py collectstatic lệnh này tạo /opt/bitnami/projects/decisions/decision/adminthư mục với các css/ fonts/ img/ js/thư mục con

3.Làm cho / url tĩnh có thể truy cập được từ apache

Dán đoạn mã này vào /opt/bitnami/apache2/conf/bitnami/bitnami.conf(Nếu bạn đã thiết lập ssl thì vị trí tệp sẽ là /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. Đừng quên khởi động lại apache

sudo /opt/bitnami/ctlscript.sh restart apache
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.