Django 1.5不会在开发中获取静态文件

时间:2013-10-15 10:41:04

标签: django django-staticfiles

我是Django的新手并且对此非常困惑。

以下是settings.py中的相关部分:

import os
PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__))

STATIC_URL = 'http://http://127.0.0.1:8000/static/'

STATICFILES_DIRS = (
    PROJECT_ROOT+'/static/')

TEMPLATE_DIRS = (
    PROJECT_ROOT + '/templates/')

我的项目文件结构如下:

MyProj
    manage.py
    MyProj
      settings.py
      urls.py  
      templates
         base.html
      static
         css
         js

在base.html中以:

开头
{% load staticfiles %}
{% load i18n %}
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <title>Bootstrap, from Twitter</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta name="description" content="">
    <meta name="author" content="">
    <!-- Le styles -->
    <link rel="shortcut icon" href="http://twitter.github.com/bootstrap/assets/ico/favicon.ico">
    <link href="{{ STATIC_URL }}css/bootstrap.min.css" rel="stylesheet">
    <style type="text/css">
      body {
        padding-top: 60px;
        padding-bottom: 40px;
      }
    </style>
    <link href="{{ STATIC_URL }}css/bootstrap-responsive.min.css" rel="stylesheet">
  </head>

  <body>

但是django没有得到任何静态文件:

[15/Oct/2013 05:36:06] "GET /accounts/login/ HTTP/1.1" 200 3402
[15/Oct/2013 05:36:06] "GET /static/css/bootstrap.min.css HTTP/1.1" 404 2089
[15/Oct/2013 05:36:06] "GET /static/css/bootstrap-responsive.min.css HTTP/1.1" 404 2122
[15/Oct/2013 05:36:06] "GET /static/js/jquery.min.js HTTP/1.1" 404 2074
[15/Oct/2013 05:36:06] "GET /static/js/prettify.js HTTP/1.1" 404 2068
[15/Oct/2013 05:36:06] "GET /static/js/bootstrap.min.js HTTP/1.1" 404 2083
[15/Oct/2013 05:36:06] "GET /static/css/bootstrap.min.css HTTP/1.1" 404 2089
[15/Oct/2013 05:36:06] "GET /accounts/login/ HTTP/1.1" 200 3402
[15/Oct/2013 05:36:06] "GET /static/css/bootstrap-responsive.min.css HTTP/1.1" 404 2122
[15/Oct/2013 05:36:19] "GET /static/css/bootstrap.min.css HTTP/1.1" 404 2089
[15/Oct/2013 05:36:20] "GET /static/css/bootstrap.min.css HTTP/1.1" 404 2089

我读了Django docs并尝试了几种替代设置,但没有一种确实有助于解决问题。非常感谢您的提示。

url.spy

from django.conf.urls import patterns, include, url

# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    # Examples:
    #url(r'^$', 'myproj.views.home', name='home'),
    # url(r'^myproj/', include('myproj.foo.urls')),

    # Uncomment the admin/doc line below to enable admin documentation:
    # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),

    # Uncomment the next line to enable the admin:
    url(r'^admin/', include(admin.site.urls)),
   url (r'^accounts/', include('registration.backends.default.urls')),
)

1 个答案:

答案 0 :(得分:1)

Django中的静态文件似乎总是让刚开始的人感到困惑,而imo,文档可以得到改进。

以下是对内容的快速细分:

MEDIA_ROOT :作为表单或模型表单一部分上传的文件所在的基本目录。 File / ImageField的upload_to属性将附加到此路径。

MEDIA_URL :可通过以下方式访问位于MEDIA_ROOT中的文件的网址格式。

STATIC_ROOT :包含要在生产中提供的静态文件的目录。

STATIC_URL :可通过以下方式访问位于STATIC_ROOT中的文件的网址格式。

STATICFILES_DIRS :包含要在开发中提供的静态文件的导演(y / ies)。

当您在INSTALLED_APPS中拥有staticfiles应用时,它只会在STATICFILES_DIRS时提供位于DEBUG = True的静态文件。

当您运行$ python manage.py collectstatic时,它将为您的应用程序和任何第三方应用程序收集所有静态目录,并将它们复制到STATIC_ROOT

因此,要修复生产中静态文件的路径,请确保您的设置正确,并且在部署之前或作为部署过程的一部分运行collectstatic

还有一个用于静态文件的新模板标记:

{% load i18n %}
{% load static from staticfiles %}
<!DOCTYPE html>
<html lang="en">
  <head>
      ...
      <link href="{% static 'css/bootstrap.min.css' %}"
          rel="stylesheet">
      <link href="{% static 'css/bootstrap-responsive.min.css' %}"
          rel="stylesheet">
  </head>
  <body>
      ...

在项目结构中,将“/ static”重命名为“/ static-assets”,并在STATICFILES_DIRS中设置该目录。

STATIC_ROOT更改为“/ static”,并且不要自己放置任何目录或文件。让collectstatic管理命令执行此操作。

以下是我通常如何构建项目:

/my_app/
    /my_app/
        __init__.py
        settings.py
        urls.py

    manage.py

    /another_app_module/
        __init__.py
        models.py
        ...
    /static/
    /static-assets/
        /css
        /js
        /images
    /templates

鉴于此文件结构,并假设我的项目位于:/home/btaylor/django-projects/my_app/,我的设置将是:

STATIC_ROOT = '/home/btaylor/django-projects/my_app/static'
STATIC_URL = '/static/'
MEDIA_ROOT = '/home/btaylor/django-projects/my_app/static/uploads'
MEDIA_URL = '/static/uploads/'
STATICFILES_DIRS = ('/home/btaylor/django_projects/my_app/static-assets',)