![](/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.