欢迎访问宙启技术站
智能推送

Django模板标签static()函数详解及使用示例(带Python代码)

发布时间:2023-12-11 12:31:44

Django模板标签static()函数是一个用于在模板中引用静态文件的函数。静态文件包括样式表、脚本、图像等,并且通常存储在项目的static目录中。使用static()函数可以帮助我们在模板中正确地引用这些静态文件,并且可以自动处理静态文件的版本号、URL重写等问题,提供了一种方便的方式来管理静态文件。

下面我们来详细介绍一下static()函数的使用和示例。

## 使用方法

首先需要在模板文件中加载{% load static %}标签,这样才能使用static()函数。加载标签只需在模板文件的开头添加一行代码即可:

{% load static %}

然后就可以在模板中使用static()函数来引用静态文件了。static()函数接受一个相对于static目录的文件路径作为参数,返回一个静态文件的URL。

<link href="{% static 'css/style.css' %}" rel="stylesheet">
<script src="{% static 'js/main.js' %}"></script>
<img src="{% static 'images/logo.png' %}" alt="Logo">

在上面的示例中,static()函数被用于引用了一个样式表、一个脚本和一个图片。注意路径参数是相对于static目录的路径,不需要包含static目录本身。

## 用例示例

假设我们有一个Django项目的目录结构如下:

project/
    manage.py
    project/
        __init__.py
        settings.py
        urls.py
    app/
        __init__.py
        models.py
        views.py
    static/
        css/
            style.css
        js/
            main.js
        images/
            logo.png
    templates/
        base.html
        home.html

现在我们要在base.html模板文件中引用style.css样式表和main.js脚本文件。

首先,我们需要在base.html的开头加载{% load static %}标签。然后,在合适的位置使用static()函数来引用静态文件:

{% load static %}
<html>
  <head>
    <link href="{% static 'css/style.css' %}" rel="stylesheet">
    <script src="{% static 'js/main.js' %}"></script>
  </head>
  <body>
    ...
  </body>
</html>

可以看到,我们使用了{% static 'css/style.css' %}{% static 'js/main.js' %}来引用样式表和脚本文件。static()函数会自动根据settings.py中的静态文件设置来生成正确的URL。

在上述示例中,static()函数会生成如下的HTML标记:

<link href="/static/css/style.css" rel="stylesheet">
<script src="/static/js/main.js"></script>

这样,我们就成功地引用了静态文件。

## 版本管理

在生产环境中,为了缓存优化的目的,通常会给静态文件添加版本号。使用static()函数可以很方便地处理静态文件的版本号。

首先在settings.py中配置静态文件的版本号,如下所示:

STATIC_URL = '/static/'
STATICFILES_DIR = [
    os.path.join(BASE_DIR, 'static')
]
STATICFILES_STORAGE = 'django.contrib.staticfiles.storage.ManifestStaticFilesStorage'

然后在模板中使用类似于下面的方式来引用静态文件:

{% load static %}
<link href="{% static 'css/style.css' %}?v={{ STATIC_VERSION }}" rel="stylesheet">
<script src="{% static 'js/main.js' %}?v={{ STATIC_VERSION }}"></script>

上面的示例中,我们使用了{{ STATIC_VERSION }}来引用静态文件的版本号。版本号是根据静态文件内容生成的哈希值,每次静态文件内容发生变化时,版本号都会变化。这样就可以保证当静态文件发生变化时,用户的浏览器会重新加载最新的文件,避免了浏览器缓存旧文件的问题。

views.py中,可以通过如下代码来获取静态文件的版本号并传递给模板:

from django.contrib.staticfiles.storage import staticfiles_storage

def home(request):
    context = {
        'STATIC_VERSION': staticfiles_storage.url('css/style.css')[-13:-4]
    }
    return render(request, 'home.html', context)

上述代码首先使用staticfiles_storage.url('css/style.css')来获取静态文件的URL,然后通过切片操作获取版本号,并将其传递给模板。

这样就实现了静态文件的版本管理。

总结起来,static()函数是一个非常有用的函数,可以帮助我们在Django模板中方便地引用静态文件,并且可以处理静态文件的版本号问题。它减少了我们手动构建静态文件URL的工作,提高了开发效率,使静态文件的管理更加方便。