2017-01-20 7 views
-1

ユーザーが最近訪問したページのリストを作成しようとしていますが、私は​​を取得し続けています。 私は引数がどのように与えられているのか分かりません。セッションで最後に使用されたページのFlaskのリストTypeError

のPython /フラスココード:

app.secret_key = '/r/xd8}q/xde/x13/xe5F0/xe5/x8b/x96A64/xf2/xf8MK/xb1/xfdA7x8c' 

def recentsites(): 
    session['urls'] = [] 

@app.after_request 
def store_visited_urls(): 
    session['urls'].append(request.url) 
    if(len[session['urls']]) > 3: 
     session['urls'].pop(0) 
    session.modified = True 

@app.route('/') 
def index(): 
    data = [] 
    if 'urls' in session: 
     data = session['urls'] 
    return render_template('index.html', data=data) 
+0

Primer on Python Decoratorsを参照してください使用していることがわかりますが、 'store_visited_urlsを()'どのようなエラーがあなたの言っていることであるとどこか別の場所あなたのコードでは、どこかにあなたが呼び出していることを呼んでいます'store_visited_urls'に引数をつけて'store_visited_urls(引数)'? –

+0

いいえ、別の場所で呼び出されることはありません –

答えて

-1

私は関数として、それは自動的に引数として自己を含んでいると思います。この引数は、クラスを作成するときに呼び出しの一部としてインクルードされます。

定義をdef store_visited_urls(self):にしますが、引数なしで引き続き呼び出します。

外観からは、sessionがクラスに定義されている必要があります。したがって、self.sessionを参照すると、クラスのインスタンス化時に選択されます。

説明はWhat is the purpose of self?を参照してください。

私はあなたがデコレータはDecorators I: Introduction to Python DecoratorsA guide to Python's function decoratorsまたはPython Decoratorsまたは

+0

これはエラーを削除しました。ありがとうございます。もう1つ(おそらくばかげた)質問ですが、どうすればself.sessionを正確に参照できますか? –

+0

@NielsVanNimmenセッションがクラス内で定義されているか、グローバル変数として定義されているかによって異なります。サンプルの質問には、これを行う方法が示されています。セッションが絶対的なグローバルとして定義されている場合、それは必要ありません。クラス変数として定義されている場合、クラス関数内で 'self.session'として参照され、そのインスタンスに適用されます。現在、あなたのコードに' session'があります。 – sabbahillel

+0

もう一度ありがとうございます。これは問題を解決しました –

関連する問題