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))
それは問題ではないかもしれませんが、このページのための私のテンプレートは単なるテキストとリンクで構成されています。
はありがとうござい使用するには、レンダリングの近道
でこれを混同していました。チュートリアルページ(https://docs.djangoproject.com/en/1.11/intro/tutorial03/)のHttpResponseは、dictsが渡されることなく使用されているので、私は混乱しています。ドキュメントが正しくないか、私が見ていない違いがありますか? – Alexa
レンダリングのショートカットは、辞書なしで使用されます。いくつかの場所では 'render'ショートカットを他の' template.render'で使っていますが、それらは同じように見えますが、動作が異なります。チュートリアルは間違っていませんが、混乱するかもしれません。 – e4c5
ここでエラーを投げているのは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