Python类重写

2024-10-01 00:33:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图覆盖Django OpenLayersWidget中的Media类

这是我的代码:

class OpenLayersWidgetHttps(OpenLayersWidget):
    class Media:
        js = (
            'https://cdnjs.cloudflare.com/ajax/libs/openlayers/2.13.1/OpenLayers.js',
            'gis/js/OLMapWidget.js',
        )

但是,当我尝试:

^{pr2}$

我得到:

^{3}$

不知何故,'http://openlayers.org/api/2.13/OpenLayers.js'的默认媒体条目被保留了。在

为什么不能正确重写js的值?

以下是Django源代码中OpenLayerWidget的定义:

class OpenLayersWidget(BaseGeometryWidget):
    template_name = 'gis/openlayers.html'

    class Media:
        js = (
            'http://openlayers.org/api/2.13.1/OpenLayers.js',
            'gis/js/OLMapWidget.js',
        )

Tags: django代码httpsorgapihttpjsmedia
2条回答

Django documentation上写着:

By default, any object using a static Media definition will inherit all the assets associated with the parent widget. This occurs regardless of how the parent defines its own requirements. For example, if we were to extend our basic Calendar widget from the example above:

您可以在媒体类中设置extend = False,以生成不带继承值的media变量。在

class OpenLayersWidgetHttps(OpenLayersWidget):
    class Media:
        extend = False
        js = (
            'https://cdnjs.cloudflare.com/ajax/libs/openlayers/2.13.1/OpenLayers.js',
            'gis/js/OLMapWidget.js',
        )

以下是获取媒体属性的_media(self)的定义:

def _media(self):
    # Get the media property of the superclass, if it exists
    sup_cls = super(cls, self)
    try:
        base = sup_cls.media
    except AttributeError:
        base = Media()

    # Get the media definition for this class
    definition = getattr(cls, 'Media', None)
    if definition:
        extend = getattr(definition, 'extend', True)
        if extend:
            if extend is True:
                m = base
            else:
                m = Media()
                for medium in extend:
                    m = m + base[medium]
            return m + Media(definition)
        else:
            return Media(definition)
    else:
        return base

基本上,当您调用[your class].media时,超类条目的列表会添加到结果列表中。换句话说,它在做它应该做的。在

相关问题 更多 >