我目前正在开发一个应用程序,我想在其中自动将经纬度坐标插入到用户表单中。我在这里找到了一篇文章,它的目标几乎完全是我试图完成的geocoding an IP and save using model forms,但我似乎在这个过程中犯了一个错误。我安装了GeoIP来跟踪用户的IP和lat,lon。在
以下是视图代码:
@login_required
def submit_story(request):
if request.method =="POST":
story_form = StoryForm(request.POST, request.FILES)
if story_form.is_valid():
new_story = story_form.save(ip_address=request.META['REMOTE_ADDR'])
new_story.author = request.user
new_story.save()
return HttpResponseRedirect("/report/all/")
else: # GET request
story_form = StoryForm()
return render_to_response("report/report.html", {'form': story_form}, context_instance=RequestContext(request))
这就是我认为问题所在的形式:
^{pr2}$这是回溯:
Environment:
Request Method: POST
Request URL: http://localhost:8000/report/report/
Django Version: 1.3.1
Python Version: 2.7.1
Installed Applications:
['django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'registration',
'profiles',
'django.contrib.messages',
'django.contrib.staticfiles',
'stentorian.report',
'south',
'sorl.thumbnail',
'gmapi',
'django.contrib.admin']
Installed Middleware:
('django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware')
Traceback:
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site- packages/django/core/handlers/base.py" in get_response
111. response = callback(request, *callback_args, **callback_kwargs)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/contrib/auth/decorators.py" in _wrapped_view
23. return view_func(request, *args, **kwargs)
File "/Users/myname/Development/stentorian/../stentorian/report/views.py" in submit_story
30. new_story = story_form.save(ip_address=request.META['REMOTE_ADDR'])
File "/Users/myname/Development/stentorian/../stentorian/report/forms.py" in save
16. lat, lon = g.lat_lon(ip_address)
Exception Type: TypeError at /report/report/
Exception Value: 'NoneType' object is not iterable
这是我第一次涉足地理定位,也是第一个Django项目,所以我确信错误很简单(也许我需要拆分元组,不确定)。在
这个
是导致异常的原因,因为g.lat_lon()返回None,因此它的结果 无法解压为
lat
和lon
。在{like}例如,{cd3}应该返回。在
这意味着您正在向
g.lat_lon()
传递一个无效参数,或者 因为其他原因它不能解决纬度/经度。在更新:
^{pr2}$我想你是在本地工作站上运行的,在这种情况下
request.META['REMOTE_ADDR']
的值是"127.0.0.1"
,显然 不是g.lat_lon()
能解决的问题。在开发时设置.调试==正确。所以你可以做下面的事
嗯。。。只是为了确定。。。你粘贴的代码中没有明显的缩进错误吗? 你的错误到底说明了什么?在
编辑:我认为您的错误可能在于您是按名称传递ip地址,而您将其定义为save()方法的位置参数。这看起来也发生在你联系的另一个答案里,顺便说一句。。。:)
尝试更改代码中的以下行:
def save(self, ip_address, *args, **kwargs)
通过这个:
def save(self, ip_address=None, *args, **kwargs)
相关问题 更多 >
编程相关推荐