为什么Django在开发中没有为我的静态文件夹提供服务?

2024-04-25 02:12:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从静态文件夹中提供一些文件,以便在我的一个模板中运行的js脚本可以需要它。不幸的是,它似乎在选择提供哪些文件。(或其他)它没有为我的js文件提供服务,破坏了我的应用程序

另一个问题是,有时favicon在缓存第一个请求之前就丢失了。我以前注意到,在这个应用程序的部署版本中,我必须在第一次加载后刷新页面。这是当前开发版本中第一个请求的输出:

以下是第一个请求的输出:

(python terminal output from the first request) 
[12/Dec/2020 07:05:49] "GET /requestmap/ HTTP/1.1" 200 399
[12/Dec/2020 07:05:49] "GET /static/dbapi/js/main.js HTTP/1.1" 404 1788
Not Found: /favicon.ico
[12/Dec/2020 07:05:49] "GET /favicon.ico HTTP/1.1" 404 5553

(python console output from the first request)
http://localhost:8000/static/dbapi/js/main.js net::ERR_ABORTED 404 (Not Found)

…刷新后:

(python terminal output from the second request)
[12/Dec/2020 07:11:28] "GET /requestmap/ HTTP/1.1" 200 399
[12/Dec/2020 07:11:28] "GET /static/dbapi/js/main.js HTTP/1.1" 404 1788

(chrome console log from the second request):
GET http://localhost:8000/static/dbapi/js/main.js net::ERR_ABORTED 404 (Not Found)

当我进入管理页面时,所有CSS和图像似乎都可以正常加载,但是我尝试从静态文件夹访问的任何文件都会返回404——包括/static/dbapi/js/main.js。(显示在输出消息中)

我注意到我的静态目录有一个rest_framework目录,它似乎就是从那里加载静态文件的,但是如果这就是它现在正在做的事情,(我不记得如何检查),这对我来说没有任何意义,因为我已经在settings.py:static_URL='/static/'中定义了静态

settings.py:

import os
from pathlib import Path
BASE_DIR = Path(__file__).resolve().parent.parent
SECRET_KEY = 'gqi&yz3fmq(r-ode(=wd*ey+z0nojx7yrb^v&%6^5sf+(077_m'
DEBUG = True
ALLOWED_HOSTS = ['localhost', '127.0.0.1']
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',
    'coordinates',
]

REST_FRAMEWORK = {
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
    'PAGE_SIZE': 10
}

MIDDLEWARE = [
  'django.middleware.common.CommonMiddleware',
  'django.middleware.security.SecurityMiddleware',
  'django.contrib.sessions.middleware.SessionMiddleware',
  'django.middleware.common.CommonMiddleware',
  'django.contrib.auth.middleware.AuthenticationMiddleware',
  'django.contrib.messages.middleware.MessageMiddleware',
  'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

ROOT_URLCONF = 'dbapi.urls'

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        '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',
            ],
        },
    },
]

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    },
]

LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
STATIC_URL = '/static/'

目录结构为:dbapi/static/js/main.js

这里可能有不止一个问题,但我似乎无法解决。它似乎一半是提供文件,一半不是,但我不知道它是否有用。非常感谢您的帮助


Tags: 文件djangofromauthhttpgetmainrequest
1条回答
网友
1楼 · 发布于 2024-04-25 02:12:42
http://localhost:8000/static/main.js net::ERR_ABORTED 404 (Not Found)

这说明您的静态文件在模板中被错误放置或引用

应该是:

http://localhost:8000/static/yourappname/js/main.js

确保在您的模板中引用它为:

{% static 'yourappname/js/main.js' %}

你应该把你的js文件放进去

yourappname文件夹->static文件夹>yourappname文件夹->js文件夹->;main.js

相关问题 更多 >