在Django中将相关文件保存在一起的最佳方法
在Django中保存相关文件的最佳方法是什么 除了我们的HTML模板之外,大多数视图至少还有一个额外的JavaScript文件,可能还有一个额外的CSS文件。例如:在Django中将相关文件保存在一起的最佳方法,django,project-organization,Django,Project Organization,在Django中保存相关文件的最佳方法是什么 除了我们的HTML模板之外,大多数视图至少还有一个额外的JavaScript文件,可能还有一个额外的CSS文件。例如: <!-- at top of file --> <link rel="stylesheet" href="/master/css/site-main.css"> <!-- at bottom of file --> <script type="text/javascript" src="/
<!-- at top of file -->
<link rel="stylesheet" href="/master/css/site-main.css">
<!-- at bottom of file -->
<script type="text/javascript" src="/master/js/jquery.js"></script>
<script type="text/javascript" src="/master/js/site-main.js"></script>
item\u detail.html
item_detail.js
item\u detail.css
<!-- at top of file -->
<link rel="stylesheet" href="/master/css/site-main.css">
<!-- at bottom of file -->
<script type="text/javascript" src="/master/js/jquery.js"></script>
<script type="text/javascript" src="/master/js/site-main.js"></script>
那部分很好
除此之外,每个页面都加载特定于页面的JavaScript和CSS:
<link rel="stylesheet" href="/static/css/widgets/item_detail.css">
<script type="text/javascript" src="/static/js/widgets/item_detail.js"></script>
在本例中,item_detail.js
将具有item detail页面上所需的事件处理程序(仅限)
不幸的是,这意味着我现在有几个用于此视图的并行目录结构:
myu站点
widgets
← 这就是观点item\u detail.html
static
css
← 这是特定于视图的CSSitem\u detail.css
js
← 这是特定于视图的JavaScriptitem_detail.js
myu站点
widgets
← 这就是观点item\u detail.html
← 这是特定于视图的CSSitem\u detail.css
← 这是特定于视图的JavaScriptitem_detail.js
由于Django中视图的工作方式,我不清楚这是否可行。我同意freiksenet的观点。他所要解决的问题的解决方案可能是聚合各种css和js文件。然后整个站点只使用一个css和一个js文件。是的,第一个负载会更高,但网站速度的很大一部分是下载文件,如果缓存做得好,这些文件的聚合有助于imho
很遗憾,我没有回答您的主要问题。我将javascript保存在按函数分隔的文件中,并将它们组合成一个带有预提交钩子的简化js文件(测试运行之后) 例如:我目前正在处理的站点上有几个jQueryUI对话框。为了便于维护,每个对话框的功能都被分解成自己的js文件。所有需要的js文件都使用一个简短的base.js文件“包含”在开发页面上,如下所示:
function include(filename) {
document.write(unescape("%3Cscript src='" + filename + "' type='text/javascript'%3E%3C/script%3E"));
}
// include-js (external)
include('/site_media/jquery-plugin1.js');
include('/site_media/js-sources/dialog1.js');
我的预提交钩子在此文件上执行正则表达式
include\('/site_media/(.*)'\);
并将所有文件输入YUI压缩程序
所以我想你的问题的答案是。。。我把它们放在逻辑上对我有意义的地方,因为在live站点上,它们都会放在缩小的JS文件中如果你只是为了开发而组织东西,你可以将你的模板目录与所有模板、css和JS文件符号链接到你提供静态文件的目录中 因此,从您的示例来看:将my_site/widgets添加到Django TEMPLATE_DIRS config,将cp-s my_site/widgets添加到您的静态文件所在的目录 这是一个肮脏的黑客,请不要在生产中使用它,因为它非常不安全。但若你们想在开发阶段整齐地组织项目,那个么我认为这是一个可能的解决方案
<>也考虑到当你从开发转移到生产时,这会给你带来很多麻烦,因为它会失败。 您不希望将模板作为静态文件提供——它们可能包含敏感信息或有关页面实现的详细信息,不适合公众查看 CSS和JS不必分离到单独的目录中——只需将它们放在
static/
目录中即可
myu站点/
widgets/
item\u detail.html
static/
item\u detail.css
item_detail.js
myu站点/
widgets/
item\u detail.html
item\u detail.css
item_detail.js
<script type="text/javascript" charset="utf-8">
{% include "widgets/item_detail.js" %}
</script>
{%include“widgets/item_detail.js”%}
(类似于CSS的代码)我只会对特定于页面的JavaScript和CSS执行此操作,而不会对可以从缓存中获益的站点范围的内容执行此操作
这会将实际的JavaScript和/或CSS直接转储到模板中,但允许我将它们保存在单独的文件中以供开发之用。这很好,在开发方面很明智,但会击败一些JavaScript和CSS缓存,但只适用于页面级别的内容,而这些内容不会在任何其他页面上重复使用。您确定这是一种好方法吗?每个视图一个js和一个css文件意味着每个视图将强制用户至少加载一次css和js。若你们有一个css和一个js文件来缓存所有内容,那个么用户就不需要再次加载它了。对不起,我不清楚。我们正确地缓存JavaScript和CSS。然而,也有特定于页面的JavaScript和CSS。例如,一个特定页面的JavaScript事件处理程序。我不想将它们直接放到视图中(不引人注目的JavaScript原则),因此它们位于单独的
.js
文件中。但我也不想为那些.js
(有时还有.css
)文件维护一大堆并行目录结构