2014-09-24 197 views
0

我无法让Django 1.6提供静态文件。无法提供静态文件,Django 1.6

在我的settings.py我:

DEBUG = True 

#... 

INSTALLED_APPS = (
    #... 
    'django.contrib.staticfiles', 
    #... 
) 

STATIC_URL = '/static/' 
STATIC_ROOT = '/home/it/static/' 
STATIC_DIRS = (
    os.path.join(BASE_DIR, '../static'), 
) 
STATIC_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder', 
    'django.contrib.staticfiles.finders.AppDirectoriesFinder', 
) 

我还增加了以下我的urls.py:

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

有问题的HTML文件有以下几点:

{% load staticfiles %} 
#... 
<link rel='stylesheet' type='text/css' href='{% static "css/base.css" %}' /> 

项目树的相关部分如下所示:

/media/extra/django/ 
├── it 
│ ├── it 
│ │ ├── __init__.py 
│ │ ├── settings.py 
│ │ ├── urls.py 
│ │ ├── wsgi.py 
│ ├── jobs 
│ │ ├── admin.py 
│ │ ├── __init__.py 
│ │ ├── models.py 
│ │ ├── static 
│ │ │ └── jobs 
│ │ ├── tests.py 
│ │ ├── urls.py 
│ │ ├── views.py 
│ ├── manage.py 
├── static 
│ ├── css 
│ │ ├── base.css 
│ │ └── colours.css 
│ ├── images 
│ │ └── favicon.ico 
│ └── scripts 
│  └── base.js 
└── templates 
    ├── it 
    │ ├── base.html 
    │ └── index.html 
    ├── jobs 
    │ └── index.html 
    ├── site_base.html 

我曾尝试将静态目录作为'it'目录的同级(并更改STATIC_DIRS变量)。我曾尝试在urlpatterns上使用+ = staticfiles_urlpatterns()。我曾尝试将完整路径添加到STATIC_DIRS。

我也看了这些相关主题: static files in django 1.6 not found Can't get Django to serve static files Django 1.6.2 will not serve static content

非常感谢

+0

设置为'DEBUG',不'Debug'。如果DEBUG不为True,Django将不会提供静态内容。 – 2014-09-24 14:59:43

+0

我没有看到设置中没有STATIC_ROOT,但是你在调用它,在你的urls.py – drabo2005 2014-09-24 15:02:14

+0

@DanielRoseman错字,它是调试文件'DEBUG' – bcvery1 2014-09-24 15:04:04

回答

0

你不应该服务通过Web框架静态内容,这对网络服务器的作业(阿帕奇或nginx为例)

如果你在你的settings.py文件中有STATIC_URL = '/static/',你可以把"{{ STATIC_URL }}css/base.css"放在你的模板中,例如web服务器静态地服务于/static/,完全绕过django。

+1

这仅用于开发:https://docs.djangoproject.com/en/1.6/howto/static -files/ – bcvery1 2014-09-24 15:09:03

+0

@ bcvery1好的 - 我错过了:) – GP89 2014-09-24 15:10:11

0

在你的urls.py试图告诉Django标准视图通过改变 的URL模式

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

With the following: 

urlpatterns = patterns('', 
    #... 
) 
if settings.DEBUG: 
urlpatterns += patterns('', 
    (r'^static/(?P<path>.*)$', 'django.views.static.serve', 
    {'document_root':settings.STATIC_ROOT}),) 


In the settings.py add: 

import os.path 
STATIC_ROOT ='only_the_path_to_the_project' 
STATICFILES_DIRS = (
    os.path.join(os.path.dirname(__file__),'staticcc').replace('\\','/'), 
) 
+0

这几乎就是静态函数所做的那个已经存在的地方 – GP89 2014-09-24 15:20:46

+0

@ drabo2005没有变化 – bcvery1 2014-09-24 15:22:21

+0

可能是BASE_DIRS路径的问题,你的意思是STATICFILES_DIRS是由STATIC_DIRS – drabo2005 2014-09-24 15:30:28

1

我不知道什么是错的您的设置,以满足您的静态文件,但这是设置,为我工作:

settings.py

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

我还没有定义STATIC_ROOT或为static C_FINDERS,所以它使用默认值。我没有什么特别的urls.py静态文件,只有一行媒体:

urls.py

urlpatterns = patterns('', 
    #... 
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 

静态标签正在从模板罚款,所以我相信你行urls.py不是绝对需要的。

0

在发展
在你的应用程序文件夹中创建的文件夹名称“静态”和保存您的图片是文件夹中。
要使用图片使用:

<html> 
    <head> 
     {% load staticfiles %} <!-- Prepare django to load static files --> 
    </head> 
    <body> 
     <img src={% static "image.jpg" %}> 
    </body> 
</html> 

在生产中:
一切都同样喜欢在开发中,只需添加对夫妇更参数Django的:
1.加入settings.py
STATIC_ROOT = os.path.join(BASE_DIR, "static/")(这将准备存储所有应用程序的静态文件的文件夹)
2.确保您的应用程序在INSTALLED_APPS = ['myapp',]
3.在终端运行命令py thon manage.py collectstatic(这将使包含在INSTALLED_APPS中的所有应用程序的静态文件复制到全局静态文件夹--STATIC_ROOT文件夹)

这就是所有Django需要的,在此之后,您需要进行一些Web服务器端设置使用静态文件夹的权限。例如。在apache2的配置文件httpd.conf(对于windows)或sites-enabled/000-default.conf。(下网站虚拟主机部分用于Linux)地址:

Alias \static "path_to_your_project\static" 

<Directory "path_to_your_project\static"> 
    Require all granted 
</Directory> 



而这一切