Menu
快讀
  • 旅遊
  • 生活
    • 美食
    • 寵物
    • 養生
    • 親子
  • 娛樂
    • 動漫
  • 時尚
  • 社會
  • 探索
  • 故事
  • 科技
  • 軍事
  • 国际
快讀

Django靜態文件加載

2020 年 1 月 4 日 Python集结号

在Django中靜態文件的搜索順序是:先搜索settings中STATICFILES_DIRS配置的目錄,然後搜索每個APP下的static目錄中的文件。

搜索順序的配置是由默認配置STATICFILES_FINDERS來實現的:
STATICFILES_FINDERS:
[
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
]

{% load static %}和{% load staticfile %}
static和staticfile的區別是什麽我還沒搞清楚,在使用的時候碰到一種情況

之前一直是在根目錄創建了static目錄,然後配置STATICFILES_DIRS,所有的js、css、images都放在這一個目錄下。後來想根據每個APP分開存儲,就在每個APP下創建了static目錄,但是js文件不能正常加載。查了好多文章後把{% load staticfile %}改成{% load static %},可以正常加載了。而且在django 2.1的官方文檔中static-files看到的也是{% load static %}的方式。

在使用{% load static %}的過程中又發現了一個問題,在base.html文件頭添加了{% load static %},但是通過{% extends "base.html" %}引入的html文件中使用{% static "js/xxxx.js" %}還是會出現不能識別static的錯誤。然後在{% extends "base.html" %}下面加上{% load static %}就可以了。在網上查了以後,發現很多人都有這樣的疑問。最後又找到一種解決方式:

在settings文件中TEMPLATES配置中增加

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],

            # 在此處添加以後就不用在每一個html中去使用{% load static %}
            'builtins': [
                # 'django.contrib.staticfiles.templatetags.staticfiles',
                'django.templatetags.static'
            ],
        },
    },
]

科技

發佈留言 取消回覆

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

©2025 快讀 | 服務協議 | DMCA | 聯繫我們