2017-05-23 21 views
2

私は、Django 1.11、Apache 2.2、mod_wsgiを使ってPython 2.7を使ってWebアプリケーションを作っています。私は私のページをレンダリングする問題があります。 フルトレースバックは、ある 例外値:contextはWSGIRequestではなくdictでなければなりません

Environment: 


Request Method: GET 
Request URL: http://website.com/~user/irtf/ 

Django Version: 1.11.1 
Python Version: 2.7.13 
Installed Applications: 
['irtf.apps.IrtfConfig', 
'django.contrib.admin', 
'django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'mod_wsgi.server'] 
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.messages.middleware.MessageMiddleware', 
'django.middleware.clickjacking.XFrameOptionsMiddleware'] 



Traceback: 

File "/home/path/irtf_website/mysiteenv/lib/python2.7/site-packages/django/core/handlers/exception.py" in inner 
    41.    response = get_response(request) 

File "/home/path/irtf_website/mysiteenv/lib/python2.7/site-packages/django/core/handlers/base.py" in _get_response 
    187.     response = self.process_exception_by_middleware(e, request) 

File "/home/path/irtf_website/mysiteenv/lib/python2.7/site-packages/django/core/handlers/base.py" in _get_response 
    185.     response = wrapped_callback(request, *callback_args, **callback_kwargs) 

File "/home/path/irtf_website/mysite/irtf/views.py" in index 
    18.   return HttpResponse(template.render(request)) 

File "/home/path/irtf_website/mysiteenv/lib/python2.7/site-packages/django/template/backends/django.py" in render 
    64.   context = make_context(context, request, autoescape=self.backend.engine.autoescape) 

File "/home/path/irtf_website/mysiteenv/lib/python2.7/site-packages/django/template/context.py" in make_context 
    287.   raise TypeError('context must be a dict rather than %s.' % context.__class__.__name__) 

Exception Type: TypeError at /irtf/ 
Exception Value: context must be a dict rather than WSGIRequest. 

マイ views.pyで、

def index(request): 
     template = loader.get_template('irtf/index.html') 

     return HttpResponse(template.render(request)) 

それは問題ではないかもしれませんが、このページのための私のテンプレートは単なるテキストとリンクで構成されています。

答えて

10

これは、最初のparameterが辞書であると考えられているからです。あなたはおそらくrender shortcut代わり

return render(request,'irtf/index.html') 
+0

はありがとうござい使用するには、レンダリングの近道

template = loader.get_template('irtf/index.html') return HttpResponse(template.render({}, request)) 

でこれを混同していました。チュートリアルページ(https://docs.djangoproject.com/en/1.11/intro/tutorial03/)のHttpResponseは、dictsが渡されることなく使用されているので、私は混乱しています。ドキュメントが正しくないか、私が見ていない違いがありますか? – Alexa

+0

レンダリングのショートカットは、辞書なしで使用されます。いくつかの場所では 'render'ショートカットを他の' template.render'で使っていますが、それらは同じように見えますが、動作が異なります。チュートリアルは間違っていませんが、混乱するかもしれません。 – e4c5

+0

ここでエラーを投げているのはHttpResponseではありません。例外をスローしているのはTemplate.renderメソッドです。 [Template.render](https://github.com/django/django/blob/master/django/template/backends/django.py#L58)のメソッドシグネチャは、コンテキストと要求をキーワード引数として指定するか、 'template.render(request = request、context = context)'や、リクエストとコンテキストを位置引数、つまり 'template.render(None、request)'として提供する必要があります。レンダリングの呼び出しが修正されると、HttpResponseの有効な最初の引数である文字列が返されます。 – ARJMP

関連する問題