Show
Ignore:
Timestamp:
05/07/09 19:39:02 (3 years ago)
Author:
235
Message:

optimized bannerplaces (no cache)

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • plesonet_banners/trunk/templatetags/banners_tags.py

    r1 r32  
    22from apps.plesonet_banners.models import Bannerpage, Banners  
    33from django.template import Library 
     4from apps.lib.threadlocals import get_request 
     5 
     6from scache.tags import cached_inclusion_tag 
     7from django.db.models import signals  
    48 
    59register = Library() 
     10 
    611 
    712@register.inclusion_tag('plesonet_banners/show_banner.html', takes_context=True) 
     
    1116    url = context['request'].path 
    1217     
    13     # banner only this page 
    1418    banners = Banners.objects.filter( 
    1519                                    bannerplace__is_published=True,  
    16                                     bannerplace__url__iexact=url,  
    1720                                    is_published=True,  
    1821                                    bannertype=banner_type) 
    1922     
    20     if banners: 
    21         return {'banner': banners[0]} 
     23     
     24    #better to find proper banner on client-side, than making a dozen of sql requests 
     25    for b in banners: 
     26        if b.bannerplace.url == url and b.child_page_only == False: 
     27            return {'banner': b}     
    2228     
    2329    # last word 
    2430    url = url.rsplit('/',1)[0] 
     31    if url == "": 
     32        return {'banner': None} 
    2533     
    2634    # parent banners 
     
    2836       url = url.rsplit('/',1)[0] 
    2937       select_url = url + '/' 
    30         
    31        banners = Banners.objects.filter( 
    32                                         bannerplace__is_published=True,  
    33                                         bannerplace__url__iexact=select_url,  
    34                                         is_published=True,  
    35                                         bannertype=banner_type) 
    36         
    37        if banners: 
    38            if not banners[0].one_page_only: 
    39                banner = banners[0] 
    40                break 
     38               
     39       for b in banners: 
     40           if b.bannerplace.url == select_url and not b.one_page_only: 
     41               return {'banner': b} 
    4142        
    4243       if url.find('/') : break   
    4344         
    44     return {'banner': banner} 
     45    return {'banner': None}