在我的项目中,我需要根据几个参数不同地处理CSS需求。因此,与可用的静态管理系统相比,我需要一个额外的抽象级别。
在我的模板中,我希望能够使用看似{% register_css 'myfile.css' %}
的模板标记来注册CSS(和JS)要求。这种方法就像一个魅力。
但是,这种方法仍然存在一个问题:标签在插入块时工作得很好,但在插入子模板时从不被调用。标签定义是:
@register.simple_tag(takes_context = True)
def register_css(context, *args):
context['static_registry'].register_css(streamlet)
return ''
这是我的测试模板:
{% extends main_skelton %}
{% load static_registry %}
{% register_css 'base' %}
{% block title %}Welcome{% endblock %}
{% block content %}
{% register_css 'home' %}
<p>Some content here</p>
{% endblock %}
在该模板中,'home'css被注册,但不是'base'。我怎么能兼得?
谢谢!
答案 0 :(得分:3)
在基本模板中加入空{% block init %}
,然后在子模板中覆盖该块以注册文件 - {% block init %}{{ block.super }} {% register_css 'foo %}{% endblock %}
潜在的问题是,在子模板中,只会呈现与父模板中的某些内容匹配的块。 AFAIK没有简单的方法,但使用虚拟块可以正常工作。