簡體   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