如何在我的Django项目中使用静态文件?

时间:2018-12-31 18:23:26

标签: python django python-3.x django-settings

使用:Python 3.7和Django 2.1.4

我正在研究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.pyurls.pybase.html文件来查看我在说什么。

我希望manage.py runserver托管静态文件,但事实并非如此。尝试直接加载CSS文件时,出现404错误。

1 个答案:

答案 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

希望能帮助您编写愉快的代码!