Using render() with Form?

148 views
Skip to first unread message

Victor Hooi

unread,
Oct 3, 2011, 8:17:49 AM10/3/11
to django...@googlegroups.com
heya,

I was previously using the following to render a form:

from django.shortcuts import render_to_response, RequestContext
...
def upload_file(request):
...
return render_to_response('upload_form.html', {'form': form}, context_instance=RequestContext(request))

I can confirm that this works fine, form was rendered perfectly fine.

However, I read that render() is now the bee-knees...lol (http://stackoverflow.com/questions/5154358/django-what-is-the-difference-between-render-render-to-response-and-direct), so I thought I'd switch to that:

from django.shortcuts import render
...
def upload_file(request):
...
return render('upload_form.html', {'form': form})

However, when I try to do that, I get an error:

Environment:


Request Method: GET

Django Version: 1.4 pre-alpha SVN-16922
Python Version: 2.7.1
Installed Applications:
['django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.sites',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django.contrib.admin',
 'django.contrib.admindocs',
 'card']
Installed Middleware:
('django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware')


Traceback:
File "/Users/victorhooi/.virtualenvs/appname/src/django/django/core/handlers/base.py" in get_response
  111.                         response = callback(request, *callback_args, **callback_kwargs)
File "/Users/victorhooi/djangoProjects/appname/card/views.py" in upload_file
  18.     return render('upload_form.html', {'form': form})
File "/Users/victorhooi/.virtualenvs/appname/src/django/django/shortcuts/__init__.py" in render
  40.         context_instance = RequestContext(request, current_app=current_app)
File "/Users/victorhooi/.virtualenvs/appname/src/django/django/template/context.py" in __init__
  172.             self.update(processor(request))
File "/Users/victorhooi/.virtualenvs/appname/src/django/django/core/context_processors.py" in debug
  35.     if settings.DEBUG and request.META.get('REMOTE_ADDR') in settings.INTERNAL_IPS:

Exception Type: AttributeError at /upload/
Exception Value: 'str' object has no attribute 'META'


Any idea from the above why this might be happening?

Thanks,
Victor

Daniel Roseman

unread,
Oct 3, 2011, 8:21:38 AM10/3/11
to django...@googlegroups.com

On Monday, 3 October 2011 13:17:49 UTC+1, Victor Hooi wrote:
heya,

I was previously using the following to render a form:

from django.shortcuts import render_to_response, RequestContext
...
def upload_file(request):
...
return render_to_response('upload_form.html', {'form': form}, context_instance=RequestContext(request))

I can confirm that this works fine, form was rendered perfectly fine.

However, I read that render() is now the bee-knees...lol (http://stackoverflow.com/questions/5154358/django-what-is-the-difference-between-render-render-to-response-and-direct), so I thought I'd switch to that:

from django.shortcuts import render
...
def upload_file(request):
...
return render('upload_form.html', {'form': form})

However, when I try to do that, I get an error:

<snip>
 
Exception Type: AttributeError at /upload/
Exception Value: 'str' object has no attribute 'META'


Any idea from the above why this might be happening?

Thanks,
Victor

The first argument to `render` is the request.
--
DR. 
 

Sebastian Goll

unread,
Oct 3, 2011, 8:21:36 AM10/3/11
to django...@googlegroups.com
On Mon, 3 Oct 2011 05:17:49 -0700 (PDT)
Victor Hooi <victo...@gmail.com> wrote:

> from django.shortcuts import render
> ...
> def upload_file(request):
> ...
> return render('upload_form.html', {'form': form})

"render" requires as its first argument the request object supplied to your view function. So, your example should be:

def upload_file(request):
...
return render(request, 'upload_form.html', {'form': form})

Sebastian.

Victor Hooi

unread,
Oct 3, 2011, 8:32:13 AM10/3/11
to django...@googlegroups.com
heya,

Aha, thanks guys. I can confirm that works fine now.

That'll teach me to read the API docs a bit better...lol, I just assumed it was a 1-to-1 swap with render_to_response, didn't check the arguments =).

Cheers,
Victor
Reply all
Reply to author
Forward
0 new messages