我正在使用 django 组件。公共部分继承自父类,子类注册为组件。写法如下
组件.py
from django_components import component
class Parent(component.Component):
def get_context_data(self, data):
return {
"data": data,
}
@component.register("aaa")
class ChildA(Parent):
template_name = "/aaa.html"
class Media:
css = ["css/my.css", "css/test/aaa.css"]
js = "js/common.js"
@component.register("bbb")
class ChildB(Parent):
template_name = "/bbb.html"
class Media:
css = ["css/my.css", "css/test/bbb.css"]
js = "js/common.js"
在模板中调用aaa组件时,只想调用ChildA类关联的Media(css,js)
xxx.html
{% component "aaa" data=""%}
但是,当我们查看展开后的HTML时,连ChildB的Media都被调用了,如下所示
扩展的最终 HTML
<script src="js/common.js" ></script>
<script src="js/common.js" ></script>
<link href="css/my.css" media="all" rel="stylesheet">
<link href="css/test/aaa.css" media="all" rel="stylesheet">
<link href="css/my.css" media="all" rel="stylesheet">
<link href="css/test/bbb.css" media="all" rel="stylesheet">
我应该怎么做才能避免调用具有相同父类的另一个类的组件的媒体?
我们已经确认,当ChildB js指定为空时,common.js只会被调用一次
@component.register("bbb")
class ChildB(Parent):
template_name = "/bbb.html"
class Media:
css = ["css/my.css", "css/test/bbb.css"]
js = ""
您可以在中间件中使用
django_components.middleware.ComponentDependencyMiddleware
来更改此行为。
这还没有记录,但您可以在这里阅读更多相关信息:https://github.com/EmilStenstrom/django-components/issues/71