Python OpenLayerWidget&;Django管理员通过Https映射

Python OpenLayerWidget&;Django管理员通过Https映射,python,django,django-admin,mapping,geodjango,Python,Django,Django Admin,Mapping,Geodjango,我还是Django/Python的新手,对于这个基本问题,我深表歉意 我遇到了一个问题,地图没有显示在我的Django管理员中。我希望通过将OpenLayersWidget类添加到我的forms.py项目文件中来解决这个问题,该文件在Django文档中引用:。见下文 from django import forms from django.contrib.gis.admin.widgets import OpenLayersWidget class OpenLayersWidget(forms

我还是Django/Python的新手,对于这个基本问题,我深表歉意

我遇到了一个问题,地图没有显示在我的Django管理员中。我希望通过将
OpenLayersWidget
类添加到我的
forms.py
项目文件中来解决这个问题,该文件在Django文档中引用:。见下文

from django import forms
from django.contrib.gis.admin.widgets import OpenLayersWidget

class OpenLayersWidget(forms.TextInput):
    """Specifying CDN of openlayers.js in the Media class."""

     class Media:
         js = (
             'https://cdnjs.cloudflare.com/ajax/libs/openlayers/2.13.1',
         )   
我相信这太简单了

不幸的是,上述内容在https上不起作用。有什么想法吗?

试试这个:

from django.contrib.gis import admin as gis_admin

class SecureOSM(gis_admin.OSMGeoAdmin):
    openlayers_url = 'https://cdnjs.cloudflare.com/ajax/libs/openlayers/2.13.1/OpenLayers.js'
那就从这里继承吧

更新


从开始,https cloudflare url已成为默认url。因此,不需要再进行修补。

您需要覆盖表单
小部件。例如:

from django.contrib import admin
from django.contrib.gis.db import models
from django.contrib.gis.forms.widgets import BaseGeometryWidget

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

    def __init__(self, attrs=None):
        super(CustomOpenLayersWidget, self).__init__(attrs)

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


class CustomModelAdmin(admin.ModelAdmin):
    """Need to change default URL of OpenLayers"""
    formfield_overrides = {
        models.PointField: {"widget": CustomOpenLayersWidget},
        models.PointField: {"widget": CustomOpenLayersWidget},
        models.PolygonField: {"widget": CustomOpenLayersWidget},
        models.LineStringField: {"widget": CustomOpenLayersWidget},

        # Adding other models Fields if need
    }
并更改管理类

@admin.register(Position)
class PositionAdmin(CustomModelAdmin):
    pass
模型实例

class Position(models.Model):
    point = models.PointField(blank=False)
代码覆盖字段将窗口小部件组成一个新的媒体文件。这将删除http内容
http://openlayers.org/api/2.13.1/OpenLayers.js
介质的名称