【问题标题】:Django - Dynamically include JS/CSS based on installed appsDjango - 根据已安装的应用程序动态包含 JS/CSS
【发布时间】:2013-08-10 04:29:16
【问题描述】:

有人知道根据您安装的应用程序调整模板中包含的 JS/CSS 资源的方法吗?

假设我们在应用程序x 中有一个使用template.html 的基本功能,这需要应用程序的静态文件中提供的foo.js

我想说一个额外的可选应用程序y 可以注册bar.js 以包含在template.html 中,这提供了一些高级功能。

理想情况下,这应该与功能级别相关 - 因此我同时注册 foo.jsbar.js 以提供功能 A 并且在我的模板中我只是表明我想要 A 的所有静态内容.

【问题讨论】:

  • 您使用的是 django-pipeline 还是任何压缩库?如果是,你可以用干净的方式来做
  • a-ha - 你指的是django-pipeline.readthedocs.org/en/latest/… 吗?看起来有一种可能。谢谢你-
  • 我会更喜欢这个,因为它可以免费为您提供压缩。

标签: django django-templates django-staticfiles


【解决方案1】:

您可以遵循 django 管理框架的方法。在您的基本模板中有一个额外的样式和 javascript 部分。根据某些条件,您可以插入新文件。

例如:

在基本模板中定义这两个块

{% block extracss %}{% endblock %}
{% block extrajs %}{% endblock %}

如果你想根据某些条件添加一个js或css,你可以在里面添加一个检查

    {% block extracss %}
       {% if new_app_installed %}
          # Insert your CSS
       {% else %} 
          # Default 
       {% endif %}
     {% endblock %}

您还可以检查您的插件应用程序是否已安装并将此上下文变量从视图传递到模板。

from django.conf import settings

if "new_app" in settings.INSTALLED_APPS:
    is_new_app_installed = True

【讨论】:

  • 但是检查new_app_installed的方法是什么?我不希望“普通”应用提前知道这个插件功能。
  • 是的。您可以检查 settings.INSTALLED_APPS。
  • 是的,但这意味着知道要检查的应用程序 - 插件不应该事先知道,否则这是微不足道的。
猜你喜欢
  • 2011-09-27
  • 2017-05-13
  • 2017-05-25
  • 2017-11-13
  • 1970-01-01
  • 1970-01-01
  • 2020-04-01
  • 1970-01-01
  • 2017-12-24
相关资源
最近更新 更多