IT TIP

Django-정적 파일을 찾을 수 없습니다.

itqueen 2020. 12. 3. 21:31
반응형

Django-정적 파일을 찾을 수 없습니다.


이 문제에 대한 여러 게시물을 보았지만 내 해결책을 찾지 못했습니다.

Django 1.3 개발 환경에서 정적 파일을 제공하려고합니다.

내 설정은 다음과 같습니다.

...
STATIC_ROOT = '/home/glide/Documents/django/cbox/static/'
STATIC_URL = '/static/'
STATICFILES_DIRS = (
  '/static/',
)
...

내 urls.py

urlpatterns = patterns('',
...
  url(r'^static/(?P<path>.*)$', 'django.views.static.serve',
    {'document_root', settings.STATIC_ROOT}
  ),
...
);

/ home / glide / Documents / django / cbox / static / 디렉토리는 다음과 같습니다.

css
  main.css
javascript
image

http://127.0.0.1:8000/static/css/main.css 에 액세스하려고 할 때 404 오류가 발생 합니다.

CSS, 자바 스크립트 및 이미지에 대한 패턴을 개별적으로 지정해야합니까?


STATIC_ROOTSTATICFILES_DIRS를 혼동 했습니다.

사실 저는 STATIC_ROOT 의 유용성을 이해하지 못했습니다 . 공통 파일을 넣어야하는 디렉토리라고 생각했습니다. 이 디렉토리는 프로덕션에 사용되며 collectstatic에 의해 정적 파일이 저장 (수집)되는 디렉토리입니다 .

STATICFILES_DIRS 가 필요한 것입니다.

내가 개발 환경에있어 때문에, 나를 위해 솔루션을 사용하지 않는 것입니다 STATIC_ROOT을 (또는 다른 경로를 지정) 및 내 공용 파일 디렉토리를 설정 STATICFILES_DIRS :

#STATIC_ROOT = (os.path.join(SITE_ROOT, 'static_files/'))
import os
SITE_ROOT = os.path.dirname(os.path.realpath(__file__))
STATICFILES_DIRS = (
  os.path.join(SITE_ROOT, 'static/'),
)

또한 잊지 마세요 from django.conf import settings


여러 가지 방법으로 정적 파일을 제공 할 수 있습니다. 여기에 내 메모가 있습니다.

  • static/my_app/디렉토리를 추가 my_app하십시오 (아래 네임 스페이스에 대한 참고 참조).
  • 새 최상위 디렉토리를 정의하고 settings.py의 STATICFILES_DIRS에 추가합니다 ( The STATICFILES_DIRS setting should not contain the STATIC_ROOT setting).

나는 첫 번째 방법과 문서에 정의 된 방법에 가까운 설정을 선호 하므로 파일 admin-custom.css제공하여 몇 가지 관리자 스타일을 재정의 하기 위해 다음 과 같은 설정이 있습니다.

.
├── my_app/
│   ├── static/
│   │   └── my_app/
│   │       └── admin-custom.css
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── static/
├── templates/
│   └── admin/
│       └── base.html
└── manage.py
# settings.py
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATIC_URL = '/static/'

그런 다음 다음과 같이 템플릿에서 사용됩니다.

# /templates/admin/base.html
{% extends "admin/base.html" %}
{% load static %}

{% block extrahead %}
    <link rel="stylesheet" href="{% static "my_app/admin-custom.css" %}">
{% endblock %}

개발 중에 django.contrib.staticfiles [ed : 기본적으로 설치됨]을 사용하면 DEBUG가 True [...]로 설정되면 runserver에 의해 자동으로 수행됩니다.

https://docs.djangoproject.com/en/1.10/howto/static-files/

배포 할 때 collectstaticnginx로 정적 파일을 실행 하고 제공합니다.


나를 위해 모든 혼란을 해결 한 문서 :

STATIC_ROOT

collectstatic이 배치를 위해 정적 파일을 수집하는 디렉토리의 절대 경로입니다.

...it is not a place to store your static files permanently. You should do that in directories that will be found by staticfiles’s finders, which by default, are 'static/' app sub-directories and any directories you include in STATICFILES_DIRS).

https://docs.djangoproject.com/en/1.10/ref/settings/#static-root


Static file namespacing

Now we might be able to get away with putting our static files directly in my_app/static/ (rather than creating another my_app subdirectory), but it would actually be a bad idea. Django will use the first static file it finds whose name matches, and if you had a static file with the same name in a different application, Django would be unable to distinguish between them. We need to be able to point Django at the right one, and the easiest way to ensure this is by namespacing them. That is, by putting those static files inside another directory named for the application itself.

https://docs.djangoproject.com/en/1.10/howto/static-files/


STATICFILES_DIRS

Your project will probably also have static assets that aren’t tied to a particular app. In addition to using a static/ directory inside your apps, you can define a list of directories (STATICFILES_DIRS) in your settings file where Django will also look for static files.

https://docs.djangoproject.com/en/1.10/howto/static-files/


There could be only two things in settings.py file those makes your static files serve.

1) STATIC_URL = '/static/'

2)

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, "static"),
)

and your static files should lie under static directory which is in same directory as project's settings file.

Even then if your static files are not loading then reason is , you might have kept

DEBUG = False

change it to True (strictly for development only). In production just change STATICFILES_DIRS to whatever path where static files resides.


Another error can be not having your app listed in the INSTALLED_APPS listing like:

INSTALLED_APPS = [
    # ...
    'your_app',
]

Without having it in, you can face problems like not detecting your static files, basically all the files involving your app. Even though it can be correct as suggested in the correct answer by using:

STATICFILES_DIRS = (adding/path/of/your/app)

Can be one of the errors and should be reviewed if getting this error.


If your static URL is correct but still:

Not found: /static/css/main.css

Perhaps your WSGI problem.

➡ Config WSGI serves both development env and production env

==========================project/project/wsgi.py==========================

import os
from django.conf import settings
from django.contrib.staticfiles.handlers import StaticFilesHandler
from django.core.wsgi import get_wsgi_application

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings')
if settings.DEBUG:
    application = StaticFilesHandler(get_wsgi_application())
else:
    application = get_wsgi_application()

{'document_root', settings.STATIC_ROOT} needs to be {'document_root': settings.STATIC_ROOT}

or you'll get an error like dictionary update sequence element #0 has length 6; 2 is required


I found that I moved my DEBUG setting in my local settings to be overwritten by a default False value. Essentially look to make sure the DEBUG setting is actually false if you are developing with DEBUG and runserver.

참고URL : https://stackoverflow.com/questions/6014663/django-static-file-not-found

반응형