我正在研究William S. Vincent的Django for Beginners书中的教程。我在本书的“博客应用”部分,并且一直遵循他对这封信的指示。但是,无论如何,我似乎都无法让开发服务器来服务我的静态CSS文件。
My source code can be found here.
我正在使用manage.py runserver
运行开发演示服务器以进行本地测试。
这是我的目录树:
./
├── blog
│ ├── admin.py
│ ├── apps.py
│ ├── __init__.py
│ ├── migrations
│ │ ├── 0001_initial.py
│ │ └── __init__.py
│ ├── models.py
│ ├── tests.py
│ ├── urls.py
│ └── views.py
├── blog_project
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
├── db.sqlite3
├── manage.py
├── Pipfile
├── Pipfile.lock
├── static
│ └── css
│ └── base.css
└── templates
├── base.html
└── home.html
最初,我用以下这一行更新了blog_project/settings.py
:
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]
然后将{% load static %}
放在templates/base.html
文件的顶部,并在<link href="{% static 'css/base.css' %}" rel="stylesheet">
部分中添加<head> ... </head>
。
在写入static/css/base.css
文件之后,这应该可以工作。但事实并非如此。我研究了论坛和Stack Overflow,并看到有人建议将静态目录添加到blog_project/settings.py
文件中,因此我更新了该文件,并在底部添加了以下内容:
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.1/howto/static-files/
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATICTILES_DIRS = [
STATIC_ROOT,
]
然后,我更新了blog_project/urls.py
文件,添加了两个新导入:
from django.conf.urls.static import static
from django.conf import settings
和以下行:
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
但即使这样也不起作用。
您可以查看我的settings.py,urls.py和base.html文件来查看我在说什么。
我希望manage.py runserver
托管静态文件,但事实并非如此。尝试直接加载CSS文件时,出现404错误。
答案 0 :(得分:0)
首先,您将链接的db.t18.aggregate([
{$group: {_id : {
date : {$dateToString: {format : "%Y-%m-%d", date : "$_Timestamp"}},
T : {$switch :
{branches: [
{case: {$and: [{$gte : [{$hour : "$_Timestamp"}, 6]},{$lt : [{$hour : "$_Timestamp"}, 17]}]}, then : "T1"},
{case: {$and: [{$gte : [{$hour : "$_Timestamp"}, 17]},{$lt : [{$hour : "$_Timestamp"}, 22]}]}, then : "T2"}
],
default : "T3"
}}},
firstactive : {$first : "$Registers.totalconsumedactiveenergy"},
lastactive : {$last : "$Registers.totalconsumedactiveenergy"}
}},
{$group: {_id : {date : "$_id.date"}, data : {$push : {"k" : "$_id.T", "v" : ["$firstactive","$lastactive"]}}}},
{$project: {_id : 0, date : "$_id.date", "data" : {$arrayToObject : "$data"}}}
]).pretty()
文件中的db.Chapter2.find( {} ).forEach(function(doc) {
var processed = true;
if (doc._id = ObjectId("5a57c993d9dd9a41ead05a12")) {
db.Chapter2.update( { _id: doc._id }, { $set: { "processed": processed } } );
count = db.authors.find({ "Author": doc.Author });
if ( count == 0) {
db.authors.insertOne({Author: doc.Author, count: 1});
} else {
db.authors.updateOne({Author: doc.Author, {$set: {count: count +1}});
}
}
})
用错误的T而不是F拼写错误:STATICFILES_DIRS
settings.py
{ {1}}。
第二,请勿将STATIC
放在T
内的任何位置。从文档中:
警告
此(
ILES_DIRS
)应该是最初为空的目标目录,用于将静态文件从其永久位置收集到一个目录中,以便于部署;它不是永久存储静态文件的地方。您应该这样做(,因为它们的意思是“存储您的静态文件” )在staticfiles的查找器将找到的目录中,默认情况下,这些目录是“ static /”应用子目录以及您所使用的任何目录包含在STATIC_ROOT
中。
注意:草书是我添加的。
因此,我建议您为setttings.py使用以下配置:
STATICFILES_DIRS
只要您处于调试模式STATIC_ROOT
,您就应该很好。也无需像在STATICFILES_DIRS
中那样将STATIC_ROOT = os.path.join(BASE_DIR, 'static_files')
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static'),
)
添加到DEBUG=True
。如果您的STATIC_ROOT
中没有urlpatterns
,则只想这样做(请参阅here)。
目前,您要切换到生产环境,请查看how this is done correctly。
希望能帮助您编写愉快的代码!