gpt4 book ai didi

python - Django 表单在控制台中验证,但为什么不在浏览器中验证?

转载 作者:太空宇宙 更新时间:2023-11-04 09:15:48 25 4
gpt4 key购买 nike

我想用 Django 1.3(使用 Python 2.7)测试 Google Maps Static API。为此,我创建了一个简单的表单来查询坐标(纬度和经度)、缩放级别和 map 大小。表单如下所示:

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)

在各自的 View 中,我想根据表单中给出的信息构建 URL,并将 URL 返回到一个模板,该模板应在同一模板中呈现 map 。

View :

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

但是当我在浏览器中输入相同的数据并按下提交按钮时,会重新加载相同的模板,但没有生成 map 。该表格似乎从未验证过。谁能告诉我为什么会这样?非常感谢!

最佳答案

您遇到的潜在问题是因为您决定通过直接 HTML 输出表单字段,以便添加 placeholder 属性,而这样做您错过了最重要的一点- name 属性。此外,如果表单验证失败,它们将不会重新显示现有值。

与其这样做,不如将占位符添加到表单字段本身:

latitude = forms.FloatField(required=True, min_value=-90.0, max_value=90.0,
widget=forms.TextInput(attrs={'placeholder': 'latitude'}))

并依靠 Django 来输出它们:

{% for field in form %}
{{ field }}
{% endfor %}

关于python - Django 表单在控制台中验证,但为什么不在浏览器中验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9536223/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com