Python OpenLayerWidget&;Django管理员通过Https映射
我还是Django/Python的新手,对于这个基本问题,我深表歉意 我遇到了一个问题,地图没有显示在我的Django管理员中。我希望通过将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
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
介质的名称