OpenLayerWidget和Django管理映射通过Https

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

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

我仍然是Django/Python的新手用户,所以对这个基本问题表示歉意。在

我遇到了一个问题,地图没有显示在我的Django管理员中。我希望通过将OpenLayersWidget类添加到我的forms.py项目文件中来解决这个问题,该文件在Django文档中引用:https://docs.djangoproject.com/en/1.9/ref/contrib/gis/forms-api/#django.contrib.gis.widgets.OpenLayersWidget。见下文。在

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上不起作用。有什么想法吗?在


Tags: 文件djangofromhttpsimportcomjsforms
2条回答

试试这个:

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'

从这里继承

更新

Django 1.11起,https cloudflare url已成为默认值。所以修补不应该再需要了。在

您需要重写表单Widget。示例:

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
    }

更改管理类

^{pr2}$

模型示例

class Position(models.Model):
    point = models.PointField(blank=False)

代码覆盖字段将小部件形成新的媒体iten。这将删除媒体的http内容http://openlayers.org/api/2.13.1/OpenLayers.js。在

相关问题 更多 >