내 장고 관리 사이트에 CSS 스타일이없는 이유


85

Django 개발 버전을 사용하여 Django 관리 사이트를 만듭니다.

그러나 CSS 스타일이 없습니다.

대체 텍스트

어떡해?

감사


2
로드되지 않는 참조 된 스타일이 있습니까?
페카

1
당신은 정적 파일을 제공하기 위해 dev에 서버를 구성해야합니다 docs.djangoproject.com/en/1.2/howto/static-files
아담 반덴버그

1
@Pekka는, 그래, 그것은 D에, 장고 기본 스타일 : \ Python25 \ lib 디렉토리 \ 사이트 - 패키지 \ 장고 \있는 contrib \ 관리자 \ 미디어
zjm1126

1
나는 관리자 정적 콘텐츠가 경쟁적이지 않지만 nginx (개발 환경 대신)와 같은 문제가있었습니다. 기본적으로 nginx 구성 파일을 확인하고 'collectstatic'의 위치인지 확인하십시오. 자세한 내용은 여기 : serverfault.com/questions/403264/…
Will

답변:


14

Django는 자체적으로 정적 파일을 제공하지 않습니다. 파일이 어디에 있는지 알려 주어야합니다.

settings.pyADMIN_MEDIA_PREFIX는 Django를 올바른 위치로 가리 킵니다.

개발 버전을 사용하고 있으므로 정적 파일 방법에 대한 개발 별 문서가 필요합니다 . Adam의 링크는 1.2 버전으로 연결됩니다.


11
좋은 대답이지만 이제는 더 이상 사용되지 않으며 settings.py에 없습니다. 최신 솔루션은 아래를 참조하십시오.
RussellStewart 2013

동일한 오류가 있지만 Flask에서는 내 CSS를 정적 폴더에 넣었습니다. 그리고 jinj2 2 suntax ie {{url_for ( 'static', filename = 'css / style.css')}}를 사용하지만 여전히 내 노트북에는이 오류가 있습니다. 페이지를 강제로 새로 고침했지만 문제가 여전히 존재합니다. 도와주세요
Salman Mushtaq

67

STATIC_ROOT및을 설정 한 후 STATIC_URL다음을 실행해야 할 수 있습니다.

python manage.py collectstatic

1
이것은 1.5.2에서도 작동합니다. 나는 변화하거나 파일이나 코드를 추가하지 않았다
lukik

1
누군가에게 유용 할 수 있습니다 .STATIC_ROOT and STATIC_URL에 대해 동일한 이름 을 사용해야 합니다 . 예 : I 결합 "staticfiles""static" , used 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있지만 collectstatic이 거기에 넣지 않는 것 같습니다. 물론, 수동으로 폴더를 이동하는 것은 템플릿이 static/admin.
toto_tico

Django v1.2로 만든 관리자 인터페이스를 실행하고 1.3에서 테스트 한 다음 v1.4에서 다시 배포하려고 할 때 저를 위해 일했습니다. Ubuntu 12.04 LTE 실행
Adam Lewis

9

Django Book Tutorial에 따라이 문제에 직면했습니다. 5 장 | 모델 설치에서 책은 기본 INSTALLED_APPS를 참조 할 때 "해시 문자 (#)를 앞에 넣어 일시적으로 6 개의 문자열을 모두 주석 처리합니다."라고 말합니다. http://www.djangobook.com/en/2.0/chapter05.html

그런 다음 6 장에서이 책은 독자에게 6 개 행 중 4 개를 주석 해제하도록 지시합니다. "5 장에서이 4 개의 INSTALLED_APPS 항목을 주석 처리했습니다. 지금 주석을 제거하십시오."

그러나 statcifiles 줄은 CSS를 관리 페이지로 복원하는 데 필요한 것이므로 'django.contrib.staticfiles'의 주석 처리를 제거하십시오.


위에서 제안한 것처럼 settings.py 파일에서 'django.contrib.staticfiles'의 주석 처리를 제거하면 저에게도 효과적이었습니다. 'django.contrib.staticfiles'는 기본적으로 INSTALLED_APPS의 settings.py 파일에 있어야합니다. 제안 해 주셔서 감사합니다.
user2471242

Django Book에서도 가져 왔습니다. 한 문자 제거가 수행됩니다.
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.well 감사처럼이 응답 작품입니다
Spikie

3

에서 정적 파일에 사용할 URL을 사이트에 알리 /project_name/project_name/settings.py도록 설정해야 STATIC_URL합니다.

그런 다음 목록에 STATIC_ROOT나열된 디렉토리와 동일하지 않은 파일 시스템의 일부 폴더로 설정하십시오 STATICFILES_DIRS.

STATICFILES_ROOT가 설정 되면 python manage.py collectstatic프로젝트 디렉토리에서 실행 합니다.

그러면 STATICFILES_DIRS목록에 나열된 다른 폴더의 모든 관리자 정적 파일과 모든 파일이 복사 됩니다. 기본적으로 이것은 모든 정적 파일을 한 곳에 배치하므로 사이트를 배포 할 때 CDN으로 이동할 수 있습니다. 나와 같고 CDN이없는 경우 두 가지 옵션이 있습니다.

  1. 당신이로 설정 한 폴더 추가 STATIC_ROOT받는 사람 STATICFILES_DIRS목록을. 이렇게하면 django의 staticfiles 파인더가 모든 정적 파일을 찾을 수 있습니다.
  2. 정적 파일의 전체 폴더를 파일 시스템의 다른 STATICFILES_DIRS위치로 이동하고 새 위치를 포함하도록 지시하십시오 .

나는이 대답으로 보안에 대해 언급하지 않습니다. 작은 프로젝트를 위해 웹 서버로 개발할 수 있었던 방법입니다. 나는 당신이 더 큰 규모의 일을하고 있다면 django가 제안한 것처럼 CDN을 원할 것이라고 기대합니다.

업데이트 : 방금이 문제가 발생 했으며이 방법은 내가 원하는 것을 제대로 수행하지 못했습니다. 결국 나를 위해 일하게 된 것은 내가 실행 한 후 내 정적 파일에 사용했던 디렉토리에 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 /에 대한 / directory를 가리키는 지 확인해야합니다. 정적 파일이 / directory to site / site / site_media / static /에있는 경우 이전 Apache 별칭 구성이 작동하지 않습니다.


2

Django 튜토리얼을 따르는 동안 비슷한 문제가 있었고 제 경우 문제는 css 파일을 제공 할 때 개발 서버에서 사용하는 MIME 유형이었습니다.

제공된 mimetype은 'application / x-css'로 Chrome에서 다음 경고 메시지를 표시했습니다 (개발자 도구의 '네트워크'탭에 있음).

리소스가 스타일 시트로 해석되지만 MIME 유형 application / x-css로 전송 됨 : " http://127.0.0.1:8000/static/admin/css/base.css "

내가 찾은 해결 방법 : django webapp의 manage.py 파일에 다음 줄을 추가하여 제공 할 mimetype 변경 :

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

참고 : Python 2.7 및 Chrome 40.0에서 Django 1.7.4로 저를 위해 일했습니다.


Django 2.2.1에서 이것을 시도했지만 작동하지 않습니다. 내 관리자 패널 정적 .css 파일은 HTTP 코드 200을 사용하여 nginx에서 제공되지만 Chrome은 파일이로 들어오고 Content-Type: text/plain페이지에 렌더링되지 않는다고 말합니다.
user5359531

2

django-1.10.5 및 python-2.7.13에서 사이트를 개발하는 동안 발생한 동일한 종류의 문제입니다. 그러나 내 firefox-51과 크롬에서 로그인 페이지는 CSS를 얻을 수 있었지만 여전히 스타일링이 없었습니다. 하지만 이상하게도 IE-8에서 작동하고있었습니다 ..

나는 여기에 언급 된 가능한 모든 것을 시도했고 내 sw 버전에 적합했다. 작동하지 않았습니다.

하지만 python-2.7.8이있는 다른 시스템에서 동일한 사이트를 시도했을 때 작동했습니다 ..

누군가에게 도움이 될 수 있다면 방금 게시했습니다 ...

편집 : 나중에 python-2.7.13에서 settings.py에 다음 두 줄을 작성하고 브라우저의 캐시를 지우면 트릭을 수행했음을 발견했습니다.

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


1

settings.py 'django.contrib.staticfiles'에 있는지 확인하십시오.INSTALLED_APPS


1

운영: python manage.py collectstatic

/etc/apache2/sites-available/000-default.conf에있는 Vhost에이 행을 추가하십시오.

별칭 / static / admin / /var/www/html/example.com/static/admin

다음은 장고 설정을위한 전체 Vhost 설정입니다.

<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

0

STATICFILES_DIRS에 대한 settings.py에 설정된 값이 있고 선언 된 폴더가 존재하지 않거나 잘못된 위치에있는 경우 관리자가 스타일을 지정하지 않게됩니다 (예 : 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

여기 Django 관리자의 CSS 작업으로 이동합니다.


0

정적 파일 구성 INSTALLED_APPS에django.contrib.staticfiles 포함되어 있는지 확인하십시오 .

settings.py 파일에서 STATIC_URL을 정의합니다. 예를 들면 다음과 같습니다.

STATIC_URL = '/static/'

자세한 내용은 정적 파일

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.