我使用的是django-components,公共部分继承自父类,子类注册为组件,编写如下
components.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">
如何避免调用具有相同父类的另一个类的组件的Media?
我们已经确认,当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 = ""
1条答案
按热度按时间bvjveswy1#
您可以通过在中间件中使用
django_components.middleware.ComponentDependencyMiddleware
来改变这种行为。这是尚未记录的,但你可以在这里阅读更多:https://github.com/EmilStenstrom/django-components/issues/71