чому мій сайт адміністратора django не має стилю css


85

Я роблю сайт адміністратора Django, використовуючи версію для розробки Django

Але він не має стилю CSS:

текст заміщення

що я можу зробити?

Дякую


2
Чи є посилання на стиль, який не завантажується?
Пекка

1
Вам потрібно налаштувати сервер розробників для обслуговування статичних файлів: docs.djangoproject.com/en/1.2/howto/static-files
Адам Ванденберг

1
@Pekka, так, це стиль django за замовчуванням, він знаходиться в D: \ Python25 \ Lib \ site-пакети \ django \ contrib \ admin \ media
zjm1126

1
У мене була та ж проблема, що статичний вміст адміністратора не підлягає перегляду, але з nginx (замість середовища розробки). По суті, перевірте конфігураційний файл nginx і переконайтеся, що в ньому знаходиться ваш 'collestatic'. Деталі тут: serverfault.com/questions/403264/…
Will

Відповіді:


14

Django не обслуговує статичні файли самостійно. Ви повинні сказати, де знаходяться файли.

ADMIN_MEDIA_PREFIX в settings.py вкаже Джанго в потрібному місці.

Оскільки ви використовуєте версію для розробки, вам знадобиться документ із розробниками для статичних файлів, як це робити . Посилання Адама приведе вас до версії 1.2.


11
Хороша відповідь, але зараз застаріла та відсутня в settings.py. Про більш сучасні рішення читайте нижче.
RussellStewart

У мене така ж помилка, але в Flask я помістив свій css всередину статичної папки. І використовуйте jinj2 2 suntax, тобто {{url_for ('static', filename = 'css / style.css')}}, але все-таки на моєму ноутбуці ця помилка. Я змусив оновити сторінку, але проблема все ще існує. Будь ласка, допоможіть
Салман Муштак

67

Після налаштування вашого STATIC_ROOTі STATIC_URL, можливо, вам доведеться запустити

python manage.py collectstatic

1
Це також працює на 1.5.2. Мені не довелося змінювати або додавати будь-який файл чи код
lukik 02

1
Можливо, корисно для когось: ви повинні використовувати ту саму назву для STATIC_ROOTі STATIC_URL, наприклад: Я поєднав "staticfiles" і "static" , використовували 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але collestatic не розміщує їх там. Звичайно, переміщення папки вручну просто не працює, оскільки шаблони продовжують вказувати static/admin.
toto_tico

Працював у мене при спробі запустити інтерфейс адміністратора, створений за допомогою Django v1.2, протестований на версії 1.3, а потім розгорнутий на версії 1.4. Запуск Ubuntu 12.04 LTE
Адам Льюїс,

9

Я також натрапив на це питання, слідуючи навчальному посібнику з книги Django. У розділі 5 | Встановлення моделі книга згадує, посилаючись на типовий INSTALLED_APPS- "Тимчасово прокоментуйте всі шість цих рядків, поставивши перед ними хеш-символ (#)." http://www.djangobook.com/en/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. Дякую Крісу за вашу пропозицію.
user2471242

Потрапив сюди і з книги Джанго. Це односимвольне видалення робить це.
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

Сподіваюся, це комусь допомагає ... на цю тему є багато тем. :(


це відповідь працює як обереги спасибі taylor. молодець
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списку. Це дозволить шукачам статичних файлів у 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, вам потрібно переконатися, що статичний псевдонім вказує на ваш / каталог до site / site_media / static /. Якщо ваші статичні файли знаходяться в / каталог на сайт / сайт / сайт_медіа / статичний /, попередня конфігурація псевдоніма Apache не буде працювати.


2

Дотримуючись підручника з Django, у мене була подібна проблема, і в моєму випадку проблема полягала в mimeype, який використовував сервер розробки при обслуговуванні файлів css.

Обслуговуваний тип mimet був "application / x-css", що призвело до появи наступного попереджувального повідомлення в Chrome (на вкладці "Мережа" інструментів розробника):

Ресурс інтерпретується як Таблиця стилів, але передається із застосуванням типу MIME / x-css: " http://127.0.0.1:8000/static/admin/css/base.css "

Обхідний шлях, який я знайшов: зміна типу mime, який буде обслуговуватися, додавши наступні рядки до файлу manage.py веб-програми django:

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

Переконайтеся, що 'django.contrib.staticfiles'це є у вашому INSTALLED_APPSна вашому settings.py


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>

Це точно спрацює!


Дуже хороша відповідь. Мені потрібно було лише запустити команду collestatic.
PowerAktar

0

Якщо у вас є значення, встановлене в settings.py для STATICFILES_DIRS, а оголошена папка не існує або в неправильному розташуванні, це призведе до того, що адміністратор не матиме стилю, наприклад, визначивши STATICFILES_DIRS = (os.path.join (BASE_DIR, "static" )), а статична папка не існує


0

Не вдавшись, спробувавши тисячі пропозицій, я нарешті знайшов рішення, яке допомогло. Ось те, що я пробував і що використовував. Я використовую веб-сервер 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

Якщо випуск знаходиться на сервері 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
    
  • налаштування в / etc / nginx / sites-enabled / example (Nginx) для обслуговування статичних файлів

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

0

це працює добре і легко. Я перемістив (вручну) папку. просто вам потрібно скопіювати свій файл static/adminз каталогу основного проекту та вставити його у public_html, static/ якщо немає статичної папки, вам доведеться запустити наступну команду в терміналі

python manage.py collectstatic

ось вам і робота з css адміністратора Django


0

Налаштування статичних файлів Переконайтеся, що django.contrib.staticfilesвін включений у ваш INSTALLED_APPS .

У вашому файлі settings.py визначте STATIC_URL, наприклад:

STATIC_URL = '/static/'

для отримання додаткової інформації про статичні файли

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.