我是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')),
)
答案 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',)