我可以像这样加载Django html上的css文件
{% load staticfiles %}
<link rel="stylesheet" href="{% static "css/style.css" %}">
我想知道为什么我无法加载模板文件夹下的css文件。
<link rel="stylesheet" href="css/style.css">
有没有办法在Django HTML上加载模板文件夹下的文件?
为什么Django要我将{%static“css / style.css”%}这种格式放在所有静态文件上?是因为加载速度快得多吗?
如果我加载模板文件夹下的文件怎么办?加载速度慢吗?
答案 0 :(得分:5)
模板和静态资产是两种不同类型的资产,出于安全考虑,需要对其进行不同的管理。
需要向客户提供所有js,css和图像文件,以便您的网站正常运行。它们是从客户端处理的,因此需要它们可用。因此,静态资产文件夹可用,如果您检查查看源并按照这些资产的链接,您将看到它们可以直接在您的浏览器中打开。
然而,django本身使用模板来生成通过视图设置的输出。当用户打开页面时,他不会访问模板本身,而是访问django所做的渲染。因此,最终用户无法通过设计访问模板文件夹,包括其中的文件。因此,用户可以从django应用程序访问的唯一内容是视图给出的响应,这些响应基于URL模式和模板以及静态文件夹中的资产。因此,除了您的静态文件夹之外,您不能也不应该链接到静态资产。
答案 1 :(得分:1)
正如我所看到的,你已经错过了Django中模板和静态文件的概念。
首先,有两种独立的机制:加载模板文件(您未来的HTML文件)并加载静态文件(css,js,images)。
加载模板时Django使用TEMPLATE_LOADERS
(docs),这些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
您可以通过设置TEMPLATE_DIR
(如果您使用的是Django&gt; = 1.8)或django.contrib.staticfiles
(如果Django&lt; 1.8)来定义您的模板位置。渲染模板还有几个步骤,例如:模板上下文处理器等,但它们都列在文档中。
现在关于静态文件。
DEBUG = True
时,STATICFILES_FINDERS
应用(docs)会提供静态文件。在生产中,它由Nginx,Apache或其他Http-Servers完成。
加载静态文件时,Django使用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
或类似的内容。
在处理模板中的静态文件时,您需要将{% static %}
附加到文件的网址中。最简单的方法是STATIC_ROOT
标记。
collectstatic
带来了很多混乱。它只是一个路径,在运行=WEEKNUM(your date cell)
管理命令后,将在生产中收集所有静态文件。