2014-10-07 2 views
3

Я пытаюсь поместить OSM-карту, аналогичную той, что находится в geodjango-admin, в форму на моем основном сайте.Django floppyforms OSMPointWidget не отображает карту

Я решил использовать floppyforms, установить все, как в documentation, и, похоже, он распознается, но, как ни странно, карта не появляется. Firebug показывает, что вместо карты есть только пустой <div id="id_coord_map"></div>, но он имеет все правильные размеры. Отладка-текстовое поле и «Удалить все функции» -link есть, как и должно быть. Но когда я открываю сайт, Firebug не показывает никаких javascript-запросов на вкладке «network», поэтому, возможно, это намек.

Наверное, я что-то пропустил или что-то не так правильно включил, но я пробовал часами и больше не знаю. Среди прочего я задал все пути для статических файлов и запустил 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> 

ответ

2

Я только что был подобный вопрос и понял, что мне нужно, чтобы включить {{}} form.media тег в заголовке, а затем Джанго-floppyforms поставляет соответствующие файлы javascript, чтобы сделать карту волшебным образом.

Где-то в голове из base.html включают в себя блок для дополнительной JavaScript

{% block extra_js %}{% endblock %} 

Затем заполнить блок в вашем location_form.html

{% block extra_js %} 
{{ form.media }} 
{% endblock %} 
Смежные вопросы