现在我们要为我们一直在构建的帖子应用程序添加一些风格。Django对静态文件和图片的定位遵循惯例,就像它对大多数东西都有惯例一样。在Django中,你可以让静态文件在整个项目中共享,也可以在每个应用中共享。在本教程中,我们将在我们给定的应用程序中设置一个静态目录。然后我们将利用静态模板标签来使用应用程序中的静态文件,如CSS文件、图像文件和JavaScript文件。
staticfiles_dirs
你要做的第一件事是在 settings.py 中配置 STATICFILES_DIRS 常数。我们将把我们的静态文件和图片存储在一个名为static的目录中。因此,我们在settings.py文件的底部添加以下片段。
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.0/howto/static-files/
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]
STATIC_URL默认已经配置好了,但你确实需要手动添加STATICFILES_DIRS设置。
目录布局
在应用程序目录中,除了模板目录外,我们还可以添加一个静态目录。

请注意,在 **posts**文件夹中,有一个 **static**文件夹。在静态文件夹内,我们需要命名空间,就像我们对模板文件夹做的那样。所以我们可以在这个结构中放置我们的静态文件。
- posts/static/posts
我们的模板使用这种结构定位。
- posts/templates/posts
这是为了确保每次Django在不同的应用程序中搜索文件时,如果两个文件有相同的名字,它就会使用正确的文件。
设置一个基础模板
我们将再次使用Django模板继承法来设置一个名为base.html的基础模板。
posts/templates/posts/layout/base.html
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
{% load static %}
<link rel="stylesheet" href="{% static "posts/css/bootstrap.min.css" %}">
<title>Django Blog</title>
</head>
<body class="container mt-5">
{% block content %}
{% endblock content %}
</body>
</html>
在上面的片段中,我们正在使用静态模板标签来建立给定相对路径的URL。为了使用它,我们首先需要使用*{% load static %}加载它。从那里我们可以使用{% static "post/css/bootstrap.min.css" %}*来建立一个目标URL。
从Base.html扩展
我们的应用程序中已经有一个文件,显示系统中的博客文章列表。我们在Django Models教程中看到了这一点。现在我们要更新post_list.html文件,使其扩展我们刚才提到的base.html文件。
posts/templates/posts/post_list.html
{% extends "./layout/base.html" %}
{% load static %}
{% block content %}
{% for post in posts %}
<div class="card mb-4" style="width: 40rem">
<img src="{% static 'posts/images/'|add:post.slug|add:'.jpeg' %}" class="card-img-top">
<div class="card-body">
<h3 class="card-title">{{ post.title }}</h3>
<h6 class="card-subtitle mb-2 text-muted">{{ post.slug }}</h6>
<p class="card-text">{{ post.snippet }}...</p>
</div>
</div>
{% endfor %}
{% endblock content %}
通过使用*{% extends "./layout/base.html" %}*这行代码,我们现在利用了base.html的Html和包含的静态文件。我们还改变了post_list.html中的标记,以利用bootstrap类。这创造了一个相当不错的结果。

Django静态文件和图片总结
我们可以在Django中使用静态文件和图片,使我们的应用程序对终端用户有更好的外观和感觉。