有没有办法加载Django HTML上模板文件夹下的文件?

时间:2015-05-21 16:24:51

标签: python django

我可以像这样加载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”%}这种格式放在所有静态文件上?是因为加载速度快得多吗?

如果我加载模板文件夹下的文件怎么办?加载速度慢吗?

2 个答案:

答案 0 :(得分:5)

模板和静态资产是两种不同类型的资产,出于安全考虑,需要对其进行不同的管理。

需要向客户提供所有js,css和图像文件,以便您的网站正常运行。它们是从客户端处理的,因此需要它们可用。因此,静态资产文件夹可用,如果您检查查看源并按照这些资产的链接,您将看到它们可以直接在您的浏览器中打开。

然而,django本身使用模板来生成通过视图设置的输出。当用户打开页面时,他不会访问模板本身,而是访问django所做的渲染。因此,最终用户无法通过设计访问模板文件夹,包括其中的文件。因此,用户可以从django应用程序访问的唯一内容是视图给出的响应,这些响应基于URL模式和模板以及静态文件夹中的资产。因此,除了您的静态文件夹之外,您不能也不应该链接到静态资产。

答案 1 :(得分:1)

正如我所看到的,你已经错过了Django中模板和静态文件的概念。

首先,有两种独立的机制:加载模板文件(您未来的HTML文件)并加载静态文件(css,js,images)。

加载模板时Django使用TEMPLATE_LOADERSdocs),这些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_DIRSSTATIC_URL'/static/'基本上只是一个前缀,用于获取静态文件。它几乎总是STATICFILES_DIRS。在node_modules中,您可以找到静态文件文件夹的路径。它有时会扩展为包含bower_componentsSTATIC_URL或类似的内容。

在处理模板中的静态文件时,您需要将{% static %}附加到文件的网址中。最简单的方法是STATIC_ROOT标记。

collectstatic带来了很多混乱。它只是一个路径,在运行=WEEKNUM(your date cell)管理命令后,将在生产中收集所有静态文件。