Skip to content

Instantly share code, notes, and snippets.

@coderanger
Created December 24, 2010 01:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save coderanger/753776 to your computer and use it in GitHub Desktop.
Save coderanger/753776 to your computer and use it in GitHub Desktop.
import inspect
from django import forms
from django.contrib.auth.forms import UserChangeForm
from django.contrib.auth.models import User
from django.core.paginator import Paginator
from django.shortcuts import get_object_or_404
from django.utils.datastructures import SortedDict
import nexus
class UsersModule(nexus.NexusModule):
home_url = 'index'
name = 'users'
def __init__(self, *args, **kwargs):
super(UsersModule, self).__init__(*args, **kwargs)
self._registry = {}
# Fake the NexusSite API
def register(self, module, namespace=None, category=None):
module = module(self.site)
if not namespace:
namespace = module.get_namespace()
if namespace:
module.app_name = module.name = namespace
self._registry[namespace] = (module, category)
def get_modules(self):
for k, v in self._registry.iteritems():
yield k, v[0]
def get_title(self):
return 'Users'
def get_urls(self):
from django.conf.urls.defaults import patterns, url
urlpatterns = patterns('',
url(r'^$', self.as_view(self.index), name='index'),
url(r'^(\d+)$', self.as_view(self.details), name='details'),
)
return urlpatterns
def index(self, request):
users = Paginator(User.objects.all().order_by('username'), 25)
return self.render_to_response("nexus/users/index.html", {
'users': users,
'page': users.page(1),
}, request)
def details(self, request, user_id):
user = get_object_or_404(User, pk=user_id)
module_set = []
for namespace, module in self.get_modules():
if module.home_url:
home_url = reverse(module.get_home_url(), current_app=self.name)
else:
home_url = None
if hasattr(module, 'render_on_dashboard'):
if 'user' in inspect.getargspec(module.render_on_dashboard)[0]:
content = module.render_on_dashboard(request, user)
else:
content = module.render_on_dashboard(request)
module_set.append((module.get_dashboard_title(), content, home_url))
return self.render_to_response("nexus/users/details.html", {
'user': user,
'form': UserChangeForm(instance=user),
'module_set': module_set,
}, request)
class UserProfileModule(nexus.NexusModule):
name = 'profile'
def get_title(self):
return 'Profile'
def render_on_dashboard(self, request, user):
profile = user.get_profile()
class ProfileForm(forms.ModelForm):
class Meta:
model = profile.__class__
exclude = ('user',)
form = ProfileForm(instance=profile)
return self.render_to_string('nexus/users/profile.html', {
'user': user,
'profile': profile,
'form': form,
})
nexus.site.register(UsersModule, 'users', category='users')
users_site = nexus.site._registry['users'][0]
users_site.register(UserProfileModule, 'profile')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment