如何让静态文件在我的 Django 项目中工作?
How can I get static files to work in my Django project?
使用: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
文件的顶部,并在 <head> ... </head>
部分添加 <link href="{% static 'css/base.css' %}" rel="stylesheet">
。
写入 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 and base.html 文件以了解我在说什么。
我希望 manage.py runserver
托管静态文件,但它没有。当我尝试直接加载 CSS 文件时,出现 404 错误。
首先,您在链接的 settings.py
文件中将 STATICFILES_DIRS
拼写错误,拼写错误的是 T 而不是 F:STATIC
T
ILES_DIRS
.
其次,不要将 STATIC_ROOT
放在 STATICFILES_DIRS
中的任何位置。来自文档:
Warning
This (STATIC_ROOT
) should be an initially empty destination directory for collecting your static files from their permanent locations into one directory for ease of deployment; it is not a place to store your static files permanently. You should do that (by that they mean 'store your static files') in directories that will be found by staticfiles’s finders, which by default, are 'static/' app sub-directories and any directories you include in 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
中那样将 STATIC_ROOT
添加到 urlpatterns
。如果您的 INSTALLED_APPS
中没有 django.contrib.staticfiles
(请参阅 here),您只想这样做。
此刻你想切换到生产,看看how this is done correctly。
希望对您有所帮助,编码愉快!
使用: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
文件的顶部,并在 <head> ... </head>
部分添加 <link href="{% static 'css/base.css' %}" rel="stylesheet">
。
写入 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 and base.html 文件以了解我在说什么。
我希望 manage.py runserver
托管静态文件,但它没有。当我尝试直接加载 CSS 文件时,出现 404 错误。
首先,您在链接的 settings.py
文件中将 STATICFILES_DIRS
拼写错误,拼写错误的是 T 而不是 F:STATIC
T
ILES_DIRS
.
其次,不要将 STATIC_ROOT
放在 STATICFILES_DIRS
中的任何位置。来自文档:
Warning
This (
STATIC_ROOT
) should be an initially empty destination directory for collecting your static files from their permanent locations into one directory for ease of deployment; it is not a place to store your static files permanently. You should do that (by that they mean 'store your static files') in directories that will be found by staticfiles’s finders, which by default, are 'static/' app sub-directories and any directories you include inSTATICFILES_DIRS
).
注:草书是我加的
所以我为您推荐以下配置 setttings.py:
STATIC_ROOT = os.path.join(BASE_DIR, 'static_files')
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static'),
)
只要您处于调试模式,DEBUG=True
,您就可以开始了。也不需要像在 urls.py
中那样将 STATIC_ROOT
添加到 urlpatterns
。如果您的 INSTALLED_APPS
中没有 django.contrib.staticfiles
(请参阅 here),您只想这样做。
此刻你想切换到生产,看看how this is done correctly。
希望对您有所帮助,编码愉快!