多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# 第八节:加载静态文件 # 加载静态文件 在一个网页中,不仅仅只有一个`html`骨架,还需要`css`样式文件,`js`执行文件以及一些图片等。因此在`DTL`中加载静态文件是一个必须要解决的问题。在`DTL`中,使用`static`标签来加载静态文件。要使用`static`标签,首先需要`{% load static %}`。加载静态文件的步骤如下: 1. 首先确保`django.contrib.staticfiles`已经添加到`settings.INSTALLED_APPS`中。 2. 确保在`settings.py`中设置了`STATIC_URL`。 3. 在已经安装了的`app`下创建一个文件夹叫做`static`,然后再在这个`static`文件夹下创建一个当前`app`的名字的文件夹,再把静态文件放到这个文件夹下。例如你的`app`叫做`book`,有一个静态文件叫做`zhiliao.jpg`,那么路径为`book/static/book/zhiliao.jpg`。(为什么在`app`下创建一个`static`文件夹,还需要在这个`static`下创建一个同`app`名字的文件夹呢?原因是如果直接把静态文件放在`static`文件夹下,那么在模版加载静态文件的时候就是使用`zhiliao.jpg`,如果在多个`app`之间有同名的静态文件,这时候可能就会产生混淆。而在`static`文件夹下加了一个同名`app`文件夹,在模版中加载的时候就是使用`app/zhiliao.jpg`,这样就可以避免产生混淆。) 4. 如果有一些静态文件是不和任何`app`挂钩的。那么可以在`settings.py`中添加`STATICFILES_DIRS`,以后`DTL`就会在这个列表的路径中查找静态文件。比如可以设置为: ``` <pre class="calibre12">``` STATICFILES_DIRS = [ os.path.join(BASE_DIR,<span class="hljs-string">"static"</span>) ] ``` ``` 5. 在模版中使用`load`标签加载`static`标签。比如要加载在项目的`static`文件夹下的`style.css`的文件。那么示例代码如下: ``` <pre class="calibre12">``` {% load static %} <span class="hljs-tag"><<span class="hljs-class">link</span> <span class="hljs-class">rel</span>=<span class="hljs-string">"stylesheet"</span> <span class="hljs-class">href</span>=<span class="hljs-string">"{% static 'style.css' %}"</span>></span> ``` ``` 6. 如果不想每次在模版中加载静态文件都使用`load`加载`static`标签,那么可以在`settings.py`中的`TEMPLATES/OPTIONS`添加`'builtins':['django.templatetags.static']`,这样以后在模版中就可以直接使用`static`标签,而不用手动的`load`了。 7. 如果没有在`settings.INSTALLED_APPS`中添加`django.contrib.staticfiles`。那么我们就需要手动的将请求静态文件的`url`与静态文件的路径进行映射了。示例代码如下: ``` <pre class="calibre12">``` <span class="hljs-keyword">from</span> django.conf <span class="hljs-keyword">import</span> settings <span class="hljs-keyword">from</span> django.conf.urls.static <span class="hljs-keyword">import</span> static urlpatterns = [ <span class="hljs-title"># 其他的url映射</span> ] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) ``` ```