Django找不到静态文件夹

时间:2019-07-26 07:00:11

标签: python django

我希望将css文件添加到Django,但找不到静态文件夹。

这是我的settings.py文件:

"""
Django settings for opengarden project.

Generated by 'django-admin startproject' using Django 2.2.3.

For more information on this file, see
https://docs.djangoproject.com/en/2.2/topics/settings/

For the full list of settings and their values, see
https://docs.djangoproject.com/en/2.2/ref/settings/
"""

import os

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))


# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/2.2/howto/deployment/checklist/

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = '__________'

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True

ALLOWED_HOSTS = []


# Application definition

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

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

ROOT_URLCONF = 'opengarden.urls'

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

WSGI_APPLICATION = 'opengarden.wsgi.application'


# Database
# https://docs.djangoproject.com/en/2.2/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}


# Password validation
# https://docs.djangoproject.com/en/2.2/ref/settings/#auth-password-validators

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',
    },
]


# Internationalization
# https://docs.djangoproject.com/en/2.2/topics/i18n/

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'America/Denver'

USE_I18N = True

USE_L10N = True

USE_TZ = True


# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.2/howto/static-files/

STATIC_URL = '/static/'

STATIC_ROOT = ''

我的基本html文件:

<!DOCTYPE html>
<html lang="en">
<!DOCTYPE html>
<html lang="en">
<head>
    {% block title %}<title>Garden Dash</title>{% endblock %}
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    {% load static %}
    <link rel='stylesheet' href="{% static 'wx/css/styles.css' %}">
</head>
<body>
  <div class="container-fluid">
    <div class="nav">
        <ul>
            <li>Plants</li>
            <li>Weather</li>
            <li>Soil</li>
            <li>Yield</li>
        </ul>
    </div>
    <div class="row">
      <div class="col-sm-10">{% block content %}{% endblock %}</div>
    </div>
  </div>
</body>
</html>

我的文件夹结构如下:

gardendash> wx>静态> wx> css> styles.css

我的样式表很简单

html {
    background-color: black;
}

我在堆栈溢出中进行了搜索,找到了一些解决方案,但是它们没有解决问题。我还发现有人说键入以下内容来找到我的静态位置

  

python manage.py findstatic --verbosity 2 css / style.css

我收到的结果是

  

找不到与'css / style.css'相匹配的文件。

     

在以下位置查找:
  /home/my_name/.virtualenvs/django/lib/python3.6/site-packages/django/contrib/admin/static

关于我在做什么错的任何建议?我也尝试过将settings.py中的根URL调整为文件夹目录,但是没有运气。

谢谢大家的时间。

2 个答案:

答案 0 :(得分:1)

您提到项目的结构是这样的:

project_folder > app > static > app_name > css > styles.css

由于styles.css位于应用程序的静态目录中,因此您不能简单地以/static/css/styles.css的身份访问此文件。这是错误的路径。

正确的路径是:/static/app_name/css/styles.css

因此,在您的模板中,您将像这样访问文件:

{% static 'app_name/css/styles.css' %}

此外,请确保该应用已列在INSTALLED_APPS中。


另外,让我澄清一些事情:

  1. STATIC_ROOT:这是django在运行manage.py collectstatic命令时 将保留所有静态文件的目录的名称。这仅在生产中是必需的,否则此目录将并且应该为空。 collectstatic命令从您的应用程序和项目中复制所有静态文件。
  2. STATIC_URL:这是django用于生成静态文件的url路径的url前缀。如果将STATIC_URL设置为/static/,则django会将{% static 'file.jpg' %}转换为/static/file.jpg
  3. STATICFILES_DIRS:这是一个列表,其中包含您保存了项目特定静态文件的目录的路径。这仅是开发所需的。当您运行collectstatic命令时,Django将从该列表中所有列出的路径复制文件,并将它们放置在STATIC_ROOT中。
  4. 您不需要配置任何URL即可提供静态文件,因为只要django.contrib.staticfiles在您的INSTALLED_APPS中,django就会在开发过程中默认执行该操作。

答案 1 :(得分:1)

我已经通过以下步骤解决了类似的问题:

  1. settings.py内添加以下代码行
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.2/howto/static-files/

STATIC_URL = '/static/'

STATICFILES_DIRS = (
  os.path.join(BASE_DIR, 'static_root'),
)

STATIC_ROOT = os.path.join(BASE_DIR, 'static')
  1. 然后在我的项目文件夹中创建一个名为static_root的文件夹,并在其中插入我的自定义样式表或脚本。
  2. 在控制台中运行以下命令:
python3 manage.py collectstatic

我正在Ubuntu上使用python3,如果您是Windows用户,则命令为python manage.py collectstatic

然后我保存在static_root文件夹中的所有静态文件以及项目中其他必要的静态文件,所有文件都会在该静态文件夹中自动生成。

  1. 现在在我的基础HTML文件中添加{% load static %}

以下是示例:

{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
    <!-- meta tags -->
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">

    <!-- custom css -->
    <link rel="stylesheet" href="{% static 'css/styles.css' %}">

    <title>Django Project</title>
</head>