以模块化方式包含Django项目中应用程序的css,js,html

时间:2014-08-08 20:21:15

标签: django django-templates django-views

我有几个应用程序的django项目。在我的主要html模板中,我包含相关资源 - 在这种情况下为js,css,这些条目是手工编码的,如下所示:

<script src="{% static 'js/test.js' %}"></script>

我想模块化这样,以便我可以以某种方式循环我的项目,只有在安装/启用它们时才包含它们的依赖项。通过这种方式,我还可以在将来添加更多应用,而不必触摸我的主模板。

有没有一种优雅的方法来实现这个目标?

我的想法是,如果我可以通过views.py将每个应用程序所需的资源作为参数传递给主模板,那么也许我可以循环它们(利用sekizai ......):

{# Include external app resources #}
{% for app, template in installed_apps.items %}
    {% include template %}
{% endfor %}

而views.py会像:

external_apps = [foo, bar]
external_apps = settings.EXTERNAL_APPS # Ok, this should exist in settings already
def main(request):
    installed_apps = {}
    for app in external_apps:
        installed_apps[app] = app + "_template.html"

    template = loader.get_template('main_template.html')
    context = RequestContext(request, {
        'installed_apps': installed_apps,
        })
    return HttpResponse(template.render(context))

然后,对于每个应用程序,我将创建一个模板,用于填写主模板文件中的必要块。

这种方法似乎非常严格,我想知道是否有更常见或标准化的方法来解决这个问题。

1 个答案:

答案 0 :(得分:0)

base.html文件:

...
<script src="{% static 'js/test.js' %}"></script>
{% block extra_js %}{% endblock extrajs %}
...

在您的应用模板中:

{% block extra_js %}<script src="{% static 'js/myapp.js' %}"></script>{% endblock extra_js %}