【发布时间】:2019-03-03 19:31:08
【问题描述】:
通常我有这个问题正好相反!
在我的开发环境中,我的 Django 应用程序不会加载我的一些静态文件,特别是我自己添加的那些:也就是说,我添加到我的应用程序的两个包(admin 和 ckeditor)是两者都加载正常,但是我自己创建和链接的两个文件夹(img 和css)没有找到。这是我的目录的地图:
root
|-- blog (this is the name of my app)
|-- mysite (name of my site)
|-- settings.py
|-- urls.py
|-- media
|-- static
|-- admin
|-- ckeditor
|-- css
|-- img
如前所述,ckeditor 和 admin 可以正常加载,而其他的则不能。以下是调试模式下runserver 输出的示例(static/css/base.css 处的文件存在于我的文件树中):
GET /static/ckeditor/ckeditor/ckeditor.js HTTP/1.1" 200 690627
GET /static/admin/css/fonts.css HTTP/1.1" 200 423
GET /static/admin/css/widgets.css HTTP/1.1" 200 10340
GET /static/css/base.css HTTP/1.1" 404 1761
GET /static/img/brand.png HTTP/1.1" 404 1764
这里有一些其他可能感兴趣的信息:
- 它在生产中运行良好!我认为这是因为我的 apache 配置中有专用别名,但这并不能解释为什么
admin和ckeditor有效。 - 我以几乎相同的方式路由媒体(请参阅下面的设置文件),并且在开发中运行良好。
- 我按照 Django 文档的说明使用模板标签
{% load static %}。在旧版本中,我使用了{% load staticfiles %},我也尝试过。 - 我在两种环境中都运行过
collectstatic。 - 使用
DEBUG=False运行在生产环境中运行良好(所有静态文件加载),但在DEBUG=False开发环境中根本不加载静态文件。这是意料之中的,因为在开发中我没有网络服务器来处理这个问题(澄清一下,我通常在调试模式下运行服务器,但尝试关闭和打开此设置看看发生了什么变化)
为了帮助任何人调试我的问题,以下是一些相关的摘录文件:
settings.py
DEBUG = True
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',
'blog',
'ckeditor',
'ckeditor_uploader',
]
...
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATIC_URL = '/static/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
urls.py
from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
path('', include('blog.urls')),
path('admin/', admin.site.urls),
path('ckeditor', include('ckeditor_uploader.urls')),
]
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
【问题讨论】:
-
你跑
collectstatic了吗? -
@nik_m 是的,在这两种环境中 - 我将把它添加到问题中
-
在您的 urls.py 中,ckeditor 路径没有
/尝试给它看看。 -
ckeditor的静态文件已在两种环境中正常加载。添加/似乎对ckeditor的静态文件或未加载的静态文件都没有影响。 -
好的,然后再给 static_root 和 media_root 一个建议,
STATIC_ROOT = os.path.join(BASE_DIR, 'static/')和MEDIA_ROOT = os.path.join(BASE_DIR, 'media/')试试这个。
标签: python python-3.x django static-files