私は、ユーザーの場所を格納するIPアドレスAPIも実装している基本的なブログを構築しています。私はthis websiteのAPIを使用して、ユーザーの緯度と経度を取得しました。私は管理者ページに移動する場合(一部の属性のみが存在する場合のGQLQueryオブジェクトの反復方法
IP_URL = 'http://ip-api.com/xml/'
def get_coords(ip):
ip = '4.2.2.2'
url = IP_URL + ip
content = None
try:
content = urllib2.urlopen(url).read()
except urllib2.URLError:
return
if content:
# parse the XML and find the coordinates
dom = minidom.parseString(content)
status = dom.getElementsByTagName("status")[0].childNodes[0].nodeValue
if status == 'success':
lonNode = dom.getElementsByTagName('lon')[0]
latNode = dom.getElementsByTagName('lat')[0]
if lonNode and latNode and lonNode.childNodes[0].nodeValue and latNode.childNodes[0].nodeValue:
lon = lonNode.childNodes[0].nodeValue
lat = latNode.childNodes[0].nodeValue
return db.GeoPt(lat, lon)
-
class Entries(db.Model):
title = db.StringProperty(required = True)
body = db.TextProperty(required = True)
created = db.DateTimeProperty(auto_now_add = True)
coords = db.GeoPtProperty()
これはcoords
性で緯度と経度を格納する機能である - これは、各エントリを格納するために使用されるEntries
クラスでありますlocalhost:8000
)、一部のエントリにはcoords
というプロパティが含まれていますが、一部のエントリにはないことがわかります。 (正確には、私は私が私のlocalhost
アドレスに渡されていたので、1は4.2.2.2
の座標を持ち、もう一方がNone
を持って、coords
欄には何もありません6そのうち、現在8つのエントリを持っています。)
私が持っています
class MainPage(webapp2.RequestHandler):
def get(self):
# self.response.write(self.request.remote_addr)
# self.response.write(repr(get_coords(self.request.remote_addr)))
entries = db.GqlQuery('select * from Entries order by created desc limit 10')
# find which entries have coordinates
points = []
for e in entries:
if entries.coords:
points.append(a.coords)
self.response.write(repr(points))
self.response.write(render_str('mainpage.html', entries=entries))
私はプリントアウトしようとした - 私は、ブログ内のすべてのエントリを一覧表示し、それは私が実際にページ上に表示されるように、データベースに保存されているすべての座標を取得できるかどうかを確認しようとしたことを、ここでのメインページプロパティー自体 - self.response.write(repr(get_coords(self.request.remote_addr)))
であり、datastore_types.GeoPt(40.7128, -74.0059)
を示しています。したがって、プロパティはDatastoreに保存されているようです。
私が持っている問題は、インタプリタがループのためAttributeError
を投げることですget
MainPage()
の - 私はいくつかのエントリが最初でcoords
の属性を持っていないので、これはかもしれないと思う
AttributeError: 'GqlQuery' object has no attribute 'coords'
場所。しかし、もしそうなら、それの周りには何か方法がありますか?
もし私がこれを使っているのであれば、私はSteve HuffmanのUdacityのWeb Developmentコースでこれをやっています。彼はユーザー座標を保存して表示するこの方法を示しました。彼はcoords
プロパティにはrequired=True
を使用しないように指示しました。既存のエントリにはそのプロパティがないからです。彼がブログのエントリをループしたとき、すべてがうまく見え、すべての座標はlist
と表示されました。
これは誤字によって引き起こされたため、この質問も削除する可能性があります。 –