无法提供静态文件,Django 1.6

时间:2014-09-24 14:50:28

标签: python django static

我无法让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

我已经尝试将静态目录作为&#39;它的兄弟。目录(并更改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

非常感谢

4 个答案:

答案 0 :(得分:1)

我不确定您的设置有什么问题,但这是适用于我的设置:

<强> settings.py

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

我还没有定义STATIC_ROOT或STATIC_FINDERS所以它使用默认值。 urls.py中没有任何特殊的静态文件,只有一行用于媒体:

<强> urls.py

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

静态标记在模板中工作正常,因此我认为urls.py中的行不是绝对必需的。

答案 1 :(得分:0)

您不应该通过Web框架提供静态内容,这是Web服务器的工作(例如apache或nginx)

如果您的settings.py文件中有STATIC_URL = '/static/',则可以在模板中添加"{{ STATIC_URL }}css/base.css",并让网络服务器静态服务/static/,完全绕过django。

答案 2 :(得分:0)

在你的urls.py中尝试通过更改告诉django标准视图来提供静态文件     urlpatterns

 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('\\','/'),
  )

答案 3 :(得分:0)

正在开发中
在你的app文件夹中创建文件夹名称&#39; static&#39;并将图片保存在该文件夹中。
使用图片:

<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。在terminall运行命令 python 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>

所有