geekdoc-python-zh/docs/overiq/188.md

5.5 KiB
Raw Permalink Blame History

在 Django 中处理静态内容

原文:https://overiq.com/django-1-11/handling-static-content-in-django/

最后更新于 2020 年 7 月 27 日


在这个阶段我们的网站看起来非常简单因为我们还没有向其中添加任何图像、CSS 和 JavaScript。在 Django我们称这些文件为静态文件,因为它们不经常变化。在本课中,我们将学习如何在 Django 中使用静态文件。

静态文件配置

  1. Django 提供了一个名为staticfiles的内置应用来管理静态文件。第一步是确定你已经把'django.contrib.staticfiles'列入了INSTALLED_APPS名单。如果'django.contrib.staticfiles'没有列出,现在就添加到INSTALLED_APPS列表中。此时,INSTALLED_APPS的设置应该是这样的:

    djangobin/django _ project/django _ project/settings . py

    #...
    
    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'djangobin',        
    ]
    
    #...
    
    
  2. 就像模板一样Django 会自动在每个安装的应用的static目录中搜索静态文件。在 djangobin 应用中创建一个名为static的新目录。在这个static目录中创建另一个名为djangobin的目录。回想一下,为了解决名称冲突,我们遵循了与创建templates目录时相同的惯例

    为了方便管理文件,在static/djangobin目录中创建三个名为cssjsimages的新目录。这是我们存储静态资产的地方。

    您也可以使用STATICFILES_DIR设置指定其他目录来搜索静态文件。例如:

    STATICFILES_DIR  = [
        os.path.join(BASE_DIR, 'static-dir1'),
        '/opt/dir2',
    ]
    
    

    但是,我们的项目不够大,无法将静态文件存储在多个目录中,因此我们不打算定义此设置。

  3. STATIC_URL设置定义访问静态文件的基本 URL。默认设置为/static/。(斜线很重要)。这意味着存储在djangobin/static/djangobimg/中的图像文件logo.png可以通过网址http://127.0.0.1:8000/static/djangobimg/logo.png访问。

    如果我们将STATIC_URL设置为'static-assets',那么logo.jpg将在http://127.0.0.1:8000/static-assets/djangobimg/logo.png可用。

下载静态文件

有了我们的目录,我们就可以提供静态内容了。下载这个 zip 文件,将其解压缩,并将所有cssjs文件放入适当的目录,如下所示:

djangobin/  <----- djangobin app directory
├── static
   └── djangobin
       ├── css
          ├── all.css
          ├── bootstrap.min.css
          ├── bootstrap-select.min.css
          ├── default.css
          └── main.css
       ├── images
       └── js
           ├── bootstrap.min.js
           ├── bootstrap-select.min.js
           └── jquery.js


加载静态文件

我们使用静态标签{% static 'path/to/file' %},来加载静态文件,但是在我们使用这个标签之前,我们必须在我们的模板中使用下面的代码来加载它。

{% load static %}

从全网站templates目录(即djangobin/templates/)打开base.html,修改如下:

决哥/决哥 _ project/决哥/样板/决哥/base.html

<!DOCTYPE html>
{% load static %}
<html>
<head>
    <title>{% block title %}Default Title{% endblock %}</title>
    <link rel="stylesheet" href="{% static 'djangobin/css/bootstrap.min.css' %}">
    <script src="{% static 'djangobin/js/jquery.js' %}"></script>
</head>
<body>
{# ... #}

保存文件并访问http://localhost:8000/add-lang/查看更改。

要检查网站是否正确加载了所有文件,请在谷歌浏览器中点击 Ctrl+Shift+J 打开开发者工具。如果控制台屏幕是空的,那么这意味着所有文件都加载良好。另一方面,如果有问题,您将在控制台中得到如下 404 错误:

如果是这种情况,请确保您已经下载了所有的资产,并按照指示将它们放在正确的目录中。另外,请仔细检查base.html文件中静态标签中指定的路径。

设置 STATIC_ROOT

目前,我们正在使用 Django 开发服务器提供静态文件。出于性能和安全原因,在生产中,我们将使用 Nginx 来服务静态文件。

为了实现这一点,我们需要设置另一个名为STATIC_ROOT的设置。打开settings.py文件后添加STATIC_ROOT设置如下:

djangobin/django _ project/django _ project/settings . py

#...
STATIC_URL = '/static/'

STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')

接下来,在项目根目录中创建一个名为staticfiles的目录。

STATIC_ROOT指定存储项目所有静态文件副本的位置。

要将所有文件收集到STATIC_ROOT中,我们使用./manage.py collectstatic命令。当我们准备部署我们的应用时,我们执行这个命令。由于我们仍处于开发阶段,我们将把它的执行推迟到第章在 Django的部署。