在Django中将相关文件保存在一起的最佳方法

在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="/

在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="/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
如果可能的话,我们希望将这些文件并排保存,这样就不必在两个或三个目录中查找它们

更新:我知道打败缓存是愚蠢的,这不是我要问的。每个页面加载几个正确缓存的JavaScript和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
        • item\u detail.css
          ← 这是特定于视图的CSS
      • js
        • item_detail.js
          ← 这是特定于视图的JavaScript
我想要的是:

  • myu站点
    • widgets
      • item\u detail.html
        ← 这就是观点
      • item\u detail.css
        ← 这是特定于视图的CSS
      • item_detail.js
        ← 这是特定于视图的JavaScript

由于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
这些不是静态共享的。相反,在HTML模板中:

<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
)文件维护一大堆并行目录结构