Django 정적 파일 404


79

내 정적 파일을 가져올 수 없습니다. 다양한 설정과 디렉토리 구성 등을 시도했지만 404로 나타납니다. debug_toolbar가 설치되어 있으므로 STATIC_URL이 내 요청 컨텍스트에 도달하고 있음을 알 수 있습니다.

/ static을 표시하는 디렉토리 구조 (또한 시도해보기 위해 식사 앱 폴더 및 사용자 내부에 디렉토리를 배치했습니다.

/mealmate
    /mealmate
    /meals
    /static
        /css
             /bootstrap.min.css
    /templates
    /users

Settings.py (다른 다양한 설정을 실험했지만 몇 가지 중요한 설정) :

MEDIA_ROOT = os.path.join(PROJECT_PATH, 'media/')

STATIC_URL = '/static/'

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
)

WSGI_APPLICATION = 'mealmate.wsgi.application'

base.html에서 렌더링

    <link rel="stylesheet" href="/static/css/bootstrap.min.css">

어떤 아이디어? 감사


7
정적 폴더를 수동으로 생성 한 경우 왜 collectstatic을 실행해야합니까? 어쨌든 해냈지만 여전히 작동하지 않았습니다. 장고는 설정에도 불구하고 내 정적 폴더를 인식하지 못합니다.
KindOfGuy 2010

40
시도 : python manage.py findstatic --verbosity 2 css/styles.css장고 정적 파일을 찾고 위치를 확인할 수 있습니다.
deed02392

4
@ deed02392 이것이 오랜 시간이라는 것을 알고 있지만 감사합니다. 왜 내 것이 작동하지 않는지 알 수 없었습니다. STATIC_URL내 설정에서 아무리 변경하려고 해도 작동하지 않습니다. 그런 다음 명령 도움말 날 위치를 찾을 수 있음을, 나는 그것이 비록 변경하지 왜 모르겠어요
아몬

1
이 @Amon 도움 다행, 그것은 나를 너무 무슨 일이 있었는지 알아내는 데 도움이 열쇠 명령했다
deed02392

답변:


126

이것은 Windows 용 django에서 정적 / 미디어 / 템플릿 액세스를위한 작업 솔루션입니다.

settings.py

import os.path

STATIC_ROOT = ''

STATIC_URL = '/static/'

STATICFILES_DIRS = ( os.path.join('static'), )

4
고마워요! 추가 정보를 보려면 blog.xjtian.com/post/52685286308/… 이 블로그, django에서 정적으로 서비스하는 방법에 대한 매우 실용적인 설명을 따르십시오 .
대부

10
os.path.join('static')간단한 제공'static'
투입 Sławomir Lenart

이것은 나에게도 도움이되었습니다. 제 경우에 문제를보다 구체적으로 식별하기 위해 join () 문자열에 "/"가 있습니다.
Matthew Weber

STATIC_ROOT사양은 필요하지 않습니다. 그리고 @ SławomirLenart가 지적했듯이를 제거 join하고 문자열을 사용할 수 있습니다.
cirrusio

3
@cirrusio STATIC_ROOT는 실제로 저에게 필요한 것입니다. 튜토리얼을 따랐지만로드 할 정적 파일을 가져올 수 없습니다. 간단히 STATIC_ROOT = ''줄을 추가하고 작동하기 시작했습니다. 다른 변경은 필요하지 않았습니다.
Jeffrey Harmon

49

나를 위해 이것은 디버그를 settings.py. 해결 방법은 --insecure스위치를 로 전달하는 runserver것이지만 실제 솔루션은 적절한 웹 서버를 사용하여 정적 파일을 제공하는 것입니다. 자세한 내용은 이 질문에 대한 답변 을 참조하십시오.


2
친구. 몇 시간의 노력 끝에 문제가 해결되었습니다. 감사합니다
М.Б.

고마워요 ++ 미쳐 버렸습니다.
NiKo

이! 많은 감사 ... 내 정적 파일을 디버깅 거의 미쳐서
jpdus

yyyuuup. 프로덕션 서버에서 작동했지만 내 개발자 중 한 명이 Windows의 로컬 runserver에서 문제가 발생했습니다. 디버그를 로컬에서 활성화해야합니다. :-) 감사합니다! :-)
CeDeROM

21

웹 서버에서 실행중인 경우 정적 파일을 공용 액세스 가능 폴더에 복사하고 있습니까? 예를 들면 :

# web accessible folder
STATIC_ROOT = '/home/your_name/www/mealmate/static/'

# URL prefix for static files.
STATIC_URL = '/static/'

# Additional locations of static files
STATICFILES_DIRS = (
    # location of your application, should not be public web accessible 
    '/home/your_name/website/mealmate/static',
)

# List of finder classes that know how to find static files in
# various locations.
STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)

그런 다음이 게시물 Django 정적 파일을 사용하고 manage.py를 사용하여 정적 파일을 공용 액세스 가능 폴더에 복사 할 수 있습니다.

# --link    Create a symbolic link to each file instead of copying.
# --noinput Do NOT prompt the user for input of any kind.
#
python manage.py collectstatic -link --noinput

도움이 되었기를 바랍니다.


URI가 의도적으로 다른가요? ( wwwwebsite)?
Rikki

@Rikki 예, 정적 파일 디렉토리를 추가 할 수 있음을 보여줍니다. Django는 해당 디렉토리의 모든 파일을 번들로 묶어STATIC_ROOT
eodgooch

8

위의 의견에서-이것을 실행하십시오

python manage.py findstatic --verbosity 2 css/styles.css

'css / styles.css'에 일치하는 파일이 없습니다.

다음 위치에서 확인 :
/ Users / yourname / Documents / Workspace / test / staticfiles

정적 폴더의 이름 을 staticfiles 로 변경 했습니다. 모든 것이 잘되었습니다. (저는 osx + django 1.x에 있습니다)

비보안 모드를 사용하면 로컬 개발 상자에있는 경우 손상되지 않을 수 있습니다. 그렇지 않으면 여전히 404 오류가 발생할 수 있습니다.

python manage.py runserver --insecure

최신 정보

실제로 settings.py를 파헤쳐 서 침해 라인을 발견했습니다.

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'staticfiles'),
)

7

나는 단순히

STATICFILES_DIRS = (
    '/absolute_path_to_project/mealmate/static',
)

이 작업을 수행합니다. 물론 absolute_path_to_project실제 경로로 바꾸고 필요한 경우 드라이브 문자를 추가하십시오.


7

최근에 설정 파일에서 디버그를 false로 변경 한 경우. 이 절차를 따르십시오.

대부분의 경우 settings.py에서 디버그 설정이 false로 설정되어 발생합니다. --insecure 스위치를 runserver에 전달하면 작동합니다. 따라서 대신 python manage.py runserver 0.0.0.0:8000변경하면 python manage.py runserver 0.0.0.0:8000 --insecure.

작동합니다.


2
문서를 읽음으로써 django가 dev 모드를 켜고 정적을 제공한다고 생각합니다. 반면에 dev 모드를 끄려면 django가 정적을 제공하는 것이 비효율적이므로 nginx를 실제로 사용해야합니다. 위의 플래그는 귀하가 그 사실을 인정한다는 것을 의미합니다.
아담

6

Apache가 정적 디렉토리에 대한 요청을 차단했다는 사실을 깨달을 때까지 404 문제에 갇혀있었습니다. 내가 사용 python manage.py collectstatic받는 모든 정적 파일을 복사하는 정적의 내 프로젝트 루트, 즉 아래에 디렉토리를 / var에 / 내 / 사이트 / 정적 . 와

Alias /static /var/my/site/static
<Directory /var/my/site/static>
        Require all granted
</Directory>

에서 /etc/httpd/conf/httpd.conf 파일 , 지금은 제대로 작동합니다.

위의 답변 중 어느 것도 작동하지 않으면 서버 구성을 확인하는 것이 좋습니다.


1
docs.djangoproject.com/en/1.11/howto/deployment/wsgi/modwsgi/…Alias /static/ /var/my/site/static 에있는 그대로 별칭을 설정 하고 첫 번째 호출을 변경 /static하여 문제를 해결했습니다. 감사!
andrewec



2

여기서 Django1.3 +를 사용하고 있다고 가정합니다.

먼저 몇 가지 설정을 더 정의해야합니다.

STATICFILES_FINDERS = [
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
]

STATICFILES_DIRS = [
    path.join(TOP_DIR, 'static'),
]

STATIC_ROOT = path.join(TOP_DIR, 'staticfiles')
STATIC_URL = '/static/'

그러면 해당 디렉토리를 찾는 데 도움이됩니다.

또한 항상 다음을 사용하여 정적 파일에 액세스해야합니다 STATIC URL.

<link rel="stylesheet" href="{{ STATIC_URL }}css/bootstrap.min.css">

1
안녕하세요, 저는 {{STATIC_URL}}을 사용하고 있습니다. 약간 불분명했습니다. 제가 보여준 html은 태그가 작동하고 있음을 보여주기 위해 렌더링 된 파일이었습니다. 로컬로 작업 중이므로 / static 디렉토리가있는 한 STATIC_URL 설정 만 필요하다고 생각했습니다.
KindOfGuy 2012

2

Django에서는 템플릿에 대한 또 다른 이점이 있으며 이와 같은 정적을 연결할 수 있으며 이것이 문제 일 수 있습니다!

<script src="{% static 'myapp/bootstrap.min.js' %}"></script>
<link href="{% static 'myapp/bootstrap.css' %}" rel="stylesheet" type="text/css"/>

사용하는 것이 더 좋습니다

{% 정적 '파일 이름'%}

또한 더 많이 알기 쉽습니다. https://docs.djangoproject.com/en/1.11/intro/tutorial06/참조하십시오.



1

제 경우에는 정적 파일이 resources/static디렉토리에 있고 settings.py파일에 불어와 같은 설정을 설정했습니다 .

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, './resources/static/'),
)

내 템플릿에서 다음과 같이 사용합니다.

% load static %}
    <link rel="stylesheet" type="text/css" href="{% static '/plugins/bootstrap/css/bootstrap.css' %}">

이 방법은 나를 위해 일했습니다.


0

settings.py 파일에 INSTALLED_APPS 앱을 넣는 것을 놓친 것 같습니다. "mealmate"를 추가해야합니다.

INSTALLED_APPS = (
    'mealmate',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
)

그 후 정적 및 명령 파일이 django에 표시됩니다. 명령에 문제가 있었는데 이것이 제가 수정 한 방법입니다.


0

Cpanel에서 이것은 여기에 좋은 해결책입니다 .

cpanel의 터미널에 dj-static static3 설치

pip install dj-static static3

그런 다음 wsgi.py 에서이 코드 py 응용 프로그램을 바꿉니다.

from dj_static import Cling

application = Cling(get_wsgi_application())

0

나는 같은 문제에 직면했다. 여기 템플릿에서 정적 파일에 액세스하는 방법을 해결합니다.

내 Django 프로젝트 (Recognition /) 파일 디렉토리는 다음과 같습니다.

/media
   /1
     i1.jpg
     i2.jpg
     ....

/static
    /css
       /op.css
    /img
       /emoji.png

/Recognition
    ...
    /settings.py
    /urls.py
    ...

/uploader
    ...
    /urls.py
    /templates
         /uploader
             /create.html
    ...

내 settings.py는 다음과 같습니다.

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'Recognition',
    'uploader',
]

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

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')

내 (Recognition / urls.py)는 다음과 같습니다.

urlpatterns = [
    path('admin/', admin.site.urls),
    ...
]
if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

그런 다음 템플릿 (create.html)의 모든 정적 파일과 미디어 파일에 다음과 같이 액세스합니다. 여기 샘플 코드가 있습니다.

<!DOCTYPE html>
<html>
<head>
   {% block extrahead %}
      <link rel="stylesheet" type="text/css" href="static/css/op.css">
   {% endblock %}
</head>

<style type="text/css">
.notfound .notfound-404 {
  ...
  background-image: url('static/img/emoji.png');
  ...
}
<style>

<body>
  <img src="{{ MEDIA_ROOT }}/media/i1.jpg" class="image_responsive" height="100px" width="100px">
</body>

또는

이 django 명령을 사용하여 django가 정적 파일을 보는 위치를 확인할 수 있습니다. 출처

python manage.py collectstatic --help

0

나를 위해 아무것도하지 않고 manage.py runserver myip : port를 실행합니다. 그런 다음 종료하고 uwsgi를 다시 시작하면 정적 파일이 성공적으로로드됩니다. 이유는 모르겠지만 저에게 효과적입니다 ...

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