Thanks Russ :)

Sent from my Windows Phone

-----Original Message-----
From: Russell Keith-Magee
Sent: 1/25/2013 4:08 PM
To: django-users@googlegroups.com
Subject: Re: Please explain this django admin code




On Fri, Jan 25, 2013 at 10:36 PM, Tundebabzy <tundeba...@gmail.com> wrote:

 I'll be really grateful if someone can take the time to explain these
lines of code. Its from contrib.admin.options

        def wrap(view):
            def wrapper(*args, **kwargs):
                return self.admin_site.admin_view(view)(*args,
**kwargs)    # This is the brain twisting line
             return update_wrapper(wrapper, view)

The syntax foo.bar()(*osama **obama) is just blowing fuses in my brain
and then from the code above, I can't even find where admin_view is
defined.






Admin is really composed of two types of object -- an Admin Site
object, and a collection of ModelAdmin objects. The AdminSite object
governs the access to the admin site; a ModelAdmin object exists for
each model registered with the admin. As a result of that
relationship, every ModelAdmin object also knows the site that it is a
part of.




So - if you're in contrib.admin.options, you're looking at the code
for the ModelAdmin object. self.admin_site refers to the site that the
ModelAdmin instance belongs to; the admin_view method belongs to that
site object. It's essentially a decorator providing the permissions
check for the current user.




A decorator is just a function that takes a function as an argument,
and returns a function as a result. Since it returns a function, the
return value can itself be invoked.




So:




self.admin_site




is the admin site.




self.admin_site.admin_view




is a decorator method.




self.admin_site.admin_view(my_view)




is the application of the decorator applied to a specific view




self.admin_site.admin_view(my_view)(*args, **kwargs)




is the invocation of the decoration result using the given args and kwargs.




Yours,

Russ Magee %-)

-- 
You received this message because you are subscribed to the Google
Groups "Django users" group.
 To post to this group, send email to django-users@googlegroups.com.
 To unsubscribe from this group, send email to
django-users+unsubscr...@googlegroups.com.
 Visit this group at http://groups.google.com/group/django-users?hl=en.
 For more options, visit https://groups.google.com/groups/opt_out.

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-users@googlegroups.com.
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com.
Visit this group at http://groups.google.com/group/django-users?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to