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:
tôi có thể làm gì?
cảm ơn
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:
tôi có thể làm gì?
cảm ơn
Câu trả lời:
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.
Sau khi thiết lập STATIC_ROOT
và STATIC_URL
, bạn có thể phải chạy
python manage.py collectstatic
STATIC_ROOT
và STATIC_URL
, ví dụ: Tôi đã kết hợp "staticfiles" và "static" , được sử dụng STATIC_ROOT=os.path.join(BASE_DIR, "staticfiles")"
và 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"
ADMIN_MEDIA_PREFIX
bây giờ không được dùng nữa, hãy sử dụng STATIC_URL
thay 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.
static/admin
bê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/files
như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
.
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',
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. :(
Trong /project_name/project_name/settings.py
bạ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_ROOT
mộ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_DIRS
danh 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_DIRS
danh 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:
STATIC_ROOT
và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.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, collectstatic
tôi chỉ sao chép các tệp tĩnh quản trị viên mà nó đã đưa vào STATICFILES_ROOT
thư 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.
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.
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.
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
Content-Type: text/plain
và chúng không được hiển thị trên trang.
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)
Sự cố của tôi đã được giải quyết bằng cách tạo Môi trường ảo mới cho dự án, trước đó tôi đã sử dụng trình thông dịch python cấp hệ thống chung.
$ mkvirtualenv myproject
Tham khảo: https://docs.djangoproject.com/en/2.1/howto/windows/
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!
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
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.
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/;
}
đ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/admin
từ 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
Đị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
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/admin
thư 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