From e963553361e9bf2a41c4bb0edd67ebd9f3fb8057 Mon Sep 17 00:00:00 2001 From: Daniel Greenfeld Date: Sun, 19 May 2013 09:47:42 +0200 Subject: [PATCH] merge in from @AndrewIngram for #58 --- djadmin2/core.py | 5 ++-- djadmin2/models.py | 25 ++++++++++++---- djadmin2/templates/admin2/bootstrap/base.html | 2 ++ .../templates/admin2/bootstrap/index.html | 2 +- .../admin2/bootstrap/model_list.html | 21 +++++++------- djadmin2/templatetags/__init__.py | 0 djadmin2/templatetags/admin2_urls.py | 8 +++++ djadmin2/views.py | 29 ++++++++++++++++++- 8 files changed, 71 insertions(+), 21 deletions(-) create mode 100644 djadmin2/templatetags/__init__.py create mode 100644 djadmin2/templatetags/admin2_urls.py diff --git a/djadmin2/core.py b/djadmin2/core.py index 58e2050..f0cea10 100644 --- a/djadmin2/core.py +++ b/djadmin2/core.py @@ -11,10 +11,9 @@ from . import views class Admin2(object): index_view = views.IndexView - def __init__(self, name='admin2', app_name='admin2'): + def __init__(self, name='admin2'): self.registry = {} self.name = name - self.app_name = app_name def register(self, model, modeladmin=None, **kwargs): if model in self.registry: @@ -60,4 +59,4 @@ class Admin2(object): @property def urls(self): - return self.get_urls(), self.app_name, self.name + return self.get_urls(), self.name, self.name diff --git a/djadmin2/models.py b/djadmin2/models.py index e844dca..7f73dca 100644 --- a/djadmin2/models.py +++ b/djadmin2/models.py @@ -4,6 +4,9 @@ For wont of a better name, this module is called 'models'. It's role is synonymous with the django.contrib.admin.sites model. """ +import functools + +from django.core.urlresolvers import reverse from django.conf.urls import patterns, include, url from django.contrib.auth import models as auth_app from django.db.models import get_models, signals @@ -110,6 +113,8 @@ class ModelAdmin2(BaseAdmin2): def __init__(self, model, **kwargs): self.model = model + self.app_label = model._meta.app_label + self.model_name = model._meta.object_name.lower() if self.verbose_name is None: self.verbose_name = self.model._meta.verbose_name @@ -118,10 +123,15 @@ class ModelAdmin2(BaseAdmin2): def get_default_view_kwargs(self): return { + 'app_label': self.app_label, 'model': self.model, + 'model_name': self.model_name, 'modeladmin': self, } + def get_prefixed_view_name(self, view_name): + return '{}_{}_{}'.format(self.app_label, self.model_name, view_name) + def get_index_kwargs(self): return self.get_default_view_kwargs() @@ -145,32 +155,35 @@ class ModelAdmin2(BaseAdmin2): def get_delete_kwargs(self): return self.get_default_view_kwargs() + def get_index_url(self): + return reverse('admin2:{}'.format(self.get_prefixed_view_name('index'))) + def get_urls(self): return patterns('', url( regex=r'^$', view=self.index_view.as_view(**self.get_index_kwargs()), - name='index' + name=self.get_prefixed_view_name('index') ), url( - regex=r'^create/$', + regex=r'^create/$', view=self.create_view.as_view(**self.get_create_kwargs()), - name='create' + name=self.get_prefixed_view_name('create') ), url( regex=r'^(?P[0-9]+)/$', view=self.detail_view.as_view(**self.get_detail_kwargs()), - name='detail' + name=self.get_prefixed_view_name('detail') ), url( regex=r'^(?P[0-9]+)/update/$', view=self.update_view.as_view(**self.get_update_kwargs()), - name='update' + name=self.get_prefixed_view_name('update') ), url( regex=r'^(?P[0-9]+)/delete/$', view=self.delete_view.as_view(**self.get_delete_kwargs()), - name='delete' + name=self.get_prefixed_view_name('delete') ), ) diff --git a/djadmin2/templates/admin2/bootstrap/base.html b/djadmin2/templates/admin2/bootstrap/base.html index 3ed6f0c..fe38092 100644 --- a/djadmin2/templates/admin2/bootstrap/base.html +++ b/djadmin2/templates/admin2/bootstrap/base.html @@ -9,6 +9,8 @@
{% block content %}{% endblock %} + + Index
diff --git a/djadmin2/templates/admin2/bootstrap/index.html b/djadmin2/templates/admin2/bootstrap/index.html index c9fc3ad..ac8d0e8 100644 --- a/djadmin2/templates/admin2/bootstrap/index.html +++ b/djadmin2/templates/admin2/bootstrap/index.html @@ -4,7 +4,7 @@

Index

{% for modeladmin in registry.values %} - + {% endfor %}
{{ modeladmin.verbose_name_plural }}
{{ modeladmin.verbose_name_plural }}
{% endblock content %} diff --git a/djadmin2/templates/admin2/bootstrap/model_list.html b/djadmin2/templates/admin2/bootstrap/model_list.html index 8121584..7e3eb36 100644 --- a/djadmin2/templates/admin2/bootstrap/model_list.html +++ b/djadmin2/templates/admin2/bootstrap/model_list.html @@ -1,4 +1,5 @@ {% extends "admin2/bootstrap/base.html" %} +{% load admin2_urls %} {% block content %}
@@ -6,9 +7,9 @@

Select {{ model }} to change

- {% if has_add_permission %} - Add {{ model|title }} - {% endif %} + {# if has_add_permission #} + add + {# endif #}
@@ -25,13 +26,13 @@ {% for obj in object_list %} - {{ obj }} detail - {% if has_edit_permission %} - edit - {% endif %} - {% if has_delete_permission %} - delete - {% endif %} + {{ obj }} detail + {# if has_edit_permission #} + edit + {# endif #} + {# if has_delete_permission #} + delete + {# endif #} {% endfor %} diff --git a/djadmin2/templatetags/__init__.py b/djadmin2/templatetags/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/djadmin2/templatetags/admin2_urls.py b/djadmin2/templatetags/admin2_urls.py new file mode 100644 index 0000000..e5e5395 --- /dev/null +++ b/djadmin2/templatetags/admin2_urls.py @@ -0,0 +1,8 @@ +from django import template + +register = template.Library() + + +@register.filter +def admin2_urlname(value, arg): + return 'admin2:%s_%s_%s' % (value.app_label, value.model_name, arg) diff --git a/djadmin2/views.py b/djadmin2/views.py index d0250ad..475f405 100644 --- a/djadmin2/views.py +++ b/djadmin2/views.py @@ -1,5 +1,6 @@ import os +from django.core.urlresolvers import reverse from django.conf import settings from django.contrib.auth.views import redirect_to_login from django.core.exceptions import PermissionDenied @@ -14,9 +15,25 @@ ADMIN2_THEME_DIRECTORY = getattr(settings, "ADMIN2_THEME_DIRECTORY", "admin2/boo class Admin2Mixin(object): + modeladmin = None + model_name = None + app_label = None + def get_template_names(self): return [os.path.join(ADMIN2_THEME_DIRECTORY, self.default_template_name)] + def get_model(self): + return self.model + + def get_queryset(self): + return self.get_model()._default_manager.all() + + def get_form_class(self): + if self.form_class is not None: + return self.form_class + return modelform_factory(self.get_model()) + + class AdminModel2Mixin(Admin2Mixin, AccessMixin): modeladmin = None @@ -70,7 +87,9 @@ class IndexView(Admin2Mixin, generic.TemplateView): }) return data -class ModelListView(AdminModel2Mixin, generic.ListView): + +class ModelListView(Admin2Mixin, generic.ListView): + default_template_name = "model_list.html" permission_type = 'view' @@ -79,6 +98,10 @@ class ModelListView(AdminModel2Mixin, generic.ListView): context['model'] = self.get_model()._meta.verbose_name context['model_pluralized'] = self.get_model()._meta.verbose_name_plural return context + + def get_success_url(self): + view_name = 'admin2:{}_{}_detail'.format(self.app_label, self.model_name) + return reverse(view_name, kwargs={'pk': self.object.pk}) class ModelDetailView(AdminModel2Mixin, generic.DetailView): @@ -99,6 +122,10 @@ class ModelAddFormView(AdminModel2Mixin, generic.CreateView): default_template_name = "model_add_form.html" permission_type = 'add' + def get_success_url(self): + view_name = 'admin2:{}_{}_detail'.format(self.app_label, self.model_name) + return reverse(view_name, kwargs={'pk': self.object.pk}) + class ModelDeleteView(AdminModel2Mixin, generic.DeleteView): success_url = "../../"