gpt4 book ai didi

python - 如何覆盖 django.contrib.gis

转载 作者:行者123 更新时间:2023-12-05 08:00:15 25 4
gpt4 key购买 nike

我修改了一些代码在../contrib/gis/admin/options.py以及 ../contrib/gis/templates/admin 中的 openlayers.js 文件。

它像这样工作得很好,但我不能让它们那样,因为它们将在 django 更新的情况下被替换!所以我想在我的项目中复制这些文件,并将原始文件留在/django/contrib...

我们将不胜感激。

最佳答案

这是一个示例,我们要更改管理区域中使用的默认 map 层。默认的 OSMWidget 使用模板 django/contrib/gis/templates/gis/openlayers.html,因为它的属性 template_name 设置为 gis/openlayers-osm.html。它看起来像这样:

{% extends "gis/openlayers.html" %}
{% load l10n %}

{% block options %}{{ block.super }}
options['default_lon'] = {{ default_lon|unlocalize }};
options['default_lat'] = {{ default_lat|unlocalize }};
options['default_zoom'] = {{ default_zoom|unlocalize }};
{% endblock %}

{% block base_layer %}
var base_layer = new ol.layer.Tile({source: new ol.source.OSM()});
{% endblock %}

我们想在这里更改 base_layer 变量。不要直接修改这个模板,而是覆盖它!在项目的模板目录中创建一个模板文件,例如 gis/custom_layers.html ;并使用您想要的任何图 block 修改 base_layer:

{% extends "gis/openlayers-osm.html" %}
{% load l10n %}

{% block base_layer %}
var base_layer = new ol.layer.Tile({
source: new ol.source.XYZ({
attributions: '<a href="https://www.thunderforest.com/">Thunderforest</a>',
url: "https://tile.thunderforest.com/cycle/{z}/{x}/{y}.png?apikey=<your API key>"
})
});
{% endblock %}

然后在 admin.py 中,您可以继承 OSMWidget 并指定自定义模板。在 Django 4.0 中使用 GISModelAdminadmin.py 可能如下所示:

from django.contrib.gis import admin
from django.contrib.gis.forms.widgets import OSMWidget
from .models import MyModel

class CustomGeoWidget(OSMWidget):
template_name = 'gis/custom_layers.html'

class CustomGeoModelAdmin(admin.GISModelAdmin):
gis_widget = CustomGeoWidget
gis_widget_kwargs = {
'attrs': {
'default_zoom': 14,
'default_lon': 3.4825,
'default_lat': 50.1906,
},
}

@admin.register(MyModel)
class MyModelAdmin(CustomGeoModelAdmin):
pass

关于python - 如何覆盖 django.contrib.gis,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18659912/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com