python - Django : How to handle css/js specific to a template tag?

标签 python django django-templates

背景:

我有一个仅由 Google map 模板标记使用的 cssjs,我将其包含在需要的模板中。

Inside template tag google_map:
...
...
return render_to_string('google_map.html', context)

google_map.html 中,我有所需的 cssjs :

<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/

相关文章:

django - django 模板中的 {{}} 和 {% %} 有什么区别

django - 基于django类的 View 中模板的命名规则是什么

python - PyQt:如何在选择项目时保持 ComboBox 打开

python - 为什么当 fork() 的父进程在 fork 之前将其放入队列时,multiprocessing.Queue 会卡住?

python - Django 1.1.1 : How should I store an empty IP address using PostgreSQL?

python - 为 django 模型编写测试用例

Django Apache wsgi virtualenv 导入错误

python - 在 Django 模板中循环

python - 使用自动指定的模拟跟踪调用顺序

python - 如何在 django 中模拟用户和请求