我想做的只是显示来自一个API的firstevent。该变量称为“ firstevent”,其值应显示在网页上。但是firstevent在def内部,因此我将其更改为全局变量,希望可以在不同的函数中使用。但是它显示“ NameError:未定义全局名称’firstevent’”。这就是我在做什么:
定义一个全局变量
global firstevent
发送此变量一个随机值,应该是 events['items'][1]['end']
events['items'][1]['end']
firstevent = 1
在网站上显示firstevent的价值。
@app.route("/") def index(): return 'User %s' % firstevent
我不确定现在正在发生什么,也许这是范围问题?我已经在线检查了许多答案,但仍然找不到解决方案。
这是详细信息(不是整个代码)
import os # Retrieve Flask, our framework # request module gives access to incoming request data import argparse import httplib2 import os import sys import json from flask import Flask, request from apiclient import discovery from oauth2client import file from oauth2client import client from oauth2client import tools from apiclient.discovery import build from oauth2client.client import OAuth2WebServerFlow import httplib2 global firstevent app = Flask(__name__) def main(argv): # Parse the command-line flags. flags = parser.parse_args(argv[1:]) # If the credentials don't exist or are invalid run through the native client # flow. The Storage object will ensure that if successful the good # credentials will get written back to the file. storage = file.Storage('sample.dat') credentials = storage.get() if credentials is None or credentials.invalid: credentials = tools.run_flow(FLOW, storage, flags) # Create an httplib2.Http object to handle our HTTP requests and authorize it # with our good Credentials. http = httplib2.Http() http = credentials.authorize(http) # Construct the service object for the interacting with the Calendar API. calendar = discovery.build('calendar', 'v3', http=http) created_event = calendar.events().quickAdd(calendarId='XXXX@gmail.com', text='Appointment at Somewhere on June 3rd 10am-10:25am').execute() events = calendar.events().list(calendarId='XXXX@gmail.com').execute() #firstevent = events['items'][1]['end'] firstevent = 1 #print events['items'][1]['end'] # Main Page Route @app.route("/") def index(): return 'User %s' % firstevent # Second Page Route @app.route("/page2") def page2(): return """<html><body> <h2>Welcome to page 2</h2> <p>This is just amazing!</p> </body></html>""" # start the webserver if __name__ == "__main__": app.debug = True app.run()
是的,这是一个范围问题。在main()函数的开头,添加以下内容:
main()
那应该做。在函数内部未定义的任何变量都是全局变量。你可以从任何功能直接访问它。但是,要修改变量,你需要global var在函数中编写。
global var
例
这将在函数上创建局部变量“ firstevent”:
firstevent = 0 def modify(): firstevent = 1
这会修改全局变量“ firstevent”
firstevent = 0 def modify(): global firstevent firstevent = 1