martinsam
12/30/2010 - 1:30 PM

Signals + cache + lang

Signals + cache + lang

### in signals.py ##################################
####################################################
def project_post_generate_template(sender, **kwargs):
    ### get object ###
    project = kwargs['instance']
   
    generate_project_cartridge(project)
  
def generate_project_cartridge(project):
    
    ### Create a simple HttpRequest     
    request = HttpRequest()
    request.is_secure = lambda : True
    ### doesn't pass through a django local middleware, so we need force the language choice
    language = translation.get_language_from_request(request)
    translation.activate(language)
    
    for coworker in project.get_coworkers():
        request.user = coworker
        c = render_to_string('mon/projects/cartridges/project_cartridge_dash.html', {"project": project},  RequestContext(request)).encode("utf-8")
        f = open(os.path.join(settings.CACHE_TEMPLATE_PATH, 'projects/dashboard/cache_%s_%s_%s.html' % (project.id, request.user.id, 'fr')), 'w')
        f.write(c)
        f.close()
        print "Generate project %s cartridge for %s done" % (project.name, coworker.get_full_name())

### in inclusion_tag.py (template tag) #############
####################################################
@register.inclusion_tag('mon/projects/cartridges/project_cartridge_dash.html', takes_context = True)
def show_project_cartridge_dash(context, project, object):
    return {
        'request' : context['request'],
        'project' : project,
        'MEDIA_IMG_URL' : context['MEDIA_IMG_URL'],
        }
   
class CachedProjectDashboard(Node):
    def __init__(self, project):
        self.project = Variable(project)
    def render(self, context):
        try:
            project = self.project.resolve(context)
            try:
                request = context['request']
                t = template.loader.get_template('cache/projects/dashboard/cache_%s_%s_%s.html' %(project.id, request.user.id, 'fr'))
                return t.render(Context({}))
            except TemplateDoesNotExist:
                print "Chargement du template cache/projects/dashboard/cache_%s_%s_%s.html impossible" % (project.id, request.user.id, 'fr')
                params = show_project_cartridge_dash(context, project)
                c = render_to_string('mon/projects/cartridges/project_cartridge_dash.html', params)
                return c         
        except VariableDoesNotExist:
            pass
        return ''

@register.tag 
def show_cached_project_dashboard(parser, token):
    try:
        bits = token.split_contents()[1:]
        return CachedProjectDashboard(bits[0])
    except IndexError:
        raise TemplateSyntaxError, "Wrong argument assignement ! Expected :project"


### in template *.html #############
####################################

<!-- old call-->
{# show_project_cartridge_dash project #}
<!-- new call-->
{% show_cached_project_dashboard project %}