1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- from django.conf import settings
- from django.utils.importlib import import_module
- from misago.thread import local
- __all__ = ('merge_contexts', 'process_context', 'process_templates')
- def load_middlewares():
- """
- Populate _middlewares with list of template middlewares instances
- """
- middlewares = []
- for extension in settings.TEMPLATE_MIDDLEWARES:
- module = '.'.join(extension.split('.')[:-1])
- extension = extension.split('.')[-1]
- module = import_module(module)
- middleware = getattr(module, extension)
- middlewares += (middleware(), )
- return tuple(middlewares)
- _middlewares = load_middlewares()
- def merge_contexts(dictionary=None, context_instance=None):
- dictionary = dictionary or {}
- if not context_instance:
- return dictionary
- context_instance.update(dictionary)
- return context_instance
- _thread_local = local()
- def process_context(templates, dictionary=None, context_instance=None):
- context = merge_contexts(dictionary, context_instance)
- """
- Put template context trough template middlewares
- """
- if _thread_local.template_mutex:
- return context
- _thread_local.template_mutex = True
- for middleware in _middlewares:
- try:
- new_context = middleware.process_context(templates, context)
- if new_context:
- context = new_context
- except AttributeError:
- pass
- _thread_local.template_mutex = None
- return context
- def process_templates(templates, context):
- for middleware in _middlewares:
- try:
- new_templates = middleware.process_template(templates, context)
- if new_templates:
- return new_templates
- except AttributeError:
- pass
- return templates
|