Google Maps Static APIをDjango 1.3(Python 2.7を使用)でテストしたいと思います。この目的のために、座標(緯度&経度)、ズームレベル、およびマップサイズを照会するための簡単なフォームを作成しました。フォームは次のようになります。それぞれのビューでDjangoフォームはコンソールで検証されますが、なぜブラウザにはありませんか?
from django import forms
class GoogleMapsStaticApiForm(forms.Form):
latitude = forms.FloatField(required=True, min_value=-90.0, max_value=90.0)
longitude = forms.FloatField(required=True, min_value=-180.0,max_value=180.0)
zoom_level = forms.IntegerField(required=True, min_value=0, max_value=21)
map_width = forms.IntegerField(required=True, min_value=0, max_value=640)
map_height = forms.IntegerField(required=True, min_value=0, max_value=640)
、私は形で与えられた情報からURLを構築し、同じテンプレートにマップをレンダリングする必要がありますテンプレートにURLを返すようにしたいです。
ビュー:
def map_properties(request):
map_url = 'http://maps.google.com/maps/api/staticmap?'
if request.method == 'POST':
form = GoogleMapsStaticApiForm(request.POST)
if form.is_valid():
center = 'center={0},{1}'.format(form.latitude, form.longitude)
zoom = 'zoom={0}'.format(form.zoom_level)
size = 'size={0}x{1}'.format(form.map_width, form.map_height)
url_suffix = '&'.join((center, zoom, size, 'sensor=false'))
map_url = ''.join((map_url, url_suffix))
else:
form = GoogleMapsStaticApiForm()
return render_to_response('frontend/frontend.html',
{'form':form, 'map_url':map_url},
context_instance=RequestContext(request))
テンプレート:
<html>
<head>
<title>Google Maps Static API - Demo</title>
</head>
<body>
<form method="post" accept-charset="UTF-8">
{% csrf_token %}
{% for field in form %}
<input type="text" placeholder={{ field.html_name }}>
{% endfor %}
<button type="submit">Show the fancy map!</button>
</form>
{% if form.is_valid %}
<p><img src="{{ map_url }}" alt="Google Maps Static Map"></p>
{% else %}
<p>Form is not valid</p>
{% endif %}
</body>
</html>
私はDjangoのコンソールの例のデータでフォームを検証しようとすると、それが正常に動作します:
>>> from frontend.forms import GoogleMapsStaticApiForm
>>> data = {'latitude':51.477222, 'longitude':0.0, 'zoom_level':12, 'map_width':400, 'map_height':400}
>>> f = GoogleMapsStaticApiForm(data)
>>> f.is_valid()
True
しかし、ブラウザに同じデータを入力して[送信]ボタンを押すと、同じテンプレートがリロードされますが、生成されたマップフォームは決して検証されないようです。誰が私にこの事件の理由を教えてもらえますか?どうもありがとうございました!
「フォームが無効です」と表示されるのではなく、「フォーム。エラー」を表示しないのはなぜですか?そして、それがなぜ有効でないのか分かります。 –
Daniel、私はそれを試みましたが、{{form.errors}}は常にすべてのフィールドが必要であることを示しています。フォームを送信すると、フィールドが必要なメッセージと同じメッセージが、まったく同じページに再ロードされます。 – pemistahl
さて、 'jpic'によると、各HTMLフィールドには' name'属性が必要です。 –