繁体   English   中英

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

[英]How can I get static files to work in my Django project?

使用:Python 3.7和Django 2.1.4

我正在研究William S.Vincent的Django入门指南中的教程。 我在本书的“博客应用”部分,并且一直遵循他对这封信的指示。 但是,无论我做什么,我似乎都无法让开发服务器来服务我的静态CSS文件。

我的源代码可以在这里找到。

我正在使用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')]

然后在templates/base.html文件的顶部放置{% load static %} ,并在其中添加<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错误。

首先,您在链接的settings.py文件中使用横行的T而不是F来拼写错误的STATICFILES_DIRSSTATIC T ILES_DIRS

其次,不要把你的STATIC_ROOT任何地方你的内STATICFILES_DIRS 从文档:

警告

这个( STATIC_ROOT )应该是一个最初为空的目标目录,用于将静态文件从其永久位置收集到一个目录中,以便于部署; 它不是永久存储静态文件的地方。 您应该在静态文件的查找器将找到的目录中执行此操作( 这意味着它们“存储您的静态文件” ),默认情况下,这些目录为“ static /”应用子目录以及您包括在STATICFILES_DIRS任何目录)。

注意:草书是我添加的。


因此,我建议您的setttings.py使用以下配置:

STATIC_ROOT = os.path.join(BASE_DIR, 'static_files')
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
)

只要您处于调试模式DEBUG=True ,您就应该很好。 也无需像在urls.py那样将urlpatterns添加到STATIC_ROOT中。 如果您的INSTALLED_APPS没有django.contrib.staticfiles ,则只想这样做(请参阅此处 )。

目前,您要转为生产,请看一下如何正确完成

希望对您有所帮助,并祝您编程愉快!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM