我正在创建一个json数据的可视化,由用户从下拉框中选择。下拉框由app / static / Crews文件夹中的json文件名填充。 javascript d3代码调用一个使用所选json文件的函数
d3.json("/data", function(error, graph)
这是我用来填充下拉框的代码,
class userInput(Form):
json_fileCrew = SelectField(u"Filename", choices=[(f, f) for f in filenamesCrew])
这是我获取json文件的函数。
def get_data(json_fileCrew):
json = send_from_directory ("/myproject/app/static/Crews" , json_fileCrew)
return json
我使用
在views.py中调用它@app.route("/data", methods=['GET'])
def data():
u = userInput()
json = u.get_data()
return json
我收到此错误
json = u.get_data()
File "\project\myproject\forms.py", line 34,
in get_data
json = send_from_directory ("/myproject/app/static/Crews" , json_fileCrew)
File "C:\Python34\lib\site-packages\flask\helpers.py", line 612, in send_from_
directory
filename = safe_join(directory, filename)
File "C:\Python34\lib\site-packages\flask\helpers.py", line 574, in safe_join
filename = posixpath.normpath(filename)
File "C:\Python34\lib\posixpath.py", line 335, in normpath
initial_slashes = path.startswith(sep)
AttributeError: 'userInput' object has no attribute 'startswith'
我不明白为什么我收到这个错误。我想查看该文件夹并返回与用户选择的名称相同的json文件(例如1981.json)。
编辑以下是userInput类的完整代码
class userInput(Form):
json_fileCrew = SelectField(u"Filename", choices=[(f, f) for f in filenamesCrew])
def get_data(json_fileCrew):
json = send_from_directory ("/myproject/app/static/Crews",json_fileCrew)
return json
我也尝试了下面的代码,但它没有用。
if os.path.isfile(os.path.join(crewPath, json_fileCrew)):
return send_from_directory(crewPath, json_fileCrew)
答案 0 :(得分:0)
get_data
方法是......一种方法。所以它获得的第一个arg是self,即使你调用arg“json_fileCrew”。您希望该方法可以访问SelectField
的表单值。您可以使用self.json_fileCrew.data
。
class UserInput(Form):
filename = SelectField(choices=[(f, f) for f in crew_files])
def get_data(self):
return send_from_directory(crew_path, self.filename.data)
表单不接收json数据,get_data
不返回json数据,所以不清楚为什么你这样命名它们。
您正在使用一些非常规变量名称。有关大多数Python程序员所期望的标准格式,请参阅PEP 8。