2

「 views.py without functions.py」の例を使用すると、正常に動作し、セッションが正常にチェックされているため、ユーザー名が返されます。

しかし、2番目の例をfunctions.pyで使用すると、次のエラーが表示されます

/login/ での NameError

グローバル名 'request' が定義されていません

functions.py なしの views.py

def main(request):
    c = {}
    c.update(csrf(request))

    if request.session.get('username'):
        susername = request.session['username']
    else:
        susername = ""

    return render_to_response("login/login.html",{'username': susername},context_instance=RequestContext(request))

functions.py を使用した views.py

def main(request):
    c = {}
    c.update(csrf(request))

    susername = loggedin()


    return render_to_response("login/login.html",{'username': susername},context_instance=RequestContext(request))

関数.py

from django.template import RequestContext

def loggedin():
    if request.session.get('username'):
        susername = request.session['username']
    else:
        susername = ""

    return susername

2番目のものが機能しないのはなぜですか?どうすれば解決できますか?

ありがとう

4

2 に答える 2

4

あなたが書いているのはテンプレート コンテキスト プロセッサであり、次のように書く必要があります。

def loggedin(request):
    return {'username': request.session.get('username','')}

ファイルに保存し、行の後に追加しTEMPLATE_CONTEXT_PROCESSORSます。settings.py'django.core.context_processors.request',

ファイルに という名前を付けた場合は、タプルsomeapp/processors.pyに追加します。'somapp.processors.loggedin',

次に、のインスタンスを返す限り、テンプレートに含まれますRequestContext{{ username }}

于 2013-06-23T10:48:51.733 に答える
2

考えてみてください。リクエストは引数として渡されないため、関数のスコープでは不明loggedin()です。

次のようにリクエストを渡すだけです

susername = loggedin(request)

または、この場合は、チェックする必要があるものを渡すだけです。

susername = loggedin(request.session)

そして、関数を次のように変更します

def loggedin(session):
    return session['username'] if session.get('username') else ''
于 2013-06-23T10:37:16.703 に答える