Python 无法在django 1.8中加载静态文件

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

下面是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',
    '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'),)