2017-11-02 6 views
0

ブラウザでページを表示すると、次のエラーが発生します。pythonフラスコのグローバル変数は、それを使用する5つの関数のうち1つで使用する前に参照されていると主張しています

File "/home/jsnyder10/Documents/45/flask/lib/python2.7/site-packages/flask/app.py", line 1997, in __call__ 
    return self.wsgi_app(environ, start_response) 
File "/home/jsnyder10/Documents/45/flask/lib/python2.7/site-packages/flask/app.py", line 1985, in wsgi_app 
    response = self.handle_exception(e) 
File "/home/jsnyder10/Documents/45/flask/lib/python2.7/site-packages/flask/app.py", line 1540, in handle_exception 
    reraise(exc_type, exc_value, tb) 
File "/home/jsnyder10/Documents/45/flask/lib/python2.7/site-packages/flask/app.py", line 1982, in wsgi_app 
    response = self.full_dispatch_request() 
File "/home/jsnyder10/Documents/45/flask/lib/python2.7/site-packages/flask/app.py", line 1614, in full_dispatch_request 
    rv = self.handle_user_exception(e) 
File "/home/jsnyder10/Documents/45/flask/lib/python2.7/site-packages/flask/app.py", line 1517, in handle_user_exception 
    reraise(exc_type, exc_value, tb) 
File "/home/jsnyder10/Documents/45/flask/lib/python2.7/site-packages/flask/app.py", line 1612, in full_dispatch_request 
    rv = self.dispatch_request() 
File "/home/jsnyder10/Documents/45/flask/lib/python2.7/site-packages/flask/app.py", line 1598, in dispatch_request 
    return self.view_functions[rule.endpoint](**req.view_args) 
File "/home/jsnyder10/Documents/45/flask/lib/python2.7/site-packages/flask_login/utils.py", line 228, in decorated_view 
    return func(*args, **kwargs) 
File "/home/jsnyder10/Documents/jMessage/app/views.py", line 66, in admin_edit_groups 
    if not g.user.admin: 
UnboundLocalError: local variable 'g' referenced before assignment 

ここでは、Flaskをルーティングに使用している私のpythonコードです。最初の機能は完全に動作するすべての単一の管理ルートで使用したコードですが、何らかの理由でadmin_edit_groupsルートがこのエラーをスローします。何が欠けていますか?あなたは、あなたの関数の内部で別のgを使用している

from flask import render_template, flash, redirect, session, url_for, request, \ 
    g, jsonify, send_from_directory 

@app.route('/admin', methods=['GET', 'POST']) 
@login_required 
def admin(): 
    if not g.user.admin: 
     flash('Page unacessible.') 
     return redirect(url_for('index')) 
    return render_template('admin.html',title='Admin') 

@app.route('/admin_edit_groups', methods=['GET', 'POST']) 
@login_required 
def admin_edit_groups(): 
    if not g.user.admin: 
     flash('Page unacessible.') 
     return redirect(url_for('index')) 
    form = AddGroupForm() 
    if request.method == 'POST' and form.validate(): 
     if not Group.query.filter_by(name=form.groupname.data).count()>0: 
      g=Group(name=form.groupname.data) 
      db.session.add(g) 
      db.session.commit() 
      flash('Added Group name ' + form.groupname.data) 
     else: 
      flash('Group: ' + form.groupname.data + ' already exists.') 
    groups=Group.query.all() 
    return render_template('admin_edit_groups.html',title='Admin', form=form, groups=groups) 

答えて

2

、これはグローバルgが上書きされます。

+0

なぜコードに上記のように表示されてもグローバル変数を使用しないのですが、上記のコードは実行されず、変数が再割り当てされますか? – 0TTT0

+0

@ 0TTT0あなたが言ったように機能するなら、はるかにあいまいになります。コードがグローバルかローカルかを慎重に確認する必要があります。あなたが大きな機能を持っているなら、これは災害になります。 – Sraw

+0

構文解析の実際の仕組みを説明できますか? – 0TTT0

関連する問題