背景:
我有一个仅由 Google map 模板标记使用的 css
和 js
,我将其包含在需要的模板中。
Inside template tag google_map:
...
...
return render_to_string('google_map.html', context)
在 google_map.html
中,我有所需的 css
和 js
:
<link rel="stylesheet" type="text/css" href="mystyle.css" />
我的问题是:
我有一个包含 3 个 map 的页面,因此对模板标记进行了 3 次调用。这意味着 css 和 js 在同一页面中包含了 3 次。 [不应该发生]
现在,我不能在页面标题中包含这些 css 和 js,因为所有页面都没有 map ,所以在所有这些页面上这将是一种负担。
我应该怎么做,以便如果一个页面有 3 个或更多 map ,即使这样,也只有一次包含 css 和 js 并且不重复?
最佳答案
我建议遵循 Paul Irish 为 Markup-based unobtrusive comprehensive DOM-ready execution 引入的模式。该方法有许多附带好处,例如封装、命名空间等,但对您来说主要的好处是基于 <body>
上的 id 或类有条件执行 JavaScript。 .
因此,在您的基本模板中更改您的 <body>
标记为如下内容:
<body class="{% block body_class %}{% endblock %}">
然后,对于需要 map 的模板,只需执行以下操作:
{% block body_class %}{% if block.super %}{{ block.super }} {% endif %}maps{% endblock %}
这看起来有点复杂,但它所做的只是继承为该 block 设置的任何父模板的值。 if
block 用于有条件地包含多个类之间所需的空间。
最后,在 JavaScript 中,您只需按照本文所述创建一个“ map ”模块,并将所有特定于 map 的 JS 放在那里即可。
关于python - Django : How to handle css/js specific to a template tag?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9065406/