gpt4 book ai didi

Django 应用程序无法识别静态文件

转载 作者:行者123 更新时间:2023-12-01 23:51:23 26 4
gpt4 key购买 nike

我有一个 Django 应用程序,我无法在其中加载静态文件。我的模板已完美加载,但无法加载 CSS 和 JS 文件。这是我的文件:

zeinab@ZiZi:~/Desktop/MyProject$ tree
.
├── __init__.py
├── manage.py
├── myapp
│   ├── __init__.py
│   ├── lib
│   │   ├── decorators.py
│   │   ├── dorsa_forms.py
│   │   ├── __init__.py
│   │   └── utils.py
│   ├── log
│   ├── media
│   │   └── admin
│   │   └── background_login
│   │   └── bg1.jpg
│   ├── settings.py
│   ├── static
│   │   ├── calendar.js
│   │   └── inbox.css
│   ├── templates
│   │   ├── 404.html
│   │   ├── base.html
│   │   └── index.html
│   ├── urls.py
│   ├── views.py
│   └── wsgi.py
└── requirements.txt

8 directories, 18 files

当我runserver时,我得到每个CSS和JS文件的"GET/static/file/url HTTP/1.1"404 1265。这是MyProject/manage.py:

#!/usr/bin/env python
import os
import sys
if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myapp.settings")
from django.core.management import execute_from_command_line
execute_from_command_line(sys.argv)

这是MyProject/myapp/settings.py:

import os
from django.contrib.messages import constants as messages

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',
'sorl.thumbnail',
'myapp.lib',
)

MIDDLEWARE_CLASSES = (
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.cache.UpdateCacheMiddleware',
'django.middleware.locale.LocaleMiddleware',
'django.middleware.cache.FetchFromCacheMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
)

SITE_ID = 1

AUTHENTICATION_BACKENDS = (
'django.contrib.auth.backends.ModelBackend',
)

ROOT_URLCONF = 'myapp.urls'

TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, "templates")],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.i18n',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'django.template.context_processors.i18n',
],
},
},
]

WSGI_APPLICATION = 'myapp.wsgi.application'

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

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

LOG_PATH = os.path.join(BASE_DIR, 'log')

DEBUG = True

这是MyProject/myapp/urls.py:

from django.conf import settings
from django.conf.urls import include, url
from django.conf.urls.static import static
from django.contrib import admin
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from .views import default
urlpatterns = [
url(r'^$', default, name='default'),
url(r'^admin/', admin.site.urls),
]
urlpatterns += staticfiles_urlpatterns()
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

这是MyProject/myapp/wsgi.py:

import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myapp.settings")
application = get_wsgi_application()

编辑1:

我已将 MyProject/myapp/urls.py 更改为以下内容:

from django.conf import settings
from django.conf.urls import include, url
from django.views import static
from django.contrib import admin
from .views import default

urlpatterns = [
url(r'^$', default, name='default'),
url(r'^admin/', admin.site.urls),
url(r'^public/(?P<path>.*)$', static.serve, {
'document_root': settings.MEDIA_ROOT
}, name='url_public'),
]

我最终得到了相同的结果。

编辑2:

我还尝试使用 urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) 而不是 urlpatterns += staticfiles_urlpatterns() 然后尝试 收集静态collectstatic 已成功完成,但打开 URL 仍会返回 "GET/static/file/url HTTP/1.1"404 1265

最佳答案

替换

urlpatterns += staticfiles_urlpatterns()

urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

staticfiles_urlpatterns()仅用于调试以获得静态文件的显示 View 。正如https://docs.djangoproject.com/en/1.11/ref/contrib/staticfiles/中提到的它永远不应该在生产中使用

注:STATIC_ROOT & MEDIA_ROOT仅当您收集静态时才使用( collectstaticmanage.py )。它指定存储静态文件和媒体文件的绝对路径(通常是 /var/www/myapp/static/var/www/myapp/media )

关于Django 应用程序无法识别静态文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46520624/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com