почему на моем админке django нет стиля css


87

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

Но у него нет стиля CSS:

альтернативный текст

А что я могу сделать?

благодаря


2
Есть ли ссылка на стиль, который не загружается?
Пекка

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

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 укажет Джанго в нужном месте.

Поскольку вы используете версию для разработки, вам понадобится специальный документ для разработчиков с инструкциями по статическим файлам . Ссылка Адама приведет вас к версии 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

1
Может быть, полезно для кого-то: вы должны использовать одноSTATIC_ROOT и то же имя для и STATIC_URL, например: я объединил «staticfiles» и «static» , использовал STATIC_ROOT=os.path.join(BASE_DIR, "staticfiles")"и STATIC_URL="/static/". Мое приложение работало нормально, но файлы администратора найти не удалось. так что измените его как на «staticfiles», так и на «static»
elano7 02 апр.2020

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
Адам Льюис,

9

Я столкнулся с этой проблемой, следуя руководству по Django Book. В главе 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 03

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


2

Следуя руководству по Django, у меня была аналогичная проблема, и в моем случае проблема заключалась в типе mimetype, используемом сервером разработки при обслуживании файлов css.

Обслуживаемый mimetype был application / x-css, что привело к появлению следующего предупреждающего сообщения в Chrome (на вкладке «Сеть» инструментов разработчика):

Ресурс интерпретируется как таблица стилей, но передается с использованием типа MIME application / 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 ..

Я пробовал делать все возможное, упомянутое здесь и подходящее для моего набора версий ПО. Ни один не работал.

Но когда я попробовал тот же сайт в другой системе с 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>

Это точно сработает!


Очень хороший ответ. Мне нужно было только запустить команду 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

Я потерпел неудачу после того, как попробовал тысячи предложений, и наконец нашел решение, которое помогло. Вот что я пробовал и что использовал. Я использую веб-сервер django-1.11 и nginx. Во-первых, я убедился, что мои файлы CSS / js не получают 404 в консоли браузера. После этого я мог видеть предупреждение

Ресурс интерпретируется как таблица стилей, но передается с типом MIME text / plain

Я нашел 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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.