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