在 django 组件中使用类继承时重复加载媒体(CSS,JS)

问题描述 投票:0回答:1

我正在使用 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 = ""
python django django-comments
1个回答
0
投票

您可以在中间件中使用

django_components.middleware.ComponentDependencyMiddleware
来更改此行为。

这还没有记录,但您可以在这里阅读更多相关信息:https://github.com/EmilStenstrom/django-components/issues/71

© www.soinside.com 2019 - 2024. All rights reserved.