2016-04-28 24 views
0

私はdjangoテンプレートに2つのリストを渡して、希望の出力を得るためにいくつかのロジックを実行しようとしています。しかし、私はページをロードしようとすると、私は以下のエラーを取得しています。Python、Django - 'list'オブジェクトには属性 'push'がありません

誰でもお手伝いできますか? おかげでレンダリングする3番目の引数は値にマッピングする辞書名でなければなりません

エラー

Environment: 


Request Method: GET 
Request URL: http://10.66.118.55/oncall/ 

Django Version: 1.9.5 
Python Version: 2.7.11 
Installed Applications: 
['oncall.apps.OncallConfig', 
'django.contrib.admin', 
'django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.messages', 
'django.contrib.staticfiles'] 
Installed Middleware: 
['django.middleware.security.SecurityMiddleware', 
'django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.common.CommonMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware', 
'django.middleware.clickjacking.XFrameOptionsMiddleware'] 



Traceback: 

File "/usr/local/lib/python2.7/dist-packages/Django-1.9.5-py2.7.egg/django/core/handlers/base.py" in get_response 
    149.      response = self.process_exception_by_middleware(e, request) 

File "/usr/local/lib/python2.7/dist-packages/Django-1.9.5-py2.7.egg/django/core/handlers/base.py" in get_response 
    147.      response = wrapped_callback(request, *callback_args, **callback_kwargs) 

File "/home/aw/INFTERNAL/oncall/views.py" in index 
    126.  return render(request, 'oncall/rota.html', lstUsers, lstPolicy) 

File "/usr/local/lib/python2.7/dist-packages/Django-1.9.5-py2.7.egg/django/shortcuts.py" in render 
    89.    using=using) 

File "/usr/local/lib/python2.7/dist-packages/Django-1.9.5-py2.7.egg/django/template/loader.py" in render_to_string 
    114.       template_name, context, context_instance, dirs, dictionary) 

File "/usr/local/lib/python2.7/dist-packages/Django-1.9.5-py2.7.egg/django/template/engine.py" in render_to_string 
    243.   with context_instance.push(context): 

Exception Type: AttributeError at /oncall/ 
Exception Value: 'list' object has no attribute 'push' 

ビュー

def index(request): 
    lstPolicy = [] 
    lstUsers = [] 
    for objPolicy in objPolicyData['escalation_policies']: 
     strPolicyName = objPolicy['name'] 
     if strPolicyName.lower().find('test') == -1: 
      classPolicy = Policy() 
      classPolicy.Name = strPolicyName 
      lstPolicy.append(strPolicyName) 
      for objOnCall in objPolicy['on_call']: 
       classUser = User() 
       classUser.Policy = strPolicyName 
       strLevel = '' 
       if objOnCall['level'] == 1: 
        strLevel == 'Primary on call' 
       elif objOnCall['level'] == 2: 
        strLevel == 'Backup on call' 
       elif objOnCall['level'] == 3: 
        strLevel == 'Tetiary on call' 
       classUser.Level = strLevel 
       classUser.StartDate = getDate(objOnCall['start']) 
       classUser.EndDate = getDate(objOnCall['end']) 
       classUser.StartTime = getTime(objOnCall['start']) 
       classUser.EndTime = getTime(objOnCall['end']) 
       objUser = objOnCall['user'] 
       classUser.Name = objUser['name'] 
       classUser.Mobile = getUserMobile(objUser['id']) 
       lstUsers.append(classUser) 
    return render(request, 'oncall/rota.html', lstUsers, lstPolicy) 

テンプレート

{% extends 'oncall/base.html' %} 

{% block content %} 
    {% for pol in lstPolicy %} 
     <h2>{{ pol.Name {}</h2> 
     {% for user in lstUsers %} 
      {% if user.Policy == pol.Name %} 
       <h3>{{ user.Level }}</h3> 
       <p> 
        Mobile: {{ user.Mobile } 
        From: {{ user.StartTime }} on {{ user.StartDate }} 
        Until: {{ user.EndTime }} on {{ user.EndDate }} 
       </p> 
      {% endif %} 
     {% endfor %} 
    {% endfor %} 
{% endblock %} 
+1

完全なトレースバックを表示してください。このコードのどこでも 'push 'を呼び出すようには見えません。 –

+0

@DanielRosemanこれはすごく新しいことですが、今必要な機能を実現しませんでした。 – AlexW

+0

関数 'render(request、 'oncall/rota.html'、lstUsers、lstPolicy)の3番目のパラメータはfalseです。ドキュメントをもう一度読む[ショートカットレンダリング](https://docs.djangoproject.com/ja/1.9/intro/tutorial03/#a-shortcut-render) – qvpham

答えて

2

。現在は、値自体を渡すだけです。

return render(request, 'oncall/rota.html', {'lstUsers': lstUsers, 'lstPolicy': lstPolicy}) 

これまでに尋ねたUserクラスのポイントは実際にはないようです。ユーザーデータを辞書のリストとして渡す方がはるかに簡単で明確になります。

そして、真剣に、ハンガリー表記を削除してください。コードから明らかなように、lstUsersはリストです。それは変数名の一部としてそれをエンコードするために何も追加しません。

+0

これまで行っていただきありがとうございます、私は別の問題があると思います値は、ページが空白、pol.Name vaulesにアクセスする正しい方法ですか?ありがとう – AlexW