Add render() and render_dependencies() to Compoent.

This commit is contained in:
Emil Stenström 2015-06-12 22:15:09 +02:00
parent 972f99af05
commit 6492081b64
3 changed files with 41 additions and 7 deletions

View file

@ -1,12 +1,30 @@
from django.template.loader import render_to_string
from .component_registry import ComponentRegistry, AlreadyRegistered, NotRegistered # NOQA
class Component(object):
CSS_TEMPLATE = '<link href="{}" type="text/css" media="{}" rel="stylesheet" />'
JS_TEMPLATE = '<script type="text/javascript" src="{}"></script>'
def __init__(self):
self._media = self.Media()
def context(self):
return {}
def render_dependencies(self):
out = []
for css_media, css_path in self._media.css.items():
out.append(Component.CSS_TEMPLATE.format(css_path, css_media))
for js_path in self._media.js:
out.append(Component.JS_TEMPLATE.format(js_path))
return "\n".join(out)
def render(self, *args, **kwargs):
return render_to_string(self._media.template, self.context(*args, **kwargs))
class Media:
template = None
css = {}

View file

@ -0,0 +1 @@
Variable: <strong>{{ variable }}</strong>

View file

@ -1,23 +1,38 @@
from textwrap import dedent
import unittest
import django
from django.conf import settings
from django_components import component
class SimpleComponent(component.Component):
def context(self, variable):
def context(self, variable=None):
return {
"variable": variable,
}
class Media:
template = "template.html"
template = "simple_template.html"
css = {"all": "style.css"}
js = ("script.js",)
class ComponentRegistryTest(unittest.TestCase):
def test_simple_component(self):
def setUp(self):
settings.configure(
TEMPLATES=[{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': ["tests/templates/"],
}]
)
django.setup()
def test_simple_component(self):
comp = SimpleComponent()
self.assertEqual(comp.context("test"), {"variable": "test"})
self.assertEqual(comp._media.template, "template.html")
self.assertEqual(comp._media.css, {"all": "style.css"})
self.assertEqual(comp._media.js, ("script.js",))
self.assertEqual(comp.render_dependencies(), dedent("""
<link href="style.css" type="text/css" media="all" rel="stylesheet" />
<script type="text/javascript" src="script.js"></script>
""").strip())
self.assertEqual(comp.render(variable="test"), dedent("""
Variable: <strong>test</strong>
""").lstrip())