in favor of the added MakoSystem render_template method. Related changes: * Adds the MakoService to the StudioEditModuleRuntime, PreviewModuleSystem, LmsModuleSystem, and XBlockRuntime * MakoService constructor takes a `namespace_prefix` string, so that the CMS PreviewModuleSystem can render to LMS templates, without needing the special render_from_lms helper method. * ModuleSystem.render_template becomes a read-only property, so the constructor calls and test module systems are updated accordingly. * Adds tests for the MakoService and module system shims.
31 lines
942 B
Python
31 lines
942 B
Python
"""
|
|
Supports rendering an XBlock to HTML using mako templates.
|
|
"""
|
|
|
|
from xblock.reference.plugins import Service
|
|
|
|
from common.djangoapps.edxmako.shortcuts import render_to_string
|
|
|
|
|
|
class MakoService(Service):
|
|
"""
|
|
A service for rendering XBlocks to HTML using mako templates.
|
|
|
|
Args:
|
|
namespace_prefix(string): optional prefix to the mako namespace used to find the template file.
|
|
e.g to access LMS templates from within Studio code, pass namespace_prefix='lms.'
|
|
"""
|
|
def __init__(
|
|
self,
|
|
namespace_prefix='',
|
|
**kwargs
|
|
):
|
|
super().__init__(**kwargs)
|
|
self.namespace_prefix = namespace_prefix
|
|
|
|
def render_template(self, template_file, dictionary, namespace='main'):
|
|
"""
|
|
Takes (template_file, dictionary) and returns rendered HTML.
|
|
"""
|
|
return render_to_string(template_file, dictionary, namespace=self.namespace_prefix + namespace)
|