我现在正试图学习Django,并试图确保我没有做任何愚蠢的事情。
我正在使我的网页更加模块化,因为我正在删除模板中的硬编码值(base .html)。这样做,我试图将硬编码的CDN引用(jquery,bootstrap等)转换为可以包含在每个网页中的模块化部分。这样做将允许我将来更改单个文件,而不是被迫转到每个网页并进行更改。
但是,我有点困惑。我试图确定将它们复制到html文件中是否有意义,并使用Django的{% include '' %}
模板标记直接包含cdn部分,或者如果使用Django的静态包括会更合适。
那究竟什么是最佳路线?似乎很容易使用模板包含一切静态的所有诚实。为什么不用它来包含javascript或css?
答案 0 :(得分:1)
网站通常需要提供其他文件,例如图片,JavaScript或CSS。在Django中,我们将这些文件称为“静态文件”。
我们称他们为静态'仅仅因为它们不是动态的,即这些文件的内容是相对固定的,无论是设计还是它的内在特征(例如:二进制内容,如图像),因此不需要我们的应用服务器处理
我们将它们与其他文件区分开来,因为建议在较低级别提供这些静态文件,例如,使用nginx。这使我们可以更快地提供这些文件,从而提高性能。它还允许轻松缓存。
但是在使用CDN时,您可以将此工作从服务器卸载到其他人的服务器上。
现在回到你的问题。您不必在每个模板中声明您的资源。通常,<html>
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="~~CDN HERE~~">
<script src="~~CDN HERE~~"></script>
</head>
<body>
{% block body %}{% endblock %}
</body>
</html>
包含页面的基础,然后我可以通过更具体的(子)模板扩展(阅读:template inheritance)。
为了快速理解这一点,以下是一个例子:
base.html文件:
{% extends "app/base.html" %}
{% load static %}
{% block body %}
<h1>{{ page_title }}</h1>
<img src="{% static 'app/img/detective.png' %}" alt="detective" />
{{ page_content | safe }}
{% endblock %}
article.html
{% block css %}{% endblock %}
现在,对于您网站上的每篇文章,您都会呈现自动扩展基础的文章模板,无需为多个页面提及您的css / js文件。
如果您为不同的网页使用不同的资源文件,则可以创建一个额外的块,例如article.html
然后将其添加到您的{% block css %}
<link rel="stylesheet" href="{% static 'app/css/article.css' %}">
{% endblock %}
include
注意我是如何使用静态图像的,这是由nginx直接提供的。
理论上,你可以将你的CDN链接发送到一个文件中,然后在base.html
中perl -ane 'print unless $F[2] eq $F[3] and $F[7] eq "inf"' data.txt
,但这只会带来模块化,导致冗余的复杂性。
如果您有任何问题,请与我们联系!