excellent explanation did not know anything about it

thank Russ :)


On Fri, Jan 25, 2013 at 9:08 AM, Russell Keith-Magee <
russ...@keith-magee.com> wrote:

>
>
> 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