3

我正在尝试将类似于 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>
4

1 回答 1

2

我刚刚遇到了类似的问题,并意识到我需要在标题中包含一个 {{ form.media }} 标记,然后 django-floppyforms 提供相关的 javascript 文件以使地图神奇地出现。

在 base.html头部的某个地方包含一个用于额外 javascript 的块

{% block extra_js %}{% endblock %}

然后在你的 location_form.html 中填写块

{% block extra_js %}
{{ form.media }}
{% endblock %}
于 2014-12-09T06:30:57.633 回答