Python 无法在django 1.8中加载静态文件
下面是settings.py的相关配置:Python 无法在django 1.8中加载静态文件,python,django,django-staticfiles,Python,Django,Django Staticfiles,下面是settings.py的相关配置: import os 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', 'd
import os
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',
'marcador'
)
STATIC_URL = '/static/'
#STATICFILES_DIR = (
# os.path.join(BASE_DIR, 'static'),
#)
STATIC_ROOT = (os.path.join(BASE_DIR, 'static'))
在projecturl.py中
from django.conf.urls import include, url
from django.contrib import admin
from django.core.urlresolvers import reverse_lazy
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'^', include('marcador.urls')),
url(r'^login/$', 'django.contrib.auth.views.login',
{'template_name': 'login.html'}, name='mysite_login'),
url(r'^logout/$', 'django.contrib.auth.views.logout',
{'next_page': reverse_lazy('marcador_bookmark_list')},
name='mysite_logout'),
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
在marcador应用程序url.py中
urlpatterns = [
url(r'^user/(?P<username>[-\w]+)/$', 'marcador.views.bookmark_user',
name='marcador_bookmark_user'),
url(r'^$', 'marcador.views.bookmark_list', name='marcador_bookmark_list'),
]
这里是变量的打印输出
Python 2.7.6 (default, Jun 22 2015, 17:58:13)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import settings
>>> print settings.BASE_DIR
/home/fabrice/Documents/Programing/django/marca
>>> print settings.PROJ_DIR
/home/fabrice/Documents/Programing/django/marca/marca
>>> print settings.STATIC_URL
/static/
>>> print settings.STATICFILES_DIR
('/home/fabrice/Documents/Programing/django/marca/marca/static',)
>>> print settings.STATIC_ROOT
/home/fabrice/Documents/Programing/django/marca/static
>>>
内容页面显示正确,但由于服务器返回404错误,bootstap未加载
[20/Sep/2015 16:09:53] "GET / HTTP/1.1" 200 4822
[20/Sep/2015 16:09:54] "GET /static/css/bootstrap.min.css HTTP/1.1" 404 1676
[20/Sep/2015 16:09:54] "GET /static/css/bootstrap-theme.min.css HTTP/1.1" 404 1694
[20/Sep/2015 16:09:54] "GET /static/js/vendor/modernizr-2.8.3-respond-1.4.2.min.js HTTP/1.1" 404 1751
[20/Sep/2015 16:09:54] "GET /static/css/main.css HTTP/1.1" 404 1649
[20/Sep/2015 16:09:54] "GET /static/js/vendor/bootstrap.min.js HTTP/1.1" 404 1691
[20/Sep/2015 16:09:54] "GET /static/js/main.js HTTP/1.1" 404 1643
[20/Sep/2015 16:09:54] "GET /static/js/vendor/bootstrap.min.js HTTP/1.1" 404 1691
[20/Sep/2015 16:09:54] "GET /static/js/main.js HTTP/1.1" 404 1643
我已经读了几篇关于同一问题的文章,但当我打印BASE_DIR变量时,仍然无法使它工作。我可以看到路径是正确的
我能让它正常工作的唯一方法是在中复制引导静态文件
/usr/local/lib/python2.7/dist-packages/django/contrib/admin/static/css/
我就是不明白,已经花了不少时间
有什么建议吗
有关信息,我正在学习本教程您的
STATICFILES\u DIR
包含错误的值。您可以使用os.path.join(BASE_DIR,'/static')
引用:
如果某个组件是绝对路径,则会抛出以前的所有组件
“远离”和“连接”从绝对路径组件继续
请查看以下代码示例:
>>> os.path.join('/a', 'b', '/c', 'd')
'/c/d'
解决方案:删除
'/static'
中的前导斜杠:os.path.join(BASE_DIR,/static')
您应该看看Django文档。有一个关于管理静态文件的特定页面:
在开发过程中,您的项目URL.py应为:
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'^', include('marcador.urls')),
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
但在生产中,一种常见的做法是使用http服务器来处理静态文件。生产配置的答案是广泛的,因为它将取决于您的堆栈。让我们看看。。。
创建新项目marca时,会得到一个子文件夹marca,其中包含settings.py、wsgi.py等。通常,我会在此处为我的非特定应用程序静态文件创建一个静态文件夹。然后,我可以有一个settings.py PROJ_DIR来定位
PROJ_DIR = os.path.dirname(os.path.abspath(__file__))
现在,除了BASE_DIR之外,还有一个PROJ_DIR指向我的子文件夹marca。现在转到更多设置
STATIC_URL = '/static/' #pretty much ok
STATICFILES_DIR = (
os.path.join(PROJ_DIR, 'static'), #additional location of static files
)
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATIC_ROOT中的文件将通过STATIC_URL(/STATIC/在您的例子中)提供,通常由一个单独的静态文件服务器(如nginx)提供。它最初应该是空的。要将文件放入静态根目录,请运行
python manage.py collectstatic
它将查看应用程序静态文件夹和STATICFILES\u DIR中的所有路径,并创建一个准备好提供服务的目录结构
在模板base.html中,您需要添加
{% load staticfiles %}
如果你不这样做,我想你会出错的。
基本上,我向你们提出这个新结构
manage.py
+-- static (your STATIC_ROOT is currently pointing here. empty initially but check after running collectstatic
+-- marca
settings.py
wsgi.py
urls.py
+-- static
| +-- css
| +-- img
| +-- gis
| +-- js
+-- templates
+-- marcador
| +-- migrations
| +-- templates
| +-- marcador
我知道现在回答这个问题已经太迟了,但我发现如果我使用下面这样的STATICFILES\u DIRS并注释STATIC\u ROOT,它就可以正常工作
STATICFILES_DIRS = (os.path.join(BASE_DIR, 'static'),)
抱歉,Matthia,因为我的文件中有一个输入错误,我尝试了很多方法,但忘记删除“/”设置您的STATIC\u ROOT为os.path.join(BASE\u DIR,'STATIC'),可能会删除设置STATICFILES\u DIR仍然相同,没有引导,我一定是做错了什么。您是否尝试将静态文件夹移动到marcador应用程序文件夹?按要求完成,但问题仍然相同,请注意collectstatic的输出“0个静态文件复制到“/home/fabrice/Documents/Programing/django/marca/static”,62未修改。”仅当我在/usr/local/lib/python2.7/dist-packages/django/contrib/admin/static/it中复制文件时,它才能按预期工作您有Debug=False吗?您可能希望在使用开发服务器时将其设置为True。0已复制,因为您已在其中包含这些文件,您可以删除这些文件并再次运行collectstatic。debug设置为true,我已删除这些文件并再次运行collectstatic,但仍然没有成功。此外,collecstatic还在文件夹static中创建了一个文件夹admin。我仍然不知道是什么错,我改变了静态根,它不是一个元组。我必须已经做了复制和粘贴从您的原始代码。这可能就是您遇到的问题。好吧,对STATIC_ROOT的更改实际上没有多大影响。admin是静态文件夹中唯一的文件夹吗?如果是这种情况,它在STATICFILES_DIR中找不到其他文件,即os.path.join(PROJ_DIR,'static'),其中应该有引导文件和其他非特定于应用程序的静态文件。
manage.py
+-- static (your STATIC_ROOT is currently pointing here. empty initially but check after running collectstatic
+-- marca
settings.py
wsgi.py
urls.py
+-- static
| +-- css
| +-- img
| +-- gis
| +-- js
+-- templates
+-- marcador
| +-- migrations
| +-- templates
| +-- marcador
STATICFILES_DIRS = (os.path.join(BASE_DIR, 'static'),)