Skip to content

Instantly share code, notes, and snippets.

@mhulse
Created November 10, 2011 20:30
Show Gist options
  • Save mhulse/1356108 to your computer and use it in GitHub Desktop.
Save mhulse/1356108 to your computer and use it in GitHub Desktop.
Django: How to upgrade this old functional view to new class based view?
###### NEW:
from django.conf.urls.defaults import *
from sporty import views
urlpatterns = patterns('',
url(
# 30 characters or fewer. Letters, numbers and @/./+/-/_ characters:
r'^users/(?P<username>[a-zA-Z0-9@.+-_]+)/$',
views.UserDetail.as_view(),
name='user-detail',
),
)
###### OLD:
from django.conf.urls.defaults import *
from django.views.generic.simple import direct_to_template
urlpatterns = patterns('dee.views',
# 30 characters or fewer. Letters, numbers and @/./+/-/_ characters:
url(r'^users/(?P<username>[a-zA-Z0-9@.+-_]+)/$', 'user_detail', {}, name='user-detail'),
)
###### NEW:
from django import shortcuts
from django.views import generic
from django.contrib.auth.models import User
class UserDetail(generic.DetailView):
context_object_name = 'user'
template_name='sporty/user_detail.html'
def get_queryset(self):
# ERROR HERE: "Generic detail view UserDetail must be called with either an object pk or a slug."
user = shortcuts.get_object_or_404(User, username__iexact=self.kwargs['username'])
# ^
self.profile = user.get_profile()
return user
def get_context_data(self, **kwargs):
context = super(UserDetail, self).get_context_data(**kwargs)
context['profile'] = self.profile
###### OLD:
from django.shortcuts import render_to_response, get_object_or_404
from django.template import RequestContext
from django.contrib.auth.models import User
def user_detail(request, username, template='dee/user_detail.html'):
user = get_object_or_404(User, username__iexact=username)
profile = user.get_profile()
context = {
'user': user,
'profile': profile,
}
return render_to_response(
template,
context,
RequestContext(request),
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment