por que meu site de administração django não tem o estilo css

87

Eu faço um site de administração do Django usando Django versão de desenvolvimento do Django

Mas não tem um estilo CSS:

texto alternativo

o que eu posso fazer?

obrigado

zjm1126
fonte
2
Existe um estilo referenciado que não é carregado?
Pekka
1
Você precisa configurar o servidor de desenvolvimento para servir arquivos estáticos: docs.djangoproject.com/en/1.2/howto/static-files
Adam Vandenberg
1
@Pekka, sim, é o estilo padrão do django, está em D: \ Python25 \ Lib \ site-packages \ django \ contrib \ admin \ media
zjm1126
1
Eu tive o mesmo problema de conteúdo estático do administrador não ser visível, mas com o nginx (ao invés do ambiente de desenvolvimento). Basicamente, verifique seu arquivo de configuração nginx e certifique-se de que é a localização de seu 'collectstatic'. Detalhes aqui: serverfault.com/questions/403264/…
Será

Respostas:

14

Django não serve arquivos estáticos por conta própria. Você tem que dizer onde estão os arquivos.

O ADMIN_MEDIA_PREFIX no settings.py apontará o Django para o local correto.

Já que você está usando a versão de desenvolvimento, você vai querer o documento específico do dev para instruções de arquivos estáticos . O link de Adam o levará à versão 1.2.

Evan Porter
fonte
11
Boa resposta, mas agora obsoleto e ausente em settings.py. Leia abaixo para soluções mais atualizadas.
RussellStewart
Tenho o mesmo erro mas no Flask, coloco meu css dentro de uma pasta estática. E use jinj2 2 suntax ie {{url_for ('static', filename = 'css / style.css')}}, mas ainda no meu laptop eu tenho este erro. Forcei a atualização da página, mas o problema ainda existe. Por favor, ajude
Salman Mushtaq
67

Depois de configurar seu STATIC_ROOTe STATIC_URL, você pode ter que executar

python manage.py collectstatic
David Mann
fonte
1
Isso também funciona no 1.5.2. Não
precisei
1
Pode ser útil para alguém: você deve usar o mesmo nome para STATIC_ROOTe STATIC_URL, exemplo: eu combinei "staticfiles" e "static" , usei STATIC_ROOT=os.path.join(BASE_DIR, "staticfiles")"e STATIC_URL="/static/". Meu aplicativo funcionou bem, mas os arquivos admin não foram encontrados. então mude para "staticfiles" ou "static"
elano7
17

ADMIN_MEDIA_PREFIXestá obsoleto agora, use em seu STATIC_URLlugar. Definir STATIC_URL = '/static/'em settings.py deve fazer o trabalho. Experimentar:

import os.path  import sys

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

e depois:

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

Funciona no Django 1.4 pré-alfa SVN-16920.

Shamar
fonte
1
Isso não funciona para mim também. Percebo que, se mover (manualmente) a pasta static/admindentro static/css/, posso acessar os arquivos css. Parece que posso acessar os arquivos css apenas se estiverem dentro do, static/filesmas o collectstatic não os coloca lá. Claro, mover a pasta manualmente simplesmente não funciona porque os modelos continuam apontando para static/admin.
toto_tico
Funcionou para mim ao tentar executar a interface de administração criada com Django v1.2, testada em 1.3, e então reimplantada em v1.4. Executando Ubuntu 12.04 LTE
Adam Lewis
9

Também encontrei esse problema seguindo o tutorial do livro Django. No Capítulo 5 | Instalando o modelo, o livro afirma ao referir-se ao INSTALLED_APPS padrão- "Comente temporariamente todas as seis strings colocando um caractere hash (#) na frente delas." http://www.djangobook.com/en/2.0/chapter05.html

Então, no Capítulo 6, o Livro diz ao leitor para descomentar 4 dessas 6 linhas - "note que comentamos essas quatro entradas INSTALLED_APPS no Capítulo 5. Remova-os de comentários agora."

Mas a linha statcifiles é o que é necessário para restaurar o CSS para a página de administração, então descomente que 'django.contrib.staticfiles',

Chris SH
fonte
Descomentar 'django.contrib.staticfiles' no arquivo settings.py como sugerido acima funcionou para mim também. 'django.contrib.staticfiles' deve estar presente por padrão em seu arquivo settings.py em INSTALLED_APPS. Obrigado Chris por sua sugestão.
user2471242
Também cheguei aqui do Django Book. Essa remoção de um caractere faz isso.
pbarill
8

Eu li vários outros tópicos tentando corrigir isso ... recorri a um alias como em outros tópicos. Isso pressupõe que seu próprio aplicativo personalizado está exibindo arquivos estáticos corretamente, o que indicaria que seu STATIC_ROOT e STATIC_URL têm configurações adequadas.

STATIC_ROOT = ''
STATIC_URL = '/static/'

Então (a partir do seu diretório estático):

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

Espero que isso ajude alguém ... há muitos tópicos neste tópico. :(

Taylor
fonte
esta é a resposta funciona como encantos obrigado taylor.bem feito
Spikie
3

Em /project_name/project_name/settings.pyvocê precisa definir STATIC_URLpara informar ao seu site qual url usar para arquivos estáticos.

Em seguida, defina STATIC_ROOTcomo alguma pasta em seu sistema de arquivos que não seja igual a nenhum dos seus diretórios listados na STATICFILES_DIRSlista.

Depois de STATICFILES_ROOTdefinido, você executaria a python manage.py collectstaticpartir do diretório do projeto.

Isso copiará todos os arquivos estáticos do administrador e todos os arquivos em quaisquer outras pastas listadas na STATICFILES_DIRSlista. Basicamente, isso coloca todos os seus arquivos estáticos em um só lugar para que você possa movê-los para o seu CDN ao implantar o seu site. Se você é como eu e não tem um CDN, você tem duas opções:

  1. Adicione a pasta que você definiu como STATIC_ROOTà STATICFILES_DIRSlista. Isso permitirá que os localizadores de arquivos estáticos no django localizem todos os arquivos estáticos.
  2. Mova toda a pasta de arquivos estáticos para outro lugar em seu sistema de arquivos e direcione STATICFILES_DIRSpara incluir esse novo local.

Não faço comentários sobre segurança com esta resposta, é apenas a maneira que pude desenvolver com meu servidor web para pequenos projetos. Espero que você queira um CDN como o django sugere se estiver fazendo algo em escala maior.

ATUALIZAÇÃO: Acabei de encontrar esse problema e esse método não fez exatamente o que eu acho que você deseja. O que acabou funcionando para mim foi, depois de executar collectstatic, apenas copiar os arquivos estáticos do administrador que ele colocou no STATICFILES_ROOTdiretório que usei para meus próprios arquivos estáticos. Isso resolveu o problema para mim.

Brad P.
fonte
3

Além de muitas das outras respostas serem úteis, tive um problema que ainda não foi observado. Depois de atualizar do Django 1.3 para 1.6, meu diretório de arquivos estáticos tinha um link simbólico quebrado para os arquivos estáticos do administrador django.

Meu settings.py foi configurado com:

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

De acordo com esta resposta ,

O Django agora espera encontrar os arquivos estáticos do admin na URL / admin /.

Eu tinha um link simbólico /var/www/static/my-dev/adminque foi definido como:

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

Esse local não existe mais no Django 1.6, então atualizei o link para:

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

E agora meu site de administração está funcionando corretamente.

cod3monk3y
fonte
2

Se você estiver usando o servidor Apache para hospedar seu site django, você precisa ter certeza de que o alias estático aponta para seu diretório / para site / site_media / static /. Se seus arquivos estáticos estiverem em / diretório para site / site / site_media / static /, a configuração anterior do alias do Apache não funcionará.

Yulun
fonte
2

Enquanto seguia o tutorial do Django, tive um problema semelhante e, no meu caso, o problema era o tipo MIME usado pelo servidor de desenvolvimento ao servir arquivos css.

O tipo MIME veiculado foi 'application / x-css' que levou à seguinte mensagem de aviso no Chrome (na guia 'Rede' das ferramentas do desenvolvedor):

Recurso interpretado como folha de estilo, mas transferido com aplicativo do tipo MIME / x-css: " http://127.0.0.1:8000/static/admin/css/base.css "

A solução alternativa que encontrei: alterar o tipo MIME a ser servido adicionando as seguintes linhas ao arquivo manage.py do django webapp:

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

Nota: funcionou para mim com Django 1.7.4 no Python 2.7 e Chrome 40.0

Gio
fonte
tentei isso com Django 2.2.1 e não funcionou. Meus arquivos .css estáticos do painel de administração estão sendo servidos pelo nginx com o código HTTP 200, mas o Chrome diz que eles estão chegando como Content-Type: text/plaine não estão sendo renderizados na página.
user5359531
2

O mesmo tipo de problema que encontrei ao desenvolver um site em django-1.10.5 e python-2.7.13. Mas no meu firefox-51 e no Chrome, a página de login foi capaz de obter o css, mas ainda não havia estilo. Mas, estranhamente, estava funcionando no IE-8.

Tentei fazer todas as coisas possíveis mencionadas aqui e adequadas ao meu conjunto de versões sw. Nenhum funcionou.

Mas quando tentei o mesmo site em outro sistema que tinha o python-2.7.8, funcionou ..

Acabei de postar se pode ajudar alguém ...

editado: mais tarde descobri que em python-2.7.13, escrever as duas linhas a seguir em settings.py (além de limpar o cache do navegador) tinha resolvido o problema

import mimetypes
mimetypes.add_type("text/css", ".css", True)
Nikhil Saxena
fonte
1

Certifique-se de que 'django.contrib.staticfiles'está INSTALLED_APPSem seu settings.py

RedRory
fonte
1

corre: python manage.py collectstatic

Adicione esta linha ao Vhost, localizado em: /etc/apache2/sites-available/000-default.conf

Alias ​​/ static / admin / /var/www/html/example.com/static/admin

Aqui está toda a configuração do Vhost para a configuração do 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>

Isso vai funcionar com certeza!

Kundan Roy
fonte
Muito boa resposta. Eu só tive que executar o comando collectstatic.
PowerAktar
1

Se o problema estiver em um servidor dev / test / prod e usando Nginx, siga as etapas abaixo.

  • defina as configurações em settings.py como algo abaixo

    STATIC_URL = '/static/'
    
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    STATIC_ROOT = os.path.join(BASE_DIR, 'static')
    
  • Execute o comando abaixo para criar arquivos css e js na pasta estática

    $ python manage.py collectstatic
    
  • config em / etc / nginx / sites-enabled / example (Nginx) para servir arquivos estáticos

    location /static/ {
            alias /project/root/folder/static/;
    }
    
Super Nova
fonte
1

isso funciona bem e facilmente. Mudei (manualmente) a pasta. apenas você tem que copiar seu static/admindo diretório do projeto principal e colá-lo em public_html static/ se não houver uma pasta estática você deve executar o seguinte comando no terminal

python manage.py collectstatic

aqui vai com o css funcionando do Django admin

Jahanzeb Nawaz
fonte
0

Se você tiver um valor definido em settings.py para STATICFILES_DIRS e a pasta declarada não existir ou estiver em um local errado, isso fará com que o Admin não tenha nenhum estilo, por exemplo, definindo STATICFILES_DIRS = (os.path.join (BASE_DIR, "estático" )) e a pasta estática não existe

cormacio100
fonte
0

Falhando depois de tentar milhares de sugestões, finalmente encontrei uma solução que ajudou. Aqui está o que experimentei e o que estava usando. Estou usando o servidor web django-1.11 e nginx. Em primeiro lugar, certifiquei-me de que meus arquivos CSS / js não estavam obtendo 404 no console do navegador. Depois disso, pude ver um aviso

Recurso interpretado como folha de estilo, mas transferido com tipo mime text / plain

Encontrei o base.html nos modelos de administração e removi

type="text/css"

e agora as linhas se parecem com isto:

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

Isso resolveu o problema para mim.

Rahul Singal
fonte
0

Configurando arquivos estáticos Certifique-se de que django.contrib.staticfilesestá incluído em seu INSTALLED_APPS .

Em seu arquivo settings.py, defina STATIC_URL, por exemplo:

STATIC_URL = '/static/'

para mais detalhes de arquivos estáticos

MoShamroukh
fonte
0

O painel do administrador estava funcionando bem, exceto que o css não foi carregado. Isso funcionou para Lightsail Django com Apache

1. Defina STATIC_ROOT e STATIC_URL em settings.py

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

2. Ejetar (copiar) arquivos de ativos de administração para o projeto

executar python manage.py collectstatic este comando cria uma /opt/bitnami/projects/decisions/decision/adminpasta com css/ fonts/ img/ js/subpastas

3. Faça / url estático acessível a partir do Apache

Cole este snippet em /opt/bitnami/apache2/conf/bitnami/bitnami.conf(se você configurou SSL, o local do arquivo será /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. Não se esqueça de reiniciar o apache

sudo /opt/bitnami/ctlscript.sh restart apache
Nika Tsogiaidze
fonte