Django:如何处理特定于模板标签的css/js?

Yug*_*dle 2 python django django-templates

背景:

我有一个cssjs该仅由谷歌地图模板标签中使用,我包括我的模板在那里,曾经需要.

Inside template tag google_map:
...
...
return render_to_string('google_map.html', context)
Run Code Online (Sandbox Code Playgroud)

在里面,google_map.html我有必要的cssjs:

<link rel="stylesheet" type="text/css" href="mystyle.css" />
Run Code Online (Sandbox Code Playgroud)

我的问题是:

我有一个包含3个地图的页面,因此有3个调用模板标签.这意味着css和js在同一页面中包含3次.[不应该发生]

现在,我不能在页面的标题中包含这些css和js,因为所有页面都没有这样的地图,所有这些页面上都会成为负担.

我应该怎么做,这样如果一个页面有3个或更多的地图,那么只有一个包含css&js且不重复?

Chr*_*att 5

我建议遵循Paul Irish为基于Markup的不引人注目的全面DOM-ready执行引入的模式.这种方法有很多附带的好处,比如封装,命名空间等,但对你来说,主要的好处是基于id或类的条件执行JavaScript <body>.

因此,在您的基本模板中,将您的<body>代码更改为以下内容:

<body class="{% block body_class %}{% endblock %}">
Run Code Online (Sandbox Code Playgroud)

然后,对于需要地图的模板,只需:

{% block body_class %}{% if block.super %}{{ block.super }} {% endif %}maps{% endblock %}
Run Code Online (Sandbox Code Playgroud)

这看起来有点复杂,但它所做的只是从为该块设置的任何父模板的值继承.该if块用于有条件地包括多个类之间所需的空间.

最后,在您的JavaScript中,您只需为文章描述创建"地图"模块,并将所有特定于地图的JS放在那里.