【问题标题】:Python / Django - Organizing Stylesheets and ScriptsPython / Django - 组织样式表和脚本
【发布时间】:2011-06-25 20:43:02
【问题描述】:

我正在寻找一种在 Django 中组织样式表和脚本的简单方法。我对python的框架和语言比较陌生。我来自 PHP 背景。

在 PHP / Zend 的世界中,有一些函数是用视图/布局对象实现的。通过在脚本和样式表的 head 标签内包含一行,您可以轻松地在视图 -> 方法级别添加样式表/脚本。我已阅读 Django 表单媒体文档,但这仅适用于需要特定样式和脚本的表单。

有什么方向吗?

【问题讨论】:

    标签: python django django-templates stylesheet


    【解决方案1】:

    查看 django.contrib.admin 应用程序。

    与管理站点的工作方式并行。

    1. 创建媒体目录。

    2. 创建 media/img、media/jss、media/css、media/whatever 目录

    3. 在每一个中,您都将拥有应用程序的特定内容。 media/img/app1, media/jss/app1 以便您的每个 Django 应用程序都可以拥有特定的媒体而不会发生冲突或问题。

    4. 确保您的设置已设置 MEDIA_ROOT。您需要在 Django 文档中阅读有关此内容的信息。您还必须设置 MEDIA_URL 以进行部署。而且您必须弄清楚如何让您的网络服务器(即 Apache)为该媒体提供服务。

    Django 不应提供静态文件,如 .js 库或 .css 文件或任何图像。这是浪费时间。 Apache 可以很好地解决这个问题。但是,出于测试目的,您可以在 Django 站点中启用简单的文件服务器功能。

    最后。最重要的是。

    确保您的页面模板确实引用了您希望在页面上包含的各种文件{{MEDIA_URL}}css/site.css{{MEDIA_URL}}js/app1/something.js

    【讨论】:

    • 衍生产品可能是myapp/css, myapp/js, myapp/imagesmyotherapp/css, ...。我不一定会为特定于项目的应用程序这样做,除非它自己的每个应用程序都有很多私有静态资源,但我肯定会为可再分发的应用程序这样做。这更像是我对管理媒体的看法:{{MEDIA_URL}}admin/,可再分发媒体,不会与现有媒体资源发生冲突。
    • 请注意,最新的 django (1.3beta) 有 contrib.staticfiles,它使用稍微不同的静态组织方法。如果我是你,我会看看那个。
    • @Matthew Schinckel:这听起来像是一个很好的单独答案。请将其发布为答案,以便正确投票。
    【解决方案2】:

    我喜欢在我的样式表附近放置与样式相关的图片,并为用户上传的内容(如个人资料图片、照片、视频)提供不同的路径...

    所以我最终得到了这样的结果:

    /media
        /style
            base.css
            img/
                logo.gif
                button.gif
        /js
            home.js
        /profile
             user_profile_image.gif
    

    这样,css 中的图像引用可以始终是相对的,例如:

    background: url(img/background.gif)
    

    此外,还有一些用于处理媒体、css/js 压缩、精灵等的应用程序。

    【讨论】:

      【解决方案3】:

      看起来您实际上可能正在寻找一种方法来根据当前页面有条件地包含样式表。这可以使用模板标签来完成。

      在您的 base.html 文件中,您将创建一个部分来添加样式表。

      {% block addl_styles %}{% endblock %}
      

      然后在您想要加载样式的页面中,您将使用相同的块以及block.super 将您的脚本附加到您的应用程序调用的任何其他脚本中。

      因此,在您的表单模板中,您将使用如下代码:

      {% block addl_styles %}
      {{ block.super }}
      <link rel="stylesheet" type="text/css" href="{{ MEDIA_URL }}your_css_folder/example.css" />
      {% endblock %}
      

      请注意,您可以使用{{ MEDIA_URL }} 以编程方式添加基本目录,并以安全的方式到达您的文件夹。

      【讨论】:

        【解决方案4】:

        请注意,从 django 1.3 开始,旧的 staticfiles 应用程序已成为 django.contrib 的一部分。

        要知道的主要事情是,您可以将静态媒体粘贴到 settings.INSTALLED_APPS 中任何应用程序的 static/ 子目录中,该文件将由 collectstatic 管理命令自动收集。

        我不会重新散列,而是将您指向文档:Django: the staticfiles app

        您可能还需要考虑寻找可以处理基于文本的静态文件(css 和 javascript)的东西,这些文件可以轻松组合、缩小和版本化。我正要认真研究这个,所以还没有链接。

        【讨论】:

          猜你喜欢
          • 2010-09-11
          • 1970-01-01
          • 2013-05-27
          • 1970-01-01
          • 2021-01-24
          • 2018-02-03
          • 1970-01-01
          • 2021-07-16
          • 1970-01-01
          相关资源
          最近更新 更多