我正在开发气象应用程序。它将在json文件中提供城市列表。然后,用户可以搜索给定的城市,该应用程序将提供天气数据。
城市搜索功能“很好”。但正确的是,用户搜索了一个城市,而我只有它的名字。为了解析天气数据,我需要城市的ID。因此,我创建了两个列表,一个用于城市名称,一个用于城市ID。选择一个城市后,我要再次搜索城市,并记住该城市在列表中的位置。然后,我将使用该位置获取城市的ID。
from flask import Flask, flash, jsonify, redirect, render_template, request, session
import json
import string
app = Flask(__name__)
CITIES = []
ID = []
with open('cities_list/city.list.json') as f:
data = json.load(f)
for city in data['cities']:
CITIES.append(city['name'])
ID.append(city['id'])
@app.route('/city')
def city():
return render_template('city.html')
@app.route('/search', methods=['GET','POST'])
def search():
if request.method == "GET":
# Read cities.list.json file and display cities
cities = []
q = request.args.get('q')
for city in CITIES:
if q in city:
cities.append(city)
return render_template('search.html', cities=cities)
else:
inpt = request.form.get("city")
counter = 0
for city in CITIES:
counter = counter + 1
if input in city:
id = ID[i]
return render_template('index.html', id=id)
运行代码时,我收到错误消息:
if input in city:
TypeError:强制转换为Unicode:需要字符串或缓冲区,找到了builtin_function_or_method
我已经尝试将city变量转换为字符串。但是它说:
if input in city:
TypeError:强制转换为Unicode:需要字符串或缓冲区,找到了builtin_function_or_method
很高兴获得任何帮助! 谢谢您的支持!
答案 0 :(得分:1)
input
是builtin
函数。您的变量名为inpt
inpt = request.form.get("city")
counter = 0
for city in CITIES:
counter = counter + 1
if inpt in city:
id = ID[i]
return render_template('index.html', id=id)
通知if inpt in city
与if input in city