我希望将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调整为文件夹目录,但是没有运气。
谢谢大家的时间。
答案 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
中。
另外,让我澄清一些事情:
STATIC_ROOT
:这是django在运行manage.py collectstatic
命令时 将保留所有静态文件的目录的名称。这仅在生产中是必需的,否则此目录将并且应该为空。 collectstatic
命令从您的应用程序和项目中复制所有静态文件。STATIC_URL
:这是django用于生成静态文件的url路径的url前缀。如果将STATIC_URL
设置为/static/
,则django会将{% static 'file.jpg' %}
转换为/static/file.jpg
。STATICFILES_DIRS
:这是一个列表,其中包含您保存了项目特定静态文件的目录的路径。这仅是开发所需的。当您运行collectstatic
命令时,Django将从该列表中所有列出的路径复制文件,并将它们放置在STATIC_ROOT
中。 django.contrib.staticfiles
在您的INSTALLED_APPS
中,django就会在开发过程中默认执行该操作。答案 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')
python3 manage.py collectstatic
我正在Ubuntu上使用python3,如果您是Windows用户,则命令为python manage.py collectstatic
然后我保存在static_root文件夹中的所有静态文件以及项目中其他必要的静态文件,所有文件都会在该静态文件夹中自动生成。
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>