2016-07-19 7 views
0

Ich habe eine Flask-Anwendung, wo Benutzer nach einem Raum in einer Stadt suchen können, indem Sie den Cityname eingeben.Flask Google Maps Infobox mit mehreren Markerbildern führt zu falschen Informationen

Wenn ein Cityname eingegeben wird, wird der Benutzer zu einer Ergebnisseite umgeleitet, wo ich Flasch Google Maps verwende, um verfügbare Räume auf der Karte mit Markern anzuzeigen.

Ich habe zwei verschiedene Markierungsbilder (für die Nutzer kostenlos und für Benutzer, die gegen Entgelt):

mymap.markers['static/img/Map-Marker-Marker-Outside-small.png'] = markerlist 
mymap.markers['static/img/Map-Marker-Marker-Outside-Pink.png'] = markerlist_bezahlt 

ich bevölkern die Markierungen mit einer Liste, in der alle anderen Informationen gespeichert sind, F. E. das Zimmer und das Zimmer Bild, plus es ist anklickbar und leitet auf Klick auf die Detailseite um.

ich hier die ganze Methode, die die Karte und die Markierungen je nachdem, ob Benutzer oder hat bezahlt erstellt ist kostenlos (findroomcity ist der Städtename, die ein suchender Anwender eingegeben hat):

location = geolocator.geocode(findroomcity) 

    if location.latitude is not None: 
     mymap = Map(
     identifier="view-side", 
     lat=location.latitude, 
     lng=location.longitude, 
     infobox=[], 
     markers=[], 
     zoom = 12 
     ) 
    else: 
     print "location is none" 


    all_users = User.query.order_by(desc('bezahlt')).all() 


    markerlist = [] 
    markerlist_bezahlt = [] 


    for room in all_rooms_in_city: 
     if room.stadt == findroomcity.lower(): 
      try: 
       location2 = geolocator.geocode(room.stadt + " " + room.strasse + " " + room.hausnr, timeout=2) 
       for user in all_users: 
        if user.id == room.users_id: 
         if user.bezahlt == False: 
          markerlist.append((location2.latitude, location2.longitude)) 
          mymap.infobox.append(r'''<a href='/details/''' + str(room.id) + "'>" + r'''<img class='marker-img' src='../static/userimg/''' + room.hauptbild + "'/>") 
         else: 
          markerlist_bezahlt.append((location2.latitude, location2.longitude)) 
          mymap.infobox.append(r'''<a href='/details/''' + str(room.id) + "'>" + r'''<img class='marker-img' src='../static/userimg/''' + room.hauptbild + "'/>") 

      except GeocoderTimedOut as e: 
       print "in der schleife timeout", e 
      except AttributeError as e: 
       print "in der schleife attributeerror", e 

    mymap.markers['static/img/Map-Marker-Marker-Outside-small.png'] = markerlist 
    mymap.markers['static/img/Map-Marker-Marker-Outside-Pink.png'] = markerlist_bezahlt 

Das Problem ist, dass Einige Marker haben falsche Informationen gespeichert. Ich schätze, weil ich mich in zwei Marker teile.

Hier ist ein Beispiel aus von Heroku: Heroku for testing

Suche nach „Dortmund“ und überprüfen Sie die beiden kleinen blauen Markierungen (diese sind beide „FREEUSERZIMMER“), aber einer von ihnen ein bezahlten Zimmer

Antwort

0

zeigt Dies ist nur eine Vermutung - aber wenn ich den Quellcode der Suchseite mit den Markierungen ansehe, kann ich Duplikate von var marker_0 und anderen sehen. Ich nehme an, Sie durchlaufen die markerlist von einem Null-Index, dann die markerlist_bezahlt Basis ihrer marker_x Namen von ihrem Index Speicherort, so dass die zweite Liste überschreibt die Daten für die ersten Marker.

+0

Ja genau das passiert, ich habe jetzt ein besseres Verständnis, eigentlich sind beide falsch. Aber wie kann man das verhindern? Infobox sollte für zwei verschiedene Marker funktionieren oder? – Roman