如何在Django模板过滤器中使用Sekizai javascript块?

如何在Django模板过滤器中使用Sekizai javascript块?,javascript,django,django-sekizai,Javascript,Django,Django Sekizai,我正在编写Django模板过滤器。我想插入一些javascript。简而言之:有没有一种方法可以添加到这个过滤器中的Sekizai“js”块中,但让它在页面模板上定义的“js”块中呈现 为了让我的问题更清楚,下面的过滤器做了我想要的,但是没有Sekizai:(为了简单起见,省略了自动转义) 其中mytemplate.html包含一些javascript,例如: <canvas id="xyz" width="200" height="200"></canvas> <

我正在编写Django模板过滤器。我想插入一些javascript。简而言之:有没有一种方法可以添加到这个过滤器中的Sekizai“js”块中,但让它在页面模板上定义的“js”块中呈现

为了让我的问题更清楚,下面的过滤器做了我想要的,但是没有Sekizai:(为了简单起见,省略了自动转义)

其中
mytemplate.html
包含一些javascript,例如:

<canvas id="xyz" width="200" height="200"></canvas>
<script>
function drawCircle(context, radius, centerX, centerY, color) {
    context.beginPath();
    context.arc(centerX, centerY, radius, 0, 2 * Math.PI);
    context.fillStyle = color;
    context.fill();
}
var canvas = document.getElementById('xyz');
var context = canvas.getContext('2d');
drawCircle(context,50,100,100,"blue");
</script>
(使用Sekizai还需要更改过滤器:

from sekizai.context import SekizaiContext
...
    return myhtml.render(SekizaiContext(context))
)

但这不起作用,因为模板过滤器没有“js”块,所以javascript永远不会呈现。但是,在大图中有一个“js”块,例如,从如下所示的模板调用过滤器:

{% load sekizai_tags %}
<head>...</head>
<body>
     {{ info|myfilter }}
     {% render_block "js" %}
</body>
{%load sekizai_tags%}
...
{{info | myfilter}}
{%render_块“js”%}
所以。。。有办法解决这个问题吗?我可以添加到模板过滤器中的Sekizai块,并在页面模板上呈现它吗


谢谢

Django模板过滤器不继承全局模板上下文,但可以继承全局模板上下文(如果在
inclusion\u标记中设置
takes\u context=True


我建议您重构代码,使用包含标记而不是过滤器,在这种情况下,sekizai块可能会工作。

我查看了sekizai,发现它有点缺乏,原因几乎相同。我最终制作了与模板标记对应的JS文件,并使用CoffeeScript将它们收集到一个站点范围的JS文件中。我知道vanilla JS也有类似的工具。随着我的项目的发展,我可能需要使用更复杂的东西,比如django压缩机,但现在,我不能抱怨。谢谢。我还没有机会尝试这个,但是当我尝试的时候,我会让你知道它是如何进行的。
from sekizai.context import SekizaiContext
...
    return myhtml.render(SekizaiContext(context))
{% load sekizai_tags %}
<head>...</head>
<body>
     {{ info|myfilter }}
     {% render_block "js" %}
</body>