![](/img/trans.png)
[英]Why can't I add static files in my django project when other static files are available in sources?
[英]How can I get static files to work in my Django project?
我正在研究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.py , urls.py和base.html文件,以了解我在说什么。
我希望manage.py runserver
可以托管静态文件,但事实并非如此。 当我尝试直接加载CSS文件时,出现404错误。
首先,您在链接的settings.py
文件中使用横行的T而不是F来拼写错误的STATICFILES_DIRS
: STATIC
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.