django的全新内容。
在我的settings.py文件中,我有:
STATIC_URL = '/static/'
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
Run Code Online (Sandbox Code Playgroud)
我的urls.py有
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.index)
]
Run Code Online (Sandbox Code Playgroud)
我的views.py有
def index(request):
return render(request, 'index.html', {})
Run Code Online (Sandbox Code Playgroud)
最后,我的index.html中包含以下内容:
{% load static %}
<link href="{% static 'styles/custom.css' %}" rel="stylesheet">
Run Code Online (Sandbox Code Playgroud)
HTML文件的加载方式与显示的一样,但是样式未显示。经检查,它表示未找到CSS文件。
这是我的目录结构:
.
??? README.md
??? app
? ??? __init__.py
? ??? db.sqlite3
? ??? manage.py
? ??? models.py
? ??? settings.py
? ??? urls.py
? ??? views.py
? ??? wsgi.py
??? db.sqlite3
??? static
? ??? scripts
? ? ??? custom.js
? ??? styles
? ??? custom.css
??? templates
??? index.html
Run Code Online (Sandbox Code Playgroud)
您必须告诉Django在哪里可以找到静态文件。这是通过在settings.py模块上设置STATICFILES_DIRS来完成的。
通常,我们使用以下命令执行以下操作BASE_DIR:
settings.py
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]
Run Code Online (Sandbox Code Playgroud)
一开始它有点令人困惑,因为Django具有三个类似的配置:
STATIC_URLSTATIC_ROOTSTATICFILES_DIRS基本上,STATIC_URL将会用于生成一个网址来服务您的静态资产。它可能是一个相对的URL,例如:
STATIC_URL='/static/'
{% static 'styles/custom.css' %} => /static/styles/custom.css
Run Code Online (Sandbox Code Playgroud)
它可能是完整的URL:
STATIC_URL='https://static.yourdomain.com/'
{% static 'styles/custom.css' %} => https://static.yourdomain.com/styles/custom.css
Run Code Online (Sandbox Code Playgroud)
现在,STATICFILES_DIRSDjango将在其中找到您的静态文件。通常在项目文件夹中。但!这是从哪里Django会成为你的静态资产到客户端。就像,静态文件的来源在哪里。
这是因为Django并没有真正提供此类文件(.js,.css和.jpg)。好吧,无论如何都不是默认设置。您可以使用WhiteNoise之类的第三方应用程序。
这就是我们拥有的原因STATIC_ROOT,它是告诉Django从那里复制这些文件的位置,STATICFILES_DIRS以便其他人可以为我服务。其他人通常是Apache或NGINX。
我们仅使用STATIC_ROOT进行部署。
当我们将Django应用程序部署到生产服务器时,通常会运行command python manage.py collectstatic。这就是Django将文件复制STATICFILES_DIRS到的地方STATIC_ROOT。
但是在开发阶段,您实际上不必关心这么多的细节,因为尽管DEBUG=True,Django会让您变得更轻松并提供静态文件。