我正在尝试将类似于 geodjango-admin 中的 OSM 地图放入我的主站点上的表单中。
我决定使用 floppyforms,按照文档中的方式设置所有内容,并且似乎可以识别,但奇怪的是地图没有出现。Firebug 显示只有一个空白<div id="id_coord_map"></div>
而不是地图,但它具有所有正确的尺寸。调试文本框和“删除所有功能”链接就像它们应该存在的那样。但是,当我打开站点时,Firebug 没有在“网络”选项卡中显示任何 javascript 请求,所以这可能是一个提示。
我想我错过了一些东西或没有正确包含的东西,但我尝试了几个小时,真的不知道了。除其他事项外,我设置了静态文件的所有路径并运行manage.py collectstatic
,我还尝试不使用通用编辑视图,但结果相同。
以下是代码中的相关部分:
#views.py
import floppyforms as forms
...
class OSMPointWidget(forms.gis.PointWidget, forms.gis.BaseOsmWidget):
pass
class LocationCreateView(CreateView):
model = Location
fields = ['name', 'zip', 'coord']
form_class = modelform_factory(Location,
widgets={"coord": forms.gis.PointWidget(attrs = {
'display_wkt': True,
'map_srid': 4326,
'map_width': 700,
'map_height': 500,})})
#models.py
class Location(models.Model):
name = models.CharField(max_length=200)
slug = models.SlugField(max_length=255, blank=True, default='', unique=True)
coord = models.PointField()
zip = models.CharField(max_length=5, default='12345')
objects = models.GeoManager()
def __unicode__(self):
return self.name
def save(self, *args, **kwargs):
if not self.slug:
self.slug = slugify(self.name)
super(Location, self).save(*args, **kwargs)
#urls.py
urlpatterns = patterns('',
...
url(r"location/$", views.LocationCreateView.as_view(),
name = "locationcreate"),
...
)
#location_form.html
{% extends "_layouts/base.html" %}
{% block page_title %}Enter Location | {% endblock %}
{% block page_content %}
<form action="" method="post">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Submit" />
</form>
{% endblock %}
#base.html
<!doctype html>
<html>
<head>
<title>{% block page_title %}{% endblock %}Calendar</title>
<link rel="stylesheet" href="{{ STATIC_URL }}css/bootstrap.css">
<link rel="stylesheet" href="{{ STATIC_URL }}css/bootstrap-theme.css" >
</head>
<body>
<div class="container theme-showcase" role="main">
<div class="jumbotron">
<h1>EVENTCALENDAR</h1>
</div>
<div class="container">
{% block page_content %}{% endblock %}
</div>
</div>
</body>
</html>