我可以像这样在Django html上加载css文件
{% load staticfiles %}
<link rel="stylesheet" href="{% static "css/style.css" %}">
不知道为什么不能加载模板文件夹下的css文件。
<link rel="stylesheet" href="css/style.css">
是否有一种方法可以在Django HTML上加载模板文件夹下的文件?
为什么Django要我把{%静态"css/style.css“%}这种格式放在所有的静态文件上?是因为装载速度快得多吗?
如果我加载模板文件夹下的文件呢?装货慢吗?
发布于 2015-05-21 17:06:18
正如我所看到的,您忽略了Django中模板和静态文件的概念。
首先,有两种独立的机制:加载模板文件(未来的HTML文件)和加载静态文件(css、js、图像)。
加载模板Django时使用TEMPLATE_LOADERS
(文档),基本上在settings.py
中定义为:
TEMPLATE_LOADERS = (
# Loads templates from DIRS setting:
'django.template.loaders.filesystem.Loader',
# Loads templates from your installed apps:
'django.template.loaders.app_directories.Loader',
)
您可以通过设置DIRS
(如果使用Django >= 1.8)或TEMPLATE_DIR
(如果Django < 1.8)来定义yout模板的位置。在呈现模板时还有几个步骤,例如:模板上下文处理器等,但是文档中列出了所有这些步骤。
关于静态文件。
静态文件由django.contrib.staticfiles
应用程序(文档)在DEBUG = True
时提供。在生产中,它是由Nginx、Apache或其他Http-服务器完成的。在加载静态文件时,Django使用STATICFILES_FINDERS
。它们通常被定义为:
STATICFILES_FINDERS = (
# Loads static files from STATICFILES_DIRS:
"django.contrib.staticfiles.finders.FileSystemFinder",
# Load static files from installed apps:
"django.contrib.staticfiles.finders.AppDirectoriesFinder"
)
有两个主要的设置需要关注:STATIC_URL
和STATICFILES_DIRS
。STATIC_URL
基本上只是一个前缀,用于获取静态文件。它几乎总是只有'/static/'
。在STATICFILES_DIRS
中,有指向静态文件文件夹的路径。它有时被扩展到包括node_modules
、bower_components
或类似的东西。
在处理模板中的静态文件时,需要将STATIC_URL
附加到文件的URL中。最简单的方法是{% static %}
标记。
STATIC_ROOT
带来了很多混乱。它只是一个路径,在运行collectstatic
管理命令之后,您的所有静态文件都将在生产中被收集。
发布于 2015-05-21 16:44:33
模板和静态资产是两种不同类型的资产,为安全目的需要进行不同的管理。
所有的js,css和图像文件需要提供给客户,以使您的网站工作。它们是从客户端处理的,因此它们需要可用。因此,静态资产文件夹是可用的,如果您检查查看源并遵循这些资产的链接,您将看到它们可以直接在您的broswer中打开。
然而,django本身使用模板来生成通过视图设置的输出。当用户打开页面时,他不会访问模板本身,而是访问django所做的呈现。因此,最终用户无法通过设计访问模板文件夹,包括其中的文件。因此,用户可以从django应用程序访问的唯一东西是视图提供的响应,这些响应基于urls模式和模板,以及静态文件夹中的资产。因此,除了静态文件夹之外,您不能也不应该链接到其他任何地方的静态资产。
https://stackoverflow.com/questions/30379352
复制相似问题