Django

Code

Changeset 7627

Show
Ignore:
Timestamp:
06/12/08 15:58:56 (1 year ago)
Author:
simon
Message:

newforms-admin: Added ability to pass extra_context argument to ModelAdmin?'s add_view, change_view, changelist_view, delete_view and history_view methods. This makes it easier to customise those pages; you can over-ride the methods in your subclass and call the super method with extra_context to feed additional variables to your custom admin templates.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • django/branches/newforms-admin/django/contrib/admin/options.py

    r7626 r7627  
    456456        app_label = opts.app_label 
    457457        ordered_objects = opts.get_ordered_objects() 
    458         extra_context =
     458        context.update(
    459459            'add': add, 
    460460            'change': change, 
     
    470470            'save_as': self.save_as, 
    471471            'save_on_top': self.save_on_top, 
    472         } 
    473         context.update(extra_context) 
     472        }) 
    474473        return render_to_response([ 
    475474            "admin/%s/%s/change_form.html" % (app_label, opts.object_name.lower()), 
    476475            "admin/%s/change_form.html" % app_label, 
    477             "admin/change_form.html"], context_instance=context) 
    478  
    479     def add_view(self, request, form_url=''): 
     476            "admin/change_form.html" 
     477        ], context, context_instance=template.RequestContext(request)) 
     478 
     479    def add_view(self, request, form_url='', extra_context=None): 
    480480        "The 'add' admin view for this model." 
    481481        model = self.model 
     
    521521            inline_admin_formsets.append(inline_admin_formset) 
    522522 
    523         c = template.RequestContext(request,
     523        context =
    524524            'title': _('Add %s') % opts.verbose_name, 
    525525            'adminform': adminForm, 
     
    528528            'media': mark_safe(media), 
    529529            'inline_admin_formsets': inline_admin_formsets, 
    530         }) 
    531         return self.render_change_form(request, model, c, add=True) 
    532  
    533     def change_view(self, request, object_id): 
     530        } 
     531        context.update(extra_context or {}) 
     532        return self.render_change_form(request, model, context, add=True) 
     533 
     534    def change_view(self, request, object_id, extra_context=None): 
    534535        "The 'change' admin view for this model." 
    535536        model = self.model 
     
    595596            inline_admin_formsets.append(inline_admin_formset) 
    596597 
    597         c = template.RequestContext(request,
     598        context =
    598599            'title': _('Change %s') % opts.verbose_name, 
    599600            'adminform': adminForm, 
     
    603604            'media': mark_safe(media), 
    604605            'inline_admin_formsets': inline_admin_formsets, 
    605         }) 
    606         return self.render_change_form(request, model, c, change=True, obj=obj) 
    607  
    608     def changelist_view(self, request): 
     606        } 
     607        context.update(extra_context or {}) 
     608        return self.render_change_form(request, model, context, change=True, obj=obj) 
     609 
     610    def changelist_view(self, request, extra_context=None): 
    609611        "The 'change list' admin view for this model." 
    610612        from django.contrib.admin.views.main import ChangeList, ERROR_FLAG 
     
    625627                return render_to_response('admin/invalid_setup.html', {'title': _('Database error')}) 
    626628            return HttpResponseRedirect(request.path + '?' + ERROR_FLAG + '=1') 
    627         c = template.RequestContext(request,
     629        context =
    628630            'title': cl.title, 
    629631            'is_popup': cl.is_popup, 
    630632            'cl': cl, 
    631         }) 
    632         c.update({'has_add_permission': self.has_add_permission(request)}), 
    633         return render_to_response(['admin/%s/%s/change_list.html' % (app_label, opts.object_name.lower()), 
    634                                 'admin/%s/change_list.html' % app_label, 
    635                                 'admin/change_list.html'], context_instance=c) 
    636  
    637     def delete_view(self, request, object_id): 
     633        } 
     634        context.update({'has_add_permission': self.has_add_permission(request)}), 
     635        context.update(extra_context or {}) 
     636        return render_to_response([ 
     637            'admin/%s/%s/change_list.html' % (app_label, opts.object_name.lower()), 
     638            'admin/%s/change_list.html' % app_label, 
     639            'admin/change_list.html' 
     640        ], context, context_instance=template.RequestContext(request)) 
     641 
     642    def delete_view(self, request, object_id, extra_context=None): 
    638643        "The 'delete' admin view for this model." 
    639644        from django.contrib.contenttypes.models import ContentType 
     
    672677                return HttpResponseRedirect("../../../../") 
    673678            return HttpResponseRedirect("../../") 
    674         extra_context = { 
     679        context = { 
    675680            "title": _("Are you sure?"), 
    676681            "object_name": opts.verbose_name, 
     
    680685            "opts": opts, 
    681686        } 
    682         return render_to_response(["admin/%s/%s/delete_confirmation.html" % (app_label, opts.object_name.lower() ), 
    683                                 "admin/%s/delete_confirmation.html" % app_label , 
    684                                 "admin/delete_confirmation.html"], extra_context, context_instance=template.RequestContext(request)) 
    685  
    686     def history_view(self, request, object_id): 
     687        context.update(extra_context or {}) 
     688        return render_to_response([ 
     689            "admin/%s/%s/delete_confirmation.html" % (app_label, opts.object_name.lower()), 
     690            "admin/%s/delete_confirmation.html" % app_label, 
     691            "admin/delete_confirmation.html" 
     692        ], context, context_instance=template.RequestContext(request)) 
     693 
     694    def history_view(self, request, object_id, extra_context=None): 
    687695        "The 'history' admin view for this model." 
    688696        from django.contrib.contenttypes.models import ContentType 
     
    694702        # If no history was found, see whether this object even exists. 
    695703        obj = get_object_or_404(model, pk=object_id) 
    696         extra_context = { 
     704        context = { 
    697705            'title': _('Change history: %s') % force_unicode(obj), 
    698706            'action_list': action_list, 
     
    700708            'object': obj, 
    701709        } 
    702         template_list = [ 
     710        context.update(extra_context or {}) 
     711        return render_to_response([ 
    703712            "admin/%s/%s/object_history.html" % (opts.app_label, opts.object_name.lower()), 
    704713            "admin/%s/object_history.html" % opts.app_label, 
    705714            "admin/object_history.html" 
    706         ] 
    707         return render_to_response(template_list, extra_context, context_instance=template.RequestContext(request)) 
     715        ], context, context_instance=template.RequestContext(request)) 
    708716 
    709717class InlineModelAdmin(BaseModelAdmin): 
  • django/branches/newforms-admin/tests/regressiontests/admin_views/models.py

    r7589 r7627  
    99    content = models.TextField() 
    1010    date = models.DateTimeField() 
    11          
    1211 
    1312class ArticleAdmin(admin.ModelAdmin): 
    1413    list_display = ('content', 'date') 
    1514    list_filter = ('date',) 
     15     
     16    def changelist_view(self, request): 
     17        "Test that extra_context works" 
     18        return super(ArticleAdmin, self).changelist_view(request, extra_context={ 
     19            'extra_var': 'Hello!' 
     20        }) 
     21 
     22class CustomArticle(Article): 
     23    pass 
     24 
     25class CustomArticleAdmin(admin.ModelAdmin): 
     26    def changelist_view(self, request): 
     27        "Test that extra_context works" 
     28        return super(CustomArticleAdmin, self).changelist_view(request, extra_context={ 
     29            'extra_var': 'Hello!' 
     30        }) 
    1631         
    1732admin.site.register(Article, ArticleAdmin) 
     33admin.site.register(CustomArticle, CustomArticleAdmin) 
  • django/branches/newforms-admin/tests/regressiontests/admin_views/tests.py

    r7611 r7627  
    183183        self.failUnlessEqual(Article.objects.get(pk=1).content, '<p>edited article</p>') 
    184184        self.client.get('/test_admin/admin/logout/') 
     185         
     186    def testCustomChangelistView(self): 
     187        self.client.get('/test_admin/admin/') 
     188        self.client.post('/test_admin/admin/', self.super_login) 
     189        request = self.client.get('/test_admin/admin/admin_views/customarticle/') 
     190        self.failUnlessEqual(request.status_code, 200) 
     191        self.assert_("var hello = 'Hello!';" in request.content) 
    185192 
    186193    def testDeleteView(self):