mirror of
https://github.com/django-components/django-components.git
synced 2025-07-07 17:34:59 +00:00
Replace all instances of component_block with component. Remove duplicate tests.
This commit is contained in:
parent
48fe8171b4
commit
edf3885632
14 changed files with 246 additions and 310 deletions
44
README.md
44
README.md
|
@ -7,7 +7,7 @@ A way to create simple reusable template components in Django.
|
|||
It lets you create "template components", that contains both the template, the Javascript and the CSS needed to generate the front end code you need for a modern app. Components look like this:
|
||||
|
||||
```htmldjango
|
||||
{% component_block "calendar" date="2015-06-19" %}{% endcomponent_block %}
|
||||
{% component "calendar" date="2015-06-19" %}{% endcomponent %}
|
||||
```
|
||||
|
||||
And this is what gets rendered (plus the CSS and Javascript you've specified):
|
||||
|
@ -220,7 +220,7 @@ First load the `component_tags` tag library, then use the `component_[js/css]_de
|
|||
{% component_css_dependencies %}
|
||||
</head>
|
||||
<body>
|
||||
{% component_block "calendar" date="2015-06-19" %}{% endcomponent_block %}
|
||||
{% component "calendar" date="2015-06-19" %}{% endcomponent %}
|
||||
{% component_js_dependencies %}
|
||||
</body>
|
||||
<html>
|
||||
|
@ -297,7 +297,7 @@ This mechanism makes components more reusable and composable.
|
|||
In the example below we introduce two block tags that work hand in hand to make this work. These are...
|
||||
|
||||
- `{% slot <name> %}`/`{% endslot %}`: Declares a new slot in the component template.
|
||||
- `{% fill <name> %}`/`{% endfill %}`: (Used inside a `component_block` tag pair.) Fills a declared slot with the specified content.
|
||||
- `{% fill <name> %}`/`{% endfill %}`: (Used inside a `component` tag pair.) Fills a declared slot with the specified content.
|
||||
|
||||
Let's update our calendar component to support more customization. We'll add `slot` tag pairs to its template, _calendar.html_.
|
||||
|
||||
|
@ -315,9 +315,9 @@ Let's update our calendar component to support more customization. We'll add `sl
|
|||
When using the component, you specify which slots you want to fill and where you want to use the defaults from the template. It looks like this:
|
||||
|
||||
```htmldjango
|
||||
{% component_block "calendar" date="2020-06-06" %}
|
||||
{% component "calendar" date="2020-06-06" %}
|
||||
{% fill "body" %}Can you believe it's already <span>{{ date }}</span>??{% endfill %}
|
||||
{% endcomponent_block %}
|
||||
{% endcomponent %}
|
||||
```
|
||||
|
||||
Since the header block is unspecified, it's taken from the base template. If you put this in a template, and pass in `date=2020-06-06`, this is what gets rendered:
|
||||
|
@ -335,7 +335,7 @@ Since the header block is unspecified, it's taken from the base template. If you
|
|||
|
||||
As you can see, component slots lets you write reusable containers that you fill in when you use a component. This makes for highly reusable components that can be used in different circumstances.
|
||||
|
||||
It can become tedious to use `fill` tags everywhere, especially when you're using a component that declares only one slot. To make things easier, `slot` tags can be marked with an optional keyword: `default`. When added to the end of the tag (as shown below), this option lets you pass filling content directly in the body of a `component_block` tag pair – without using a `fill` tag. Choose carefully, though: a component template may contain at most one slot that is marked as `default`. The `default` option can be combined with other slot options, e.g. `required`.
|
||||
It can become tedious to use `fill` tags everywhere, especially when you're using a component that declares only one slot. To make things easier, `slot` tags can be marked with an optional keyword: `default`. When added to the end of the tag (as shown below), this option lets you pass filling content directly in the body of a `component` tag pair – without using a `fill` tag. Choose carefully, though: a component template may contain at most one slot that is marked as `default`. The `default` option can be combined with other slot options, e.g. `required`.
|
||||
|
||||
Here's the same example as before, except with default slots and implicit filling.
|
||||
|
||||
|
@ -355,9 +355,9 @@ The template:
|
|||
Including the component (notice how the `fill` tag is omitted):
|
||||
|
||||
```htmldjango
|
||||
{% component_block "calendar" date="2020-06-06" %}
|
||||
{% component "calendar" date="2020-06-06" %}
|
||||
Can you believe it's already <span>{{ date }}</span>??
|
||||
{% endcomponent_block %}
|
||||
{% endcomponent %}
|
||||
```
|
||||
|
||||
The rendered result (exactly the same as before):
|
||||
|
@ -377,32 +377,32 @@ You may be tempted to combine implicit fills with explicit `fill` tags. This wil
|
|||
|
||||
```htmldjango
|
||||
{# DON'T DO THIS #}
|
||||
{% component_block "calendar" date="2020-06-06" %}
|
||||
{% component "calendar" date="2020-06-06" %}
|
||||
{% fill "header" %}Totally new header!{% endfill %}
|
||||
Can you believe it's already <span>{{ date }}</span>??
|
||||
{% endcomponent_block %}
|
||||
{% endcomponent %}
|
||||
```
|
||||
|
||||
By contrast, it is permitted to use `fill` tags in nested components, e.g.:
|
||||
|
||||
```htmldjango
|
||||
{% component_block "calendar" date="2020-06-06" %}
|
||||
{% component_block "beautiful-box" %}
|
||||
{% component "calendar" date="2020-06-06" %}
|
||||
{% component "beautiful-box" %}
|
||||
{% fill "content" %} Can you believe it's already <span>{{ date }}</span>?? {% endfill %}
|
||||
{% endcomponent_block %}
|
||||
{% endcomponent_block %}
|
||||
{% endcomponent %}
|
||||
{% endcomponent %}
|
||||
```
|
||||
|
||||
This is fine too:
|
||||
|
||||
```htmldjango
|
||||
{% component_block "calendar" date="2020-06-06" %}
|
||||
{% component "calendar" date="2020-06-06" %}
|
||||
{% fill "header" %}
|
||||
{% component_block "calendar-header" %}
|
||||
{% component "calendar-header" %}
|
||||
Super Special Calendar Header
|
||||
{% endcomponent_block %}
|
||||
{% endcomponent %}
|
||||
{% endfill %}
|
||||
{% endcomponent_block %}
|
||||
{% endcomponent %}
|
||||
```
|
||||
|
||||
### Components as views
|
||||
|
@ -479,9 +479,9 @@ If you're planning on passing an HTML string, check Django's use of [`format_htm
|
|||
Certain properties of a slot can be accessed from within a 'fill' context. They are provided as attributes on a user-defined alias of the targeted slot. For instance, let's say you're filling a slot called 'body'. To access properties of this slot, alias it using the 'as' keyword to a new name -- or keep the original name. With the new slot alias, you can call `<alias>.default` to insert the default content.
|
||||
|
||||
```htmldjango
|
||||
{% component_block "calendar" date="2020-06-06" %}
|
||||
{% component "calendar" date="2020-06-06" %}
|
||||
{% fill "body" as "body" %}{{ body.default }}. Have a great day!{% endfill %}
|
||||
{% endcomponent_block %}
|
||||
{% endcomponent %}
|
||||
```
|
||||
|
||||
Produces:
|
||||
|
@ -614,10 +614,10 @@ COMPONENTS = {
|
|||
|
||||
## Component context and scope
|
||||
|
||||
By default, components can access context variables from the parent template, just like templates that are included with the `{% include %}` tag. Just like with `{% include %}`, if you don't want the component template to have access to the parent context, add `only` to the end of the `{% component_block %}` (or `{% component_block %}{% endcomponent_block %}` tag):
|
||||
By default, components can access context variables from the parent template, just like templates that are included with the `{% include %}` tag. Just like with `{% include %}`, if you don't want the component template to have access to the parent context, add `only` to the end of the `{% component %}` (or `{% component %}{% endcomponent %}` tag):
|
||||
|
||||
```htmldjango
|
||||
{% component_block "calendar" date="2015-06-19" only %}{% endcomponent_block %}
|
||||
{% component "calendar" date="2015-06-19" only %}{% endcomponent %}
|
||||
```
|
||||
|
||||
NOTE: `{% csrf_token %}` tags need access to the top-level context, and they will not function properly if they are rendered in a component that is called with the `only` modifier.
|
||||
|
|
|
@ -88,11 +88,11 @@ class RenderBenchmarks(SimpleTestCase):
|
|||
template = Template(
|
||||
"""
|
||||
{% load component_tags %}
|
||||
{% component_block 'test_component' %}
|
||||
{% component 'test_component' %}
|
||||
{% slot "header" %}
|
||||
{% component_block 'inner_component' variable='foo' %}{% endcomponent_block %}
|
||||
{% component 'inner_component' variable='foo' %}{% endcomponent %}
|
||||
{% endslot %}
|
||||
{% endcomponent_block %}
|
||||
{% endcomponent %}
|
||||
"""
|
||||
)
|
||||
|
||||
|
@ -102,11 +102,11 @@ class RenderBenchmarks(SimpleTestCase):
|
|||
template = Template(
|
||||
"""
|
||||
{% load component_tags %}{% component_dependencies %}
|
||||
{% component_block 'test_component' %}
|
||||
{% component 'test_component' %}
|
||||
{% slot "header" %}
|
||||
{% component_block 'inner_component' variable='foo' %}{% endcomponent_block %}
|
||||
{% component 'inner_component' variable='foo' %}{% endcomponent %}
|
||||
{% endslot %}
|
||||
{% endcomponent_block %}
|
||||
{% endcomponent %}
|
||||
"""
|
||||
)
|
||||
# Sanity tests
|
||||
|
|
|
@ -265,7 +265,7 @@ class BaseFillNode(Node):
|
|||
raise TemplateSyntaxError(
|
||||
"{% fill ... %} block cannot be rendered directly. "
|
||||
"You are probably seeing this because you have used one outside "
|
||||
"a {% component_block %} context."
|
||||
"a {% component %} context."
|
||||
)
|
||||
|
||||
|
||||
|
@ -286,7 +286,7 @@ class NamedFillNode(BaseFillNode):
|
|||
|
||||
class ImplicitFillNode(BaseFillNode):
|
||||
"""
|
||||
Instantiated when a `component_block` tag pair is passed template content that
|
||||
Instantiated when a `component` tag pair is passed template content that
|
||||
excludes `fill` tags. Nodes of this type contribute their nodelists to slots marked
|
||||
as 'default'.
|
||||
"""
|
||||
|
@ -298,10 +298,10 @@ class ImplicitFillNode(BaseFillNode):
|
|||
@register.tag("fill")
|
||||
def do_fill(parser, token):
|
||||
"""Block tag whose contents 'fill' (are inserted into) an identically named
|
||||
'slot'-block in the component template referred to by a parent component_block.
|
||||
'slot'-block in the component template referred to by a parent component.
|
||||
It exists to make component nesting easier.
|
||||
|
||||
This tag is available only within a {% component_block %}..{% endcomponent_block %} block.
|
||||
This tag is available only within a {% component %}..{% endcomponent %} block.
|
||||
Runtime checks should prohibit other usages.
|
||||
"""
|
||||
bits = token.split_contents()
|
||||
|
@ -406,14 +406,14 @@ class ComponentNode(Node):
|
|||
return rendered_component
|
||||
|
||||
|
||||
@register.tag(name="component_block")
|
||||
def do_component_block(parser, token):
|
||||
@register.tag(name="component")
|
||||
def do_component(parser, token):
|
||||
"""
|
||||
To give the component access to the template context:
|
||||
{% component_block "name" positional_arg keyword_arg=value ... %}
|
||||
{% component "name" positional_arg keyword_arg=value ... %}
|
||||
|
||||
To render the component in an isolated context:
|
||||
{% component_block "name" positional_arg keyword_arg=value ... only %}
|
||||
{% component "name" positional_arg keyword_arg=value ... only %}
|
||||
|
||||
Positional and keyword arguments can be literals or template variables.
|
||||
The component name must be a single- or double-quotes string and must
|
||||
|
@ -423,8 +423,8 @@ def do_component_block(parser, token):
|
|||
|
||||
bits = token.split_contents()
|
||||
bits, isolated_context = check_for_isolated_context_keyword(bits)
|
||||
component_name, context_args, context_kwargs = parse_component_with_args(parser, bits, "component_block")
|
||||
body: NodeList = parser.parse(parse_until=["endcomponent_block"])
|
||||
component_name, context_args, context_kwargs = parse_component_with_args(parser, bits, "component")
|
||||
body: NodeList = parser.parse(parse_until=["endcomponent"])
|
||||
parser.delete_first_token()
|
||||
fill_nodes = ()
|
||||
if block_has_content(body):
|
||||
|
@ -437,7 +437,7 @@ def do_component_block(parser, token):
|
|||
break
|
||||
else:
|
||||
raise TemplateSyntaxError(
|
||||
"Illegal content passed to 'component_block' tag pair. "
|
||||
"Illegal content passed to 'component' tag pair. "
|
||||
"Possible causes: 1) Explicit 'fill' tags cannot occur alongside other "
|
||||
"tags except comment tags; 2) Default (default slot-targeting) content "
|
||||
"is mixed with explict 'fill' tags."
|
||||
|
|
|
@ -5,12 +5,12 @@
|
|||
{% component_css_dependencies %}
|
||||
</head>
|
||||
<body>
|
||||
{% component_block "calendar" date=date %}{% endcomponent_block %}
|
||||
{% component_block "greeting" name='Joe' %}
|
||||
{% component "calendar" date=date %}{% endcomponent %}
|
||||
{% component "greeting" name='Joe' %}
|
||||
{% fill "message" %}
|
||||
Howdy?
|
||||
{% endfill %}
|
||||
{% endcomponent_block %}
|
||||
{% endcomponent %}
|
||||
{% component_js_dependencies %}
|
||||
</body>
|
||||
</html>
|
||||
|
|
|
@ -3,17 +3,17 @@
|
|||
<div>Your to-dos:</div>
|
||||
<ul>
|
||||
<li>
|
||||
{% component_block "todo" %}
|
||||
{% component "todo" %}
|
||||
{% fill "todo_text" %}
|
||||
Stop forgetting the milk!
|
||||
{% endfill %}
|
||||
{% endcomponent_block %}
|
||||
{% endcomponent %}
|
||||
</li>
|
||||
<li>
|
||||
{% component_block "todo" %}
|
||||
{% component "todo" %}
|
||||
{# As of v0.28, 'fill' tag optional for 1-slot filling if component template specifies a 'default' slot #}
|
||||
Wear all-white clothes to laser tag tournament.
|
||||
{% endcomponent_block %}
|
||||
{% endcomponent %}
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
|
@ -200,7 +200,7 @@ Page lightly modified and partially extracted as a component #}
|
|||
</div>
|
||||
</header>
|
||||
<div class="titlebar-container"><h1 class="title">Document and website structure</h1></div>
|
||||
{% component_block 'breadcrumb_component' items=5 %}{% endcomponent_block %}
|
||||
{% component 'breadcrumb_component' items=5 %}{% endcomponent %}
|
||||
<div class="locale-container">
|
||||
<form class="language-menu"><label for="select_language" class="visually-hidden">Select your preferred
|
||||
language</label> <select id="select_language" name="language">
|
||||
|
|
|
@ -2,11 +2,11 @@
|
|||
|
||||
<div>
|
||||
<h1>Parent content</h1>
|
||||
{% component_block name="variable_display" shadowing_variable='override' new_variable='unique_val' %}{% endcomponent_block %}
|
||||
{% component name="variable_display" shadowing_variable='override' new_variable='unique_val' %}{% endcomponent %}
|
||||
</div>
|
||||
<div>
|
||||
{% slot 'content' %}
|
||||
<h2>Slot content</h2>
|
||||
{% component_block name="variable_display" shadowing_variable='slot_default_override' new_variable='slot_default_unique' %}{% endcomponent_block %}
|
||||
{% component name="variable_display" shadowing_variable='slot_default_override' new_variable='slot_default_unique' %}{% endcomponent %}
|
||||
{% endslot %}
|
||||
</div>
|
|
@ -2,11 +2,11 @@
|
|||
|
||||
<div>
|
||||
<h1>Parent content</h1>
|
||||
{% component_block name="variable_display" shadowing_variable=inner_parent_value new_variable='unique_val' %}{% endcomponent_block %}
|
||||
{% component name="variable_display" shadowing_variable=inner_parent_value new_variable='unique_val' %}{% endcomponent %}
|
||||
</div>
|
||||
<div>
|
||||
{% slot 'content' %}
|
||||
<h2>Slot content</h2>
|
||||
{% component_block name="variable_display" shadowing_variable='slot_default_override' new_variable=inner_parent_value %}{% endcomponent_block %}
|
||||
{% component name="variable_display" shadowing_variable='slot_default_override' new_variable=inner_parent_value %}{% endcomponent %}
|
||||
{% endslot %}
|
||||
</div>
|
|
@ -1,11 +1,11 @@
|
|||
{% load component_tags %}
|
||||
<div class="dashboard-component">
|
||||
{% component_block "calendar" date="2020-06-06" %}
|
||||
{% component "calendar" date="2020-06-06" %}
|
||||
{% fill "header" %} {# fills and slots with same name relate to diff. things. #}
|
||||
{% slot "header" %}Welcome to your dashboard!{% endslot %}
|
||||
{% endfill %}
|
||||
{% fill "body" %}Here are your to-do items for today:{% endfill %}
|
||||
{% endcomponent_block %}
|
||||
{% endcomponent %}
|
||||
<ol>
|
||||
{% for item in items %}
|
||||
<li>{{ item }}</li>
|
||||
|
|
|
@ -395,15 +395,15 @@ class ComponentIsolationTests(SimpleTestCase):
|
|||
template = Template(
|
||||
"""
|
||||
{% load component_tags %}
|
||||
{% component_block "test" %}
|
||||
{% component "test" %}
|
||||
{% fill "header" %}Override header{% endfill %}
|
||||
{% endcomponent_block %}
|
||||
{% component_block "test" %}
|
||||
{% endcomponent %}
|
||||
{% component "test" %}
|
||||
{% fill "main" %}Override main{% endfill %}
|
||||
{% endcomponent_block %}
|
||||
{% component_block "test" %}
|
||||
{% endcomponent %}
|
||||
{% component "test" %}
|
||||
{% fill "footer" %}Override footer{% endfill %}
|
||||
{% endcomponent_block %}
|
||||
{% endcomponent %}
|
||||
"""
|
||||
)
|
||||
|
||||
|
|
|
@ -83,7 +83,7 @@ def render_template_view(request):
|
|||
template = Template(
|
||||
"""
|
||||
{% load component_tags %}
|
||||
{% component_block "testcomponent" variable="TEMPLATE" %}{% endcomponent_block %}
|
||||
{% component "testcomponent" variable="TEMPLATE" %}{% endcomponent %}
|
||||
"""
|
||||
)
|
||||
return HttpResponse(template.render(Context({})))
|
||||
|
|
|
@ -78,7 +78,7 @@ class ContextTests(SimpleTestCase):
|
|||
):
|
||||
template = Template(
|
||||
"{% load component_tags %}{% component_dependencies %}"
|
||||
"{% component_block 'parent_component' %}{% endcomponent_block %}"
|
||||
"{% component 'parent_component' %}{% endcomponent %}"
|
||||
)
|
||||
rendered = template.render(Context())
|
||||
|
||||
|
@ -95,40 +95,7 @@ class ContextTests(SimpleTestCase):
|
|||
):
|
||||
template = Template(
|
||||
"{% load component_tags %}{% component_dependencies %}"
|
||||
"{% component_block name='parent_component' %}{% endcomponent_block %}"
|
||||
)
|
||||
rendered = template.render(Context())
|
||||
|
||||
self.assertIn("<h1>Uniquely named variable = unique_val</h1>", rendered, rendered)
|
||||
self.assertIn(
|
||||
"<h1>Uniquely named variable = slot_default_unique</h1>",
|
||||
rendered,
|
||||
rendered,
|
||||
)
|
||||
|
||||
def test_nested_component_context_shadows_parent_with_unfilled_slots_and_component_block_tag(
|
||||
self,
|
||||
):
|
||||
template = Template(
|
||||
"{% load component_tags %}{% component_dependencies %}"
|
||||
"{% component_block 'parent_component' %}{% endcomponent_block %}"
|
||||
)
|
||||
rendered = template.render(Context())
|
||||
|
||||
self.assertIn("<h1>Shadowing variable = override</h1>", rendered, rendered)
|
||||
self.assertIn(
|
||||
"<h1>Shadowing variable = slot_default_override</h1>",
|
||||
rendered,
|
||||
rendered,
|
||||
)
|
||||
self.assertNotIn("<h1>Shadowing variable = NOT SHADOWED</h1>", rendered, rendered)
|
||||
|
||||
def test_nested_component_instances_have_unique_context_with_unfilled_slots_and_component_block_tag(
|
||||
self,
|
||||
):
|
||||
template = Template(
|
||||
"{% load component_tags %}{% component_dependencies %}"
|
||||
"{% component_block 'parent_component' %}{% endcomponent_block %}"
|
||||
"{% component name='parent_component' %}{% endcomponent %}"
|
||||
)
|
||||
rendered = template.render(Context())
|
||||
|
||||
|
@ -143,12 +110,12 @@ class ContextTests(SimpleTestCase):
|
|||
template = Template(
|
||||
"""
|
||||
{% load component_tags %}{% component_dependencies %}
|
||||
{% component_block 'parent_component' %}
|
||||
{% component 'parent_component' %}
|
||||
{% fill 'content' %}
|
||||
{% component_block name='variable_display' shadowing_variable='shadow_from_slot' new_variable='unique_from_slot' %}
|
||||
{% endcomponent_block %}
|
||||
{% component name='variable_display' shadowing_variable='shadow_from_slot' new_variable='unique_from_slot' %}
|
||||
{% endcomponent %}
|
||||
{% endfill %}
|
||||
{% endcomponent_block %}
|
||||
{% endcomponent %}
|
||||
""" # NOQA
|
||||
)
|
||||
rendered = template.render(Context())
|
||||
|
@ -167,12 +134,12 @@ class ContextTests(SimpleTestCase):
|
|||
template = Template(
|
||||
"""
|
||||
{% load component_tags %}{% component_dependencies %}
|
||||
{% component_block 'parent_component' %}
|
||||
{% component 'parent_component' %}
|
||||
{% fill 'content' %}
|
||||
{% component_block name='variable_display' shadowing_variable='shadow_from_slot' new_variable='unique_from_slot' %}
|
||||
{% endcomponent_block %}
|
||||
{% component name='variable_display' shadowing_variable='shadow_from_slot' new_variable='unique_from_slot' %}
|
||||
{% endcomponent %}
|
||||
{% endfill %}
|
||||
{% endcomponent_block %}
|
||||
{% endcomponent %}
|
||||
""" # NOQA
|
||||
)
|
||||
rendered = template.render(Context())
|
||||
|
@ -189,24 +156,7 @@ class ContextTests(SimpleTestCase):
|
|||
):
|
||||
template = Template(
|
||||
"{% load component_tags %}{% component_dependencies %}"
|
||||
"{% component_block name='parent_component' %}{% endcomponent_block %}"
|
||||
)
|
||||
rendered = template.render(Context({"shadowing_variable": "NOT SHADOWED"}))
|
||||
|
||||
self.assertIn("<h1>Shadowing variable = override</h1>", rendered, rendered)
|
||||
self.assertIn(
|
||||
"<h1>Shadowing variable = slot_default_override</h1>",
|
||||
rendered,
|
||||
rendered,
|
||||
)
|
||||
self.assertNotIn("<h1>Shadowing variable = NOT SHADOWED</h1>", rendered, rendered)
|
||||
|
||||
def test_nested_component_context_shadows_outer_context_with_unfilled_slots_and_component_block_tag(
|
||||
self,
|
||||
):
|
||||
template = Template(
|
||||
"{% load component_tags %}{% component_dependencies %}"
|
||||
"{% component_block 'parent_component' %}{% endcomponent_block %}"
|
||||
"{% component name='parent_component' %}{% endcomponent %}"
|
||||
)
|
||||
rendered = template.render(Context({"shadowing_variable": "NOT SHADOWED"}))
|
||||
|
||||
|
@ -224,12 +174,12 @@ class ContextTests(SimpleTestCase):
|
|||
template = Template(
|
||||
"""
|
||||
{% load component_tags %}{% component_dependencies %}
|
||||
{% component_block 'parent_component' %}
|
||||
{% component 'parent_component' %}
|
||||
{% fill 'content' %}
|
||||
{% component_block name='variable_display' shadowing_variable='shadow_from_slot' new_variable='unique_from_slot' %}
|
||||
{% endcomponent_block %}
|
||||
{% component name='variable_display' shadowing_variable='shadow_from_slot' new_variable='unique_from_slot' %}
|
||||
{% endcomponent %}
|
||||
{% endfill %}
|
||||
{% endcomponent_block %}
|
||||
{% endcomponent %}
|
||||
""" # NOQA
|
||||
)
|
||||
rendered = template.render(Context({"shadowing_variable": "NOT SHADOWED"}))
|
||||
|
@ -247,8 +197,8 @@ class ParentArgsTests(SimpleTestCase):
|
|||
def test_parent_args_can_be_drawn_from_context(self):
|
||||
template = Template(
|
||||
"{% load component_tags %}{% component_dependencies %}"
|
||||
"{% component_block 'parent_with_args' parent_value=parent_value %}"
|
||||
"{% endcomponent_block %}"
|
||||
"{% component 'parent_with_args' parent_value=parent_value %}"
|
||||
"{% endcomponent %}"
|
||||
)
|
||||
rendered = template.render(Context({"parent_value": "passed_in"}))
|
||||
|
||||
|
@ -259,7 +209,7 @@ class ParentArgsTests(SimpleTestCase):
|
|||
def test_parent_args_available_outside_slots(self):
|
||||
template = Template(
|
||||
"{% load component_tags %}{% component_dependencies %}"
|
||||
"{% component_block 'parent_with_args' parent_value='passed_in' %}{%endcomponent_block %}"
|
||||
"{% component 'parent_with_args' parent_value='passed_in' %}{%endcomponent %}"
|
||||
)
|
||||
rendered = template.render(Context())
|
||||
|
||||
|
@ -271,12 +221,12 @@ class ParentArgsTests(SimpleTestCase):
|
|||
template = Template(
|
||||
"""
|
||||
{% load component_tags %}{% component_dependencies %}
|
||||
{% component_block 'parent_with_args' parent_value='passed_in' %}
|
||||
{% component 'parent_with_args' parent_value='passed_in' %}
|
||||
{% fill 'content' %}
|
||||
{% component_block name='variable_display' shadowing_variable='value_from_slot' new_variable=inner_parent_value %}
|
||||
{% endcomponent_block %}
|
||||
{% component name='variable_display' shadowing_variable='value_from_slot' new_variable=inner_parent_value %}
|
||||
{% endcomponent %}
|
||||
{% endfill %}
|
||||
{% endcomponent_block %}
|
||||
{% endcomponent %}
|
||||
""" # NOQA
|
||||
)
|
||||
rendered = template.render(Context())
|
||||
|
@ -290,30 +240,26 @@ class ContextCalledOnceTests(SimpleTestCase):
|
|||
def test_one_context_call_with_simple_component(self):
|
||||
template = Template(
|
||||
"{% load component_tags %}{% component_dependencies %}"
|
||||
"{% component_block name='incrementer' %}{% endcomponent_block %}"
|
||||
"{% component name='incrementer' %}{% endcomponent %}"
|
||||
)
|
||||
rendered = template.render(Context()).strip()
|
||||
|
||||
self.assertEqual(rendered, '<p class="incrementer">value=1;calls=1</p>', rendered)
|
||||
|
||||
def test_one_context_call_with_simple_component_and_arg(self):
|
||||
template = Template(
|
||||
"{% load component_tags %}{% component_block name='incrementer' value='2' %}{% endcomponent_block %}"
|
||||
)
|
||||
template = Template("{% load component_tags %}{% component name='incrementer' value='2' %}{% endcomponent %}")
|
||||
rendered = template.render(Context()).strip()
|
||||
|
||||
self.assertEqual(rendered, '<p class="incrementer">value=3;calls=1</p>', rendered)
|
||||
|
||||
def test_one_context_call_with_component_block(self):
|
||||
template = Template("{% load component_tags %}" "{% component_block 'incrementer' %}{% endcomponent_block %}")
|
||||
def test_one_context_call_with_component(self):
|
||||
template = Template("{% load component_tags %}" "{% component 'incrementer' %}{% endcomponent %}")
|
||||
rendered = template.render(Context()).strip()
|
||||
|
||||
self.assertEqual(rendered, '<p class="incrementer">value=1;calls=1</p>', rendered)
|
||||
|
||||
def test_one_context_call_with_component_block_and_arg(self):
|
||||
template = Template(
|
||||
"{% load component_tags %}" "{% component_block 'incrementer' value='3' %}{% endcomponent_block %}"
|
||||
)
|
||||
def test_one_context_call_with_component_and_arg(self):
|
||||
template = Template("{% load component_tags %}" "{% component 'incrementer' value='3' %}{% endcomponent %}")
|
||||
rendered = template.render(Context()).strip()
|
||||
|
||||
self.assertEqual(rendered, '<p class="incrementer">value=4;calls=1</p>', rendered)
|
||||
|
@ -321,8 +267,8 @@ class ContextCalledOnceTests(SimpleTestCase):
|
|||
def test_one_context_call_with_slot(self):
|
||||
template = Template(
|
||||
"{% load component_tags %}"
|
||||
"{% component_block 'incrementer' %}{% fill 'content' %}"
|
||||
"<p>slot</p>{% endfill %}{% endcomponent_block %}"
|
||||
"{% component 'incrementer' %}{% fill 'content' %}"
|
||||
"<p>slot</p>{% endfill %}{% endcomponent %}"
|
||||
)
|
||||
rendered = template.render(Context()).strip()
|
||||
|
||||
|
@ -335,8 +281,8 @@ class ContextCalledOnceTests(SimpleTestCase):
|
|||
def test_one_context_call_with_slot_and_arg(self):
|
||||
template = Template(
|
||||
"{% load component_tags %}"
|
||||
"{% component_block 'incrementer' value='3' %}{% fill 'content' %}"
|
||||
"<p>slot</p>{% endfill %}{% endcomponent_block %}"
|
||||
"{% component 'incrementer' value='3' %}{% fill 'content' %}"
|
||||
"<p>slot</p>{% endfill %}{% endcomponent %}"
|
||||
)
|
||||
rendered = template.render(Context()).strip()
|
||||
|
||||
|
@ -351,7 +297,7 @@ class ComponentsCanAccessOuterContext(SimpleTestCase):
|
|||
def test_simple_component_can_use_outer_context(self):
|
||||
template = Template(
|
||||
"{% load component_tags %}{% component_dependencies %}"
|
||||
"{% component_block 'simple_component' %}{% endcomponent_block %}"
|
||||
"{% component 'simple_component' %}{% endcomponent %}"
|
||||
)
|
||||
rendered = template.render(Context({"variable": "outer_value"})).strip()
|
||||
self.assertIn("outer_value", rendered, rendered)
|
||||
|
@ -361,7 +307,7 @@ class IsolatedContextTests(SimpleTestCase):
|
|||
def test_simple_component_can_pass_outer_context_in_args(self):
|
||||
template = Template(
|
||||
"{% load component_tags %}{% component_dependencies %}"
|
||||
"{% component_block 'simple_component' variable only %}{% endcomponent_block %}"
|
||||
"{% component 'simple_component' variable only %}{% endcomponent %}"
|
||||
)
|
||||
rendered = template.render(Context({"variable": "outer_value"})).strip()
|
||||
self.assertIn("outer_value", rendered, rendered)
|
||||
|
@ -369,7 +315,7 @@ class IsolatedContextTests(SimpleTestCase):
|
|||
def test_simple_component_cannot_use_outer_context(self):
|
||||
template = Template(
|
||||
"{% load component_tags %}{% component_dependencies %}"
|
||||
"{% component_block 'simple_component' only %}{% endcomponent_block %}"
|
||||
"{% component 'simple_component' only %}{% endcomponent %}"
|
||||
)
|
||||
rendered = template.render(Context({"variable": "outer_value"})).strip()
|
||||
self.assertNotIn("outer_value", rendered, rendered)
|
||||
|
@ -392,7 +338,7 @@ class IsolatedContextSettingTests(SimpleTestCase):
|
|||
):
|
||||
template = Template(
|
||||
"{% load component_tags %}{% component_dependencies %}"
|
||||
"{% component_block 'simple_component' variable %}{% endcomponent_block %}"
|
||||
"{% component 'simple_component' variable %}{% endcomponent %}"
|
||||
)
|
||||
rendered = template.render(Context({"variable": "outer_value"}))
|
||||
self.assertIn("outer_value", rendered, rendered)
|
||||
|
@ -402,29 +348,29 @@ class IsolatedContextSettingTests(SimpleTestCase):
|
|||
):
|
||||
template = Template(
|
||||
"{% load component_tags %}{% component_dependencies %}"
|
||||
"{% component_block 'simple_component' %}{% endcomponent_block %}"
|
||||
"{% component 'simple_component' %}{% endcomponent %}"
|
||||
)
|
||||
rendered = template.render(Context({"variable": "outer_value"}))
|
||||
self.assertNotIn("outer_value", rendered, rendered)
|
||||
|
||||
def test_component_block_includes_variable_with_isolated_context_from_settings(
|
||||
def test_component_includes_variable_with_isolated_context_from_settings(
|
||||
self,
|
||||
):
|
||||
template = Template(
|
||||
"{% load component_tags %}{% component_dependencies %}"
|
||||
"{% component_block 'simple_component' variable %}"
|
||||
"{% endcomponent_block %}"
|
||||
"{% component 'simple_component' variable %}"
|
||||
"{% endcomponent %}"
|
||||
)
|
||||
rendered = template.render(Context({"variable": "outer_value"}))
|
||||
self.assertIn("outer_value", rendered, rendered)
|
||||
|
||||
def test_component_block_excludes_variable_with_isolated_context_from_settings(
|
||||
def test_component_excludes_variable_with_isolated_context_from_settings(
|
||||
self,
|
||||
):
|
||||
template = Template(
|
||||
"{% load component_tags %}{% component_dependencies %}"
|
||||
"{% component_block 'simple_component' %}"
|
||||
"{% endcomponent_block %}"
|
||||
"{% component 'simple_component' %}"
|
||||
"{% endcomponent %}"
|
||||
)
|
||||
rendered = template.render(Context({"variable": "outer_value"}))
|
||||
self.assertNotIn("outer_value", rendered, rendered)
|
||||
|
@ -434,15 +380,7 @@ class OuterContextPropertyTests(SimpleTestCase):
|
|||
def test_outer_context_property_with_component(self):
|
||||
template = Template(
|
||||
"{% load component_tags %}{% component_dependencies %}"
|
||||
"{% component_block 'outer_context_component' only %}{% endcomponent_block %}"
|
||||
)
|
||||
rendered = template.render(Context({"variable": "outer_value"})).strip()
|
||||
self.assertIn("outer_value", rendered, rendered)
|
||||
|
||||
def test_outer_context_property_with_component_block(self):
|
||||
template = Template(
|
||||
"{% load component_tags %}{% component_dependencies %}"
|
||||
"{% component_block 'outer_context_component' only %}{% endcomponent_block %}"
|
||||
"{% component 'outer_context_component' only %}{% endcomponent %}"
|
||||
)
|
||||
rendered = template.render(Context({"variable": "outer_value"})).strip()
|
||||
self.assertIn("outer_value", rendered, rendered)
|
||||
|
|
|
@ -107,7 +107,7 @@ class ComponentMediaRenderingTests(SimpleTestCase):
|
|||
|
||||
template = Template(
|
||||
"{% load component_tags %}{% component_dependencies %}"
|
||||
"{% component_block 'test' variable='foo' %}{% endcomponent_block %}"
|
||||
"{% component 'test' variable='foo' %}{% endcomponent %}"
|
||||
)
|
||||
rendered = create_and_process_template_response(template)
|
||||
self.assertInHTML(
|
||||
|
@ -122,7 +122,7 @@ class ComponentMediaRenderingTests(SimpleTestCase):
|
|||
|
||||
template = Template(
|
||||
"{% load component_tags %}{% component_dependencies %}"
|
||||
"{% component_block 'test' variable='foo' %}{% endcomponent_block %}"
|
||||
"{% component 'test' variable='foo' %}{% endcomponent %}"
|
||||
)
|
||||
rendered = create_and_process_template_response(template)
|
||||
self.assertInHTML(
|
||||
|
@ -137,7 +137,7 @@ class ComponentMediaRenderingTests(SimpleTestCase):
|
|||
|
||||
template = Template(
|
||||
"{% load component_tags %}{% component_dependencies preload='test' %}"
|
||||
"{% component_block 'test' variable='foo' %}{% endcomponent_block %}"
|
||||
"{% component 'test' variable='foo' %}{% endcomponent %}"
|
||||
)
|
||||
rendered = create_and_process_template_response(template)
|
||||
self.assertInHTML(
|
||||
|
@ -152,7 +152,7 @@ class ComponentMediaRenderingTests(SimpleTestCase):
|
|||
|
||||
template = Template(
|
||||
"{% load component_tags %}{% component_dependencies %}"
|
||||
"{% component_block 'test' variable='foo' %}{% endcomponent_block %}"
|
||||
"{% component 'test' variable='foo' %}{% endcomponent %}"
|
||||
)
|
||||
rendered = create_and_process_template_response(template)
|
||||
self.assertNotIn("_RENDERED", rendered)
|
||||
|
@ -169,7 +169,7 @@ class ComponentMediaRenderingTests(SimpleTestCase):
|
|||
|
||||
template = Template(
|
||||
"{% load component_tags %}{% component_css_dependencies %}"
|
||||
"{% component_block 'test' variable='foo' %}{% endcomponent_block %}"
|
||||
"{% component 'test' variable='foo' %}{% endcomponent %}"
|
||||
)
|
||||
rendered = create_and_process_template_response(template)
|
||||
self.assertInHTML(
|
||||
|
@ -183,7 +183,7 @@ class ComponentMediaRenderingTests(SimpleTestCase):
|
|||
|
||||
template = Template(
|
||||
"{% load component_tags %}{% component_js_dependencies %}"
|
||||
"{% component_block 'test' variable='foo' %}{% endcomponent_block %}"
|
||||
"{% component 'test' variable='foo' %}{% endcomponent %}"
|
||||
)
|
||||
rendered = create_and_process_template_response(template)
|
||||
self.assertInHTML('<script src="script.js">', rendered, count=1)
|
||||
|
@ -193,7 +193,7 @@ class ComponentMediaRenderingTests(SimpleTestCase):
|
|||
):
|
||||
component.registry.register(name="test", component=MultistyleComponent)
|
||||
template = Template(
|
||||
"{% load component_tags %}{% component_dependencies %}{% component_block 'test' %}{% endcomponent_block %}"
|
||||
"{% load component_tags %}{% component_dependencies %}{% component 'test' %}{% endcomponent %}"
|
||||
)
|
||||
rendered = create_and_process_template_response(template)
|
||||
self.assertInHTML('<script src="script.js">', rendered, count=1)
|
||||
|
@ -216,7 +216,7 @@ class ComponentMediaRenderingTests(SimpleTestCase):
|
|||
template = Template(
|
||||
"""
|
||||
{% load component_tags %}{% component_js_dependencies %}
|
||||
{% component_block 'test' %}{% endcomponent_block %}
|
||||
{% component 'test' %}{% endcomponent %}
|
||||
"""
|
||||
)
|
||||
rendered = create_and_process_template_response(template)
|
||||
|
@ -240,7 +240,7 @@ class ComponentMediaRenderingTests(SimpleTestCase):
|
|||
template = Template(
|
||||
"""
|
||||
{% load component_tags %}{% component_css_dependencies %}
|
||||
{% component_block 'test' %}{% endcomponent_block %}
|
||||
{% component 'test' %}{% endcomponent %}
|
||||
"""
|
||||
)
|
||||
rendered = create_and_process_template_response(template)
|
||||
|
@ -282,7 +282,7 @@ class ComponentMediaRenderingTests(SimpleTestCase):
|
|||
|
||||
template = Template(
|
||||
"{% load component_tags %}{% component_css_dependencies %}"
|
||||
"{% component_block 'test1' 'variable' %}{% endcomponent_block %}"
|
||||
"{% component 'test1' 'variable' %}{% endcomponent %}"
|
||||
)
|
||||
rendered = create_and_process_template_response(template)
|
||||
self.assertInHTML(
|
||||
|
@ -302,7 +302,7 @@ class ComponentMediaRenderingTests(SimpleTestCase):
|
|||
|
||||
template = Template(
|
||||
"{% load component_tags %}{% component_js_dependencies %}"
|
||||
"{% component_block 'test1' 'variable' %}{% endcomponent_block %}"
|
||||
"{% component 'test1' 'variable' %}{% endcomponent %}"
|
||||
)
|
||||
rendered = create_and_process_template_response(template)
|
||||
self.assertInHTML('<script src="script.js">', rendered, count=1)
|
||||
|
@ -314,7 +314,7 @@ class ComponentMediaRenderingTests(SimpleTestCase):
|
|||
|
||||
template = Template(
|
||||
"{% load component_tags %}{% component_dependencies %}"
|
||||
"{% component_block 'test2' variable='variable' %}{% endcomponent_block %}"
|
||||
"{% component 'test2' variable='variable' %}{% endcomponent %}"
|
||||
)
|
||||
rendered = create_and_process_template_response(template)
|
||||
self.assertInHTML('<script src="script.js">', rendered, count=0)
|
||||
|
@ -338,9 +338,9 @@ class ComponentMediaRenderingTests(SimpleTestCase):
|
|||
template = Template(
|
||||
"""
|
||||
{% load component_tags %}{% component_dependencies %}
|
||||
{% component_block 'test1' variable='variable' %}{% endcomponent_block %}
|
||||
{% component_block 'test2' variable='variable' %}{% endcomponent_block %}
|
||||
{% component_block 'test1' variable='variable' %}{% endcomponent_block %}
|
||||
{% component 'test1' variable='variable' %}{% endcomponent %}
|
||||
{% component 'test2' variable='variable' %}{% endcomponent %}
|
||||
{% component 'test1' variable='variable' %}{% endcomponent %}
|
||||
"""
|
||||
)
|
||||
rendered = create_and_process_template_response(template)
|
||||
|
@ -365,9 +365,9 @@ class ComponentMediaRenderingTests(SimpleTestCase):
|
|||
template = Template(
|
||||
"""
|
||||
{% load component_tags %}{% component_dependencies %}
|
||||
{% component_block 'test1' variable='variable' %}{% endcomponent_block %}
|
||||
{% component_block 'test2' variable='variable' %}{% endcomponent_block %}
|
||||
{% component_block 'test1' variable='variable' %}{% endcomponent_block %}
|
||||
{% component 'test1' variable='variable' %}{% endcomponent %}
|
||||
{% component 'test2' variable='variable' %}{% endcomponent %}
|
||||
{% component 'test1' variable='variable' %}{% endcomponent %}
|
||||
"""
|
||||
)
|
||||
rendered = create_and_process_template_response(template)
|
||||
|
@ -393,7 +393,7 @@ class ComponentMediaRenderingTests(SimpleTestCase):
|
|||
"{% load component_tags %}"
|
||||
"{% component_js_dependencies %}"
|
||||
"{% component_css_dependencies %}"
|
||||
f"{{% component_block '{component_name}' variable='value' %}}{{% endcomponent_block %}}"
|
||||
f"{{% component '{component_name}' variable='value' %}}{{% endcomponent %}}"
|
||||
)
|
||||
rendered = create_and_process_template_response(template)
|
||||
self.assertHTMLEqual(
|
||||
|
|
|
@ -92,8 +92,8 @@ class ComponentTemplateTagTest(SimpleTestCase):
|
|||
|
||||
def inline_to_block(self, tag):
|
||||
return re.sub(
|
||||
r"({% component_block (.*) %}{% endcomponent_block %})",
|
||||
r"{% component_block \2 %}{% endcomponent_block %}",
|
||||
r"({% component (.*) %}{% endcomponent %})",
|
||||
r"{% component \2 %}{% endcomponent %}",
|
||||
tag,
|
||||
)
|
||||
|
||||
|
@ -102,7 +102,7 @@ class ComponentTemplateTagTest(SimpleTestCase):
|
|||
|
||||
simple_tag_tempate = """
|
||||
{% load component_tags %}
|
||||
{% component_block name="test" variable="variable" %}{% endcomponent_block %}
|
||||
{% component name="test" variable="variable" %}{% endcomponent %}
|
||||
"""
|
||||
block_tag_template = self.inline_to_block(simple_tag_tempate)
|
||||
|
||||
|
@ -116,7 +116,7 @@ class ComponentTemplateTagTest(SimpleTestCase):
|
|||
|
||||
simple_tag_tempate = """
|
||||
{% load component_tags %}
|
||||
{% component_block name="test" variable="variable" %}{% endcomponent_block %}
|
||||
{% component name="test" variable="variable" %}{% endcomponent %}
|
||||
"""
|
||||
block_tag_template = self.inline_to_block(simple_tag_tempate)
|
||||
|
||||
|
@ -130,7 +130,7 @@ class ComponentTemplateTagTest(SimpleTestCase):
|
|||
|
||||
simple_tag_tempate = """
|
||||
{% load component_tags %}
|
||||
{% component_block "test" variable="variable" %}{% endcomponent_block %}
|
||||
{% component "test" variable="variable" %}{% endcomponent %}
|
||||
"""
|
||||
block_tag_template = self.inline_to_block(simple_tag_tempate)
|
||||
|
||||
|
@ -144,7 +144,7 @@ class ComponentTemplateTagTest(SimpleTestCase):
|
|||
|
||||
simple_tag_tempate = """
|
||||
{% load component_tags %}
|
||||
{% component_block name="test" variable="variable" variable2="hej" %}{% endcomponent_block %}
|
||||
{% component name="test" variable="variable" variable2="hej" %}{% endcomponent %}
|
||||
"""
|
||||
block_tag_template = self.inline_to_block(simple_tag_tempate)
|
||||
|
||||
|
@ -159,7 +159,7 @@ class ComponentTemplateTagTest(SimpleTestCase):
|
|||
|
||||
simple_tag_tempate = """
|
||||
{% load component_tags %}
|
||||
{% component_block 'test' variable="variable" %}{% endcomponent_block %}
|
||||
{% component 'test' variable="variable" %}{% endcomponent %}
|
||||
"""
|
||||
block_tag_template = self.inline_to_block(simple_tag_tempate)
|
||||
|
||||
|
@ -174,7 +174,7 @@ class ComponentTemplateTagTest(SimpleTestCase):
|
|||
simple_tag_tempate = """
|
||||
{% load component_tags %}
|
||||
{% with component_name="test" %}
|
||||
{% component_block component_name variable="variable" %}{% endcomponent_block %}
|
||||
{% component component_name variable="variable" %}{% endcomponent %}
|
||||
{% endwith %}
|
||||
"""
|
||||
block_tag_template = self.inline_to_block(simple_tag_tempate)
|
||||
|
@ -190,7 +190,7 @@ class ComponentTemplateTagTest(SimpleTestCase):
|
|||
simple_tag_tempate = """
|
||||
{% load component_tags %}
|
||||
{% with component_name="BLAHONGA" %}
|
||||
{% component_block component_name variable="variable" %}{% endcomponent_block %}
|
||||
{% component component_name variable="variable" %}{% endcomponent %}
|
||||
{% endwith %}
|
||||
"""
|
||||
block_tag_template = self.inline_to_block(simple_tag_tempate)
|
||||
|
@ -214,14 +214,14 @@ class ComponentSlottedTemplateTagTest(SimpleTestCase):
|
|||
template = Template(
|
||||
"""
|
||||
{% load component_tags %}
|
||||
{% component_block "test1" %}
|
||||
{% component "test1" %}
|
||||
{% fill "header" %}
|
||||
Custom header
|
||||
{% endfill %}
|
||||
{% fill "main" %}
|
||||
{% component_block "test2" variable="variable" %}{% endcomponent_block %}
|
||||
{% component "test2" variable="variable" %}{% endcomponent %}
|
||||
{% endfill %}
|
||||
{% endcomponent_block %}
|
||||
{% endcomponent %}
|
||||
"""
|
||||
)
|
||||
rendered = template.render(Context({}))
|
||||
|
@ -244,14 +244,14 @@ class ComponentSlottedTemplateTagTest(SimpleTestCase):
|
|||
"""
|
||||
{% load component_tags %}
|
||||
{% with my_first_variable="test123" %}
|
||||
{% component_block "test1" variable="test456" %}
|
||||
{% component "test1" variable="test456" %}
|
||||
{% fill "main" %}
|
||||
{{ my_first_variable }} - {{ variable }}
|
||||
{% endfill %}
|
||||
{% fill "footer" %}
|
||||
{{ my_second_variable }}
|
||||
{% endfill %}
|
||||
{% endcomponent_block %}
|
||||
{% endcomponent %}
|
||||
{% endwith %}
|
||||
"""
|
||||
)
|
||||
|
@ -271,7 +271,7 @@ class ComponentSlottedTemplateTagTest(SimpleTestCase):
|
|||
def test_slotted_template_no_slots_filled(self):
|
||||
component.registry.register(name="test", component=SlottedComponent)
|
||||
|
||||
template = Template('{% load component_tags %}{% component_block "test" %}{% endcomponent_block %}')
|
||||
template = Template('{% load component_tags %}{% component "test" %}{% endcomponent %}')
|
||||
rendered = template.render(Context({}))
|
||||
|
||||
self.assertHTMLEqual(
|
||||
|
@ -290,7 +290,7 @@ class ComponentSlottedTemplateTagTest(SimpleTestCase):
|
|||
template = Template(
|
||||
"""
|
||||
{% load component_tags %}
|
||||
{% component_block "test" %}{% endcomponent_block %}
|
||||
{% component "test" %}{% endcomponent %}
|
||||
"""
|
||||
)
|
||||
rendered = template.render(Context({}))
|
||||
|
@ -302,7 +302,7 @@ class ComponentSlottedTemplateTagTest(SimpleTestCase):
|
|||
template = Template(
|
||||
"""
|
||||
{% load component_tags %}
|
||||
{% component_block 'test' %}{% endcomponent_block %}
|
||||
{% component 'test' %}{% endcomponent %}
|
||||
"""
|
||||
)
|
||||
rendered = template.render(Context({}))
|
||||
|
@ -315,9 +315,9 @@ class ComponentSlottedTemplateTagTest(SimpleTestCase):
|
|||
"""
|
||||
{% load component_tags %}
|
||||
{% with slotname="header" %}
|
||||
{% component_block 'test' %}
|
||||
{% component 'test' %}
|
||||
{% fill slotname %}Hi there!{% endfill %}
|
||||
{% endcomponent_block %}
|
||||
{% endcomponent %}
|
||||
{% endwith %}
|
||||
"""
|
||||
)
|
||||
|
@ -339,8 +339,8 @@ class ComponentSlottedTemplateTagTest(SimpleTestCase):
|
|||
template = Template(
|
||||
"""
|
||||
{% load component_tags %}
|
||||
{% component_block 'test' %}
|
||||
{% endcomponent_block %}
|
||||
{% component 'test' %}
|
||||
{% endcomponent %}
|
||||
"""
|
||||
)
|
||||
with self.assertRaises(TemplateSyntaxError):
|
||||
|
@ -352,9 +352,9 @@ class ComponentSlottedTemplateTagTest(SimpleTestCase):
|
|||
template = Template(
|
||||
"""
|
||||
{% load component_tags %}
|
||||
{% component_block 'test_comp' %}
|
||||
{% component 'test_comp' %}
|
||||
<p>This fills the 'main' slot.</p>
|
||||
{% endcomponent_block %}
|
||||
{% endcomponent %}
|
||||
"""
|
||||
)
|
||||
|
||||
|
@ -372,9 +372,9 @@ class ComponentSlottedTemplateTagTest(SimpleTestCase):
|
|||
template = Template(
|
||||
"""
|
||||
{% load component_tags %}
|
||||
{% component_block 'test_comp' %}
|
||||
{% component 'test_comp' %}
|
||||
{% fill "main" %}<p>This fills the 'main' slot.</p>{% endfill %}
|
||||
{% endcomponent_block %}
|
||||
{% endcomponent %}
|
||||
"""
|
||||
)
|
||||
expected = """
|
||||
|
@ -390,14 +390,14 @@ class ComponentSlottedTemplateTagTest(SimpleTestCase):
|
|||
template = Template(
|
||||
"""
|
||||
{% load component_tags %}
|
||||
{% component_block 'test_comp' %}
|
||||
{% endcomponent_block %}
|
||||
{% component 'test_comp' %}
|
||||
{% endcomponent %}
|
||||
"""
|
||||
)
|
||||
with self.assertRaises(TemplateSyntaxError):
|
||||
template.render(Context({}))
|
||||
|
||||
def test_fill_tag_can_occur_within_component_block_nested_in_implicit_fill(
|
||||
def test_fill_tag_can_occur_within_component_nested_in_implicit_fill(
|
||||
self,
|
||||
):
|
||||
component.registry.register("test_comp", ComponentWithDefaultSlot)
|
||||
|
@ -406,13 +406,13 @@ class ComponentSlottedTemplateTagTest(SimpleTestCase):
|
|||
template = Template(
|
||||
"""
|
||||
{% load component_tags %}
|
||||
{% component_block 'test_comp' %}
|
||||
{% component_block "slotted" %}
|
||||
{% component 'test_comp' %}
|
||||
{% component "slotted" %}
|
||||
{% fill "header" %}This Is Allowed{% endfill %}
|
||||
{% fill "main" %}{% endfill %}
|
||||
{% fill "footer" %}{% endfill %}
|
||||
{% endcomponent_block %}
|
||||
{% endcomponent_block %}
|
||||
{% endcomponent %}
|
||||
{% endcomponent %}
|
||||
"""
|
||||
)
|
||||
expected = """
|
||||
|
@ -436,10 +436,10 @@ class ComponentSlottedTemplateTagTest(SimpleTestCase):
|
|||
Template(
|
||||
"""
|
||||
{% load component_tags %}
|
||||
{% component_block 'test_comp' %}
|
||||
{% component 'test_comp' %}
|
||||
{% fill "main" %}Main content{% endfill %}
|
||||
<p>And add this too!</p>
|
||||
{% endcomponent_block %}
|
||||
{% endcomponent %}
|
||||
"""
|
||||
)
|
||||
|
||||
|
@ -448,13 +448,13 @@ class ComponentSlottedTemplateTagTest(SimpleTestCase):
|
|||
Template(
|
||||
"""
|
||||
{% load component_tags %}
|
||||
{% component_block 'test_comp' %}
|
||||
{% component 'test_comp' %}
|
||||
<p>Main Content</p>
|
||||
{% comment %}
|
||||
This won't show up in the rendered HTML
|
||||
{% endcomment %}
|
||||
{# Nor will this #}
|
||||
{% endcomponent_block %}
|
||||
{% endcomponent %}
|
||||
"""
|
||||
)
|
||||
self.assertTrue(True)
|
||||
|
@ -464,10 +464,10 @@ class ComponentSlottedTemplateTagTest(SimpleTestCase):
|
|||
template = Template(
|
||||
"""
|
||||
{% load component_tags %}
|
||||
{% component_block 'test_comp' %}
|
||||
{% component 'test_comp' %}
|
||||
<p>This shouldn't work because the included component doesn't mark
|
||||
any of its slots as 'default'</p>
|
||||
{% endcomponent_block %}
|
||||
{% endcomponent %}
|
||||
"""
|
||||
)
|
||||
with self.assertRaises(TemplateSyntaxError):
|
||||
|
@ -496,14 +496,14 @@ class ComponentSlottedTemplateTagTest(SimpleTestCase):
|
|||
template = Template(
|
||||
"""
|
||||
{% load component_tags %}
|
||||
{% component_block "test1" %}
|
||||
{% component "test1" %}
|
||||
{% fill "haeder" %}
|
||||
Custom header
|
||||
{% endfill %}
|
||||
{% fill "main" %}
|
||||
main content
|
||||
{% endfill %}
|
||||
{% endcomponent_block %}
|
||||
{% endcomponent %}
|
||||
"""
|
||||
)
|
||||
with self.assertRaises(TemplateSyntaxError):
|
||||
|
@ -532,7 +532,7 @@ class SlottedTemplateRegressionTests(SimpleTestCase):
|
|||
template = Template(
|
||||
"""
|
||||
{% load component_tags %}
|
||||
{% component_block 'test' %}{% endcomponent_block %}
|
||||
{% component 'test' %}{% endcomponent %}
|
||||
"""
|
||||
)
|
||||
rendered = template.render(Context({}))
|
||||
|
@ -548,14 +548,14 @@ class SlottedTemplateRegressionTests(SimpleTestCase):
|
|||
""",
|
||||
)
|
||||
|
||||
def test_component_block_accepts_provided_and_default_parameters(self):
|
||||
def test_component_accepts_provided_and_default_parameters(self):
|
||||
component.registry.register(name="test", component=ComponentWithProvidedAndDefaultParameters)
|
||||
|
||||
template = Template(
|
||||
"""
|
||||
{% load component_tags %}
|
||||
{% component_block "test" variable="provided value" %}
|
||||
{% endcomponent_block %}
|
||||
{% component "test" variable="provided value" %}
|
||||
{% endcomponent %}
|
||||
"""
|
||||
)
|
||||
rendered = template.render(Context({}))
|
||||
|
@ -576,10 +576,8 @@ class MultiComponentTests(SimpleTestCase):
|
|||
def make_template(self, first_component_slot="", second_component_slot=""):
|
||||
return Template(
|
||||
"{% load component_tags %}"
|
||||
"{% component_block 'first_component' %}" + first_component_slot + "{% endcomponent_block %}"
|
||||
"{% component_block 'second_component' variable='xyz' %}"
|
||||
+ second_component_slot
|
||||
+ "{% endcomponent_block %}"
|
||||
"{% component 'first_component' %}" + first_component_slot + "{% endcomponent %}"
|
||||
"{% component 'second_component' variable='xyz' %}" + second_component_slot + "{% endcomponent %}"
|
||||
)
|
||||
|
||||
def expected_result(self, first_component_slot="", second_component_slot=""):
|
||||
|
@ -663,7 +661,7 @@ class TemplateInstrumentationTest(SimpleTestCase):
|
|||
template = Template(
|
||||
"""
|
||||
{% load component_tags %}
|
||||
{% component_block 'test_component' %}{% endcomponent_block %}
|
||||
{% component 'test_component' %}{% endcomponent %}
|
||||
""",
|
||||
name="root",
|
||||
)
|
||||
|
@ -674,11 +672,11 @@ class TemplateInstrumentationTest(SimpleTestCase):
|
|||
template = Template(
|
||||
"""
|
||||
{% load component_tags %}
|
||||
{% component_block 'test_component' %}
|
||||
{% component 'test_component' %}
|
||||
{% fill "header" %}
|
||||
{% component_block 'inner_component' variable='foo' %}{% endcomponent_block %}
|
||||
{% component 'inner_component' variable='foo' %}{% endcomponent %}
|
||||
{% endfill %}
|
||||
{% endcomponent_block %}
|
||||
{% endcomponent %}
|
||||
""",
|
||||
name="root",
|
||||
)
|
||||
|
@ -706,7 +704,7 @@ class NestedSlotTests(SimpleTestCase):
|
|||
template = Template(
|
||||
"""
|
||||
{% load component_tags %}
|
||||
{% component_block 'test' %}{% endcomponent_block %}
|
||||
{% component 'test' %}{% endcomponent %}
|
||||
"""
|
||||
)
|
||||
rendered = template.render(Context({}))
|
||||
|
@ -716,7 +714,7 @@ class NestedSlotTests(SimpleTestCase):
|
|||
template = Template(
|
||||
"""
|
||||
{% load component_tags %}
|
||||
{% component_block 'test' %}{% fill 'inner' %}Override{% endfill %}{% endcomponent_block %}
|
||||
{% component 'test' %}{% fill 'inner' %}Override{% endfill %}{% endcomponent %}
|
||||
"""
|
||||
)
|
||||
rendered = template.render(Context({}))
|
||||
|
@ -726,7 +724,7 @@ class NestedSlotTests(SimpleTestCase):
|
|||
template = Template(
|
||||
"""
|
||||
{% load component_tags %}
|
||||
{% component_block 'test' %}{% fill 'outer' %}<p>Override</p>{% endfill %}{% endcomponent_block %}
|
||||
{% component 'test' %}{% fill 'outer' %}<p>Override</p>{% endfill %}{% endcomponent %}
|
||||
"""
|
||||
)
|
||||
rendered = template.render(Context({}))
|
||||
|
@ -736,10 +734,10 @@ class NestedSlotTests(SimpleTestCase):
|
|||
template = Template(
|
||||
"""
|
||||
{% load component_tags %}
|
||||
{% component_block 'test' %}
|
||||
{% component 'test' %}
|
||||
{% fill 'outer' %}<p>Override</p>{% endfill %}
|
||||
{% fill 'inner' %}<p>Will not appear</p>{% endfill %}
|
||||
{% endcomponent_block %}
|
||||
{% endcomponent %}
|
||||
"""
|
||||
)
|
||||
rendered = template.render(Context({}))
|
||||
|
@ -768,10 +766,10 @@ class ConditionalSlotTests(SimpleTestCase):
|
|||
template = Template(
|
||||
"""
|
||||
{% load component_tags %}
|
||||
{% component_block 'test' %}
|
||||
{% component 'test' %}
|
||||
{% fill 'a' %}Override A{% endfill %}
|
||||
{% fill 'b' %}Override B{% endfill %}
|
||||
{% endcomponent_block %}
|
||||
{% endcomponent %}
|
||||
"""
|
||||
)
|
||||
rendered = template.render(Context({}))
|
||||
|
@ -781,8 +779,8 @@ class ConditionalSlotTests(SimpleTestCase):
|
|||
template = Template(
|
||||
"""
|
||||
{% load component_tags %}
|
||||
{% component_block 'test' branch='a' %}{% endcomponent_block %}
|
||||
{% component_block 'test' branch='b' %}{% endcomponent_block %}
|
||||
{% component 'test' branch='a' %}{% endcomponent %}
|
||||
{% component 'test' branch='b' %}{% endcomponent %}
|
||||
"""
|
||||
)
|
||||
rendered = template.render(Context({}))
|
||||
|
@ -792,12 +790,12 @@ class ConditionalSlotTests(SimpleTestCase):
|
|||
template = Template(
|
||||
"""
|
||||
{% load component_tags %}
|
||||
{% component_block 'test' branch='a' %}
|
||||
{% component 'test' branch='a' %}
|
||||
{% fill 'b' %}Override B{% endfill %}
|
||||
{% endcomponent_block %}
|
||||
{% component_block 'test' branch='b' %}
|
||||
{% endcomponent %}
|
||||
{% component 'test' branch='b' %}
|
||||
{% fill 'b' %}Override B{% endfill %}
|
||||
{% endcomponent_block %}
|
||||
{% endcomponent %}
|
||||
"""
|
||||
)
|
||||
rendered = template.render(Context({}))
|
||||
|
@ -807,14 +805,14 @@ class ConditionalSlotTests(SimpleTestCase):
|
|||
template = Template(
|
||||
"""
|
||||
{% load component_tags %}
|
||||
{% component_block 'test' branch='a' %}
|
||||
{% component 'test' branch='a' %}
|
||||
{% fill 'a' %}Override A{% endfill %}
|
||||
{% fill 'b' %}Override B{% endfill %}
|
||||
{% endcomponent_block %}
|
||||
{% component_block 'test' branch='b' %}
|
||||
{% endcomponent %}
|
||||
{% component 'test' branch='b' %}
|
||||
{% fill 'a' %}Override A{% endfill %}
|
||||
{% fill 'b' %}Override B{% endfill %}
|
||||
{% endcomponent_block %}
|
||||
{% endcomponent %}
|
||||
"""
|
||||
)
|
||||
rendered = template.render(Context({}))
|
||||
|
@ -837,11 +835,11 @@ class SlotSuperTests(SimpleTestCase):
|
|||
template = Template(
|
||||
"""
|
||||
{% load component_tags %}
|
||||
{% component_block "test" %}
|
||||
{% component "test" %}
|
||||
{% fill "header" as "header" %}Before: {{ header.default }}{% endfill %}
|
||||
{% fill "main" as "main" %}{{ main.default }}{% endfill %}
|
||||
{% fill "footer" as "footer" %}{{ footer.default }}, after{% endfill %}
|
||||
{% endcomponent_block %}
|
||||
{% endcomponent %}
|
||||
"""
|
||||
)
|
||||
rendered = template.render(Context({}))
|
||||
|
@ -861,9 +859,9 @@ class SlotSuperTests(SimpleTestCase):
|
|||
template = Template(
|
||||
"""
|
||||
{% load component_tags %}
|
||||
{% component_block "test" %}
|
||||
{% component "test" %}
|
||||
{% fill "header" as "header" %}First: {{ header.default }}; Second: {{ header.default }}{% endfill %}
|
||||
{% endcomponent_block %}
|
||||
{% endcomponent %}
|
||||
"""
|
||||
)
|
||||
rendered = template.render(Context({}))
|
||||
|
@ -883,7 +881,7 @@ class SlotSuperTests(SimpleTestCase):
|
|||
template = Template(
|
||||
"""
|
||||
{% load component_tags %}
|
||||
{% component_block "test" %}
|
||||
{% component "test" %}
|
||||
{% fill "header" as "header" %}
|
||||
{% for i in range %}
|
||||
{% if forloop.first %}First {{ header.default }}
|
||||
|
@ -891,7 +889,7 @@ class SlotSuperTests(SimpleTestCase):
|
|||
{% endif %}
|
||||
{% endfor %}
|
||||
{% endfill %}
|
||||
{% endcomponent_block %}
|
||||
{% endcomponent %}
|
||||
"""
|
||||
)
|
||||
rendered = template.render(Context({"range": range(3)}))
|
||||
|
@ -928,9 +926,9 @@ class TemplateSyntaxErrorTests(SimpleTestCase):
|
|||
Template(
|
||||
"""
|
||||
{% load component_tags %}
|
||||
{% component_block "test" %}
|
||||
{% component "test" %}
|
||||
{{ anything }}
|
||||
{% endcomponent_block %}
|
||||
{% endcomponent %}
|
||||
"""
|
||||
)
|
||||
|
||||
|
@ -941,9 +939,9 @@ class TemplateSyntaxErrorTests(SimpleTestCase):
|
|||
Template(
|
||||
"""
|
||||
{% load component_tags %}
|
||||
{% component_block "test" %}
|
||||
{% component "test" %}
|
||||
Text
|
||||
{% endcomponent_block %}
|
||||
{% endcomponent %}
|
||||
"""
|
||||
)
|
||||
|
||||
|
@ -952,20 +950,20 @@ class TemplateSyntaxErrorTests(SimpleTestCase):
|
|||
Template(
|
||||
"""
|
||||
{% load component_tags %}
|
||||
{% component_block "test" %}
|
||||
{% component "test" %}
|
||||
{% if True %}
|
||||
{% fill "header" %}{% endfill %}
|
||||
{% endif %}
|
||||
{% endcomponent_block %}
|
||||
{% endcomponent %}
|
||||
"""
|
||||
)
|
||||
|
||||
def test_unclosed_component_block_is_error(self):
|
||||
def test_unclosed_component_is_error(self):
|
||||
with self.assertRaises(TemplateSyntaxError):
|
||||
Template(
|
||||
"""
|
||||
{% load component_tags %}
|
||||
{% component_block "test" %}
|
||||
{% component "test" %}
|
||||
{% fill "header" %}{% endfill %}
|
||||
"""
|
||||
)
|
||||
|
@ -984,11 +982,11 @@ class TemplateSyntaxErrorTests(SimpleTestCase):
|
|||
Template(
|
||||
"""
|
||||
{% load component_tags %}
|
||||
{% component_block "broken_component" %}
|
||||
{% component "broken_component" %}
|
||||
{% fill "header" %}Custom header {% endfill %}
|
||||
{% fill "main" %}Custom main{% endfill %}
|
||||
{% fill "footer" %}Custom footer{% endfill %}
|
||||
{% endcomponent_block %}
|
||||
{% endcomponent %}
|
||||
"""
|
||||
).render(Context({}))
|
||||
|
||||
|
@ -997,10 +995,10 @@ class TemplateSyntaxErrorTests(SimpleTestCase):
|
|||
Template(
|
||||
"""
|
||||
{% load component_tags %}
|
||||
{% component_block "broken_component" %}
|
||||
{% component "broken_component" %}
|
||||
{% fill "header" %}Custom header {% endfill %}
|
||||
{% fill "header" %}Other header{% endfill %}
|
||||
{% endcomponent_block %}
|
||||
{% endcomponent %}
|
||||
"""
|
||||
).render(Context({}))
|
||||
|
||||
|
@ -1009,8 +1007,8 @@ class TemplateSyntaxErrorTests(SimpleTestCase):
|
|||
Template(
|
||||
"""
|
||||
{% load component_tags %}
|
||||
{% component_block "nonunique_slot_component" %}
|
||||
{% endcomponent_block %}
|
||||
{% component "nonunique_slot_component" %}
|
||||
{% endcomponent %}
|
||||
"""
|
||||
).render(Context({}))
|
||||
|
||||
|
@ -1031,7 +1029,7 @@ class ComponentNestingTests(SimpleTestCase):
|
|||
template = Template(
|
||||
"""
|
||||
{% load component_tags %}
|
||||
{% component_block "dashboard" %}{% endcomponent_block %}
|
||||
{% component "dashboard" %}{% endcomponent %}
|
||||
"""
|
||||
)
|
||||
rendered = template.render(Context({"items": [1, 2, 3]}))
|
||||
|
@ -1058,9 +1056,9 @@ class ComponentNestingTests(SimpleTestCase):
|
|||
template = Template(
|
||||
"""
|
||||
{% load component_tags %}
|
||||
{% component_block "dashboard" %}
|
||||
{% component "dashboard" %}
|
||||
{% fill "header" as "h" %} Hello! {{ h.default }} {% endfill %}
|
||||
{% endcomponent_block %}
|
||||
{% endcomponent %}
|
||||
"""
|
||||
)
|
||||
rendered = template.render(Context({"items": [1, 2]}))
|
||||
|
@ -1111,7 +1109,7 @@ class ConditionalIfFilledSlotsTests(SimpleTestCase):
|
|||
def test_simple_component_with_conditional_slot(self):
|
||||
template = """
|
||||
{% load component_tags %}
|
||||
{% component_block "conditional_slots" %}{% endcomponent_block %}
|
||||
{% component "conditional_slots" %}{% endcomponent %}
|
||||
"""
|
||||
expected = """
|
||||
<div class="frontmatter-component">
|
||||
|
@ -1123,12 +1121,12 @@ class ConditionalIfFilledSlotsTests(SimpleTestCase):
|
|||
rendered = Template(template).render(Context({}))
|
||||
self.assertHTMLEqual(rendered, expected)
|
||||
|
||||
def test_component_block_with_filled_conditional_slot(self):
|
||||
def test_component_with_filled_conditional_slot(self):
|
||||
template = """
|
||||
{% load component_tags %}
|
||||
{% component_block "conditional_slots" %}
|
||||
{% component "conditional_slots" %}
|
||||
{% fill "subtitle" %} My subtitle {% endfill %}
|
||||
{% endcomponent_block %}
|
||||
{% endcomponent %}
|
||||
"""
|
||||
expected = """
|
||||
<div class="frontmatter-component">
|
||||
|
@ -1146,9 +1144,9 @@ class ConditionalIfFilledSlotsTests(SimpleTestCase):
|
|||
def test_elif_of_complex_conditional_slots(self):
|
||||
template = """
|
||||
{% load component_tags %}
|
||||
{% component_block "complex_conditional_slots" %}
|
||||
{% component "complex_conditional_slots" %}
|
||||
{% fill "alt_subtitle" %} A different subtitle {% endfill %}
|
||||
{% endcomponent_block %}
|
||||
{% endcomponent %}
|
||||
"""
|
||||
expected = """
|
||||
<div class="frontmatter-component">
|
||||
|
@ -1166,8 +1164,8 @@ class ConditionalIfFilledSlotsTests(SimpleTestCase):
|
|||
def test_else_of_complex_conditional_slots(self):
|
||||
template = """
|
||||
{% load component_tags %}
|
||||
{% component_block "complex_conditional_slots" %}
|
||||
{% endcomponent_block %}
|
||||
{% component "complex_conditional_slots" %}
|
||||
{% endcomponent %}
|
||||
"""
|
||||
expected = """
|
||||
<div class="frontmatter-component">
|
||||
|
@ -1180,12 +1178,12 @@ class ConditionalIfFilledSlotsTests(SimpleTestCase):
|
|||
rendered = Template(template).render(Context({}))
|
||||
self.assertHTMLEqual(rendered, expected)
|
||||
|
||||
def test_component_block_with_negated_conditional_slot(self):
|
||||
def test_component_with_negated_conditional_slot(self):
|
||||
template = """
|
||||
{% load component_tags %}
|
||||
{% component_block "negated_conditional_slot" %}
|
||||
{% component "negated_conditional_slot" %}
|
||||
{# Whoops! Forgot to fill a slot! #}
|
||||
{% endcomponent_block %}
|
||||
{% endcomponent %}
|
||||
"""
|
||||
expected = """
|
||||
<div class="frontmatter-component">
|
||||
|
@ -1217,13 +1215,13 @@ class RegressionTests(SimpleTestCase):
|
|||
{% extends "extendable_template_with_blocks.html" %}
|
||||
{% load component_tags %}
|
||||
{% block body %}
|
||||
{% component_block "slotted_component" %}
|
||||
{% component "slotted_component" %}
|
||||
{% fill "header" %}{% endfill %}
|
||||
{% fill "main" %}
|
||||
TEST
|
||||
{% endfill %}
|
||||
{% fill "footer" %}{% endfill %}
|
||||
{% endcomponent_block %}
|
||||
{% endcomponent %}
|
||||
{% endblock %}
|
||||
"""
|
||||
rendered = Template(template).render(Context())
|
||||
|
@ -1266,11 +1264,11 @@ class IterationFillTest(SimpleTestCase):
|
|||
template = Template(
|
||||
"""
|
||||
{% load component_tags %}
|
||||
{% component_block "slot_in_a_loop" objects=objects %}
|
||||
{% component "slot_in_a_loop" objects=objects %}
|
||||
{% fill "slot_inner" %}
|
||||
{{ object }}
|
||||
{% endfill %}
|
||||
{% endcomponent_block %}
|
||||
{% endcomponent %}
|
||||
"""
|
||||
)
|
||||
objects = ["OBJECT1", "OBJECT2"]
|
||||
|
@ -1290,12 +1288,12 @@ class IterationFillTest(SimpleTestCase):
|
|||
template = Template(
|
||||
"""
|
||||
{% load component_tags %}
|
||||
{% component_block "slot_in_a_loop" objects=objects %}
|
||||
{% component "slot_in_a_loop" objects=objects %}
|
||||
{% fill "slot_inner" %}
|
||||
{{ outer_scope_variable }}
|
||||
{{ object }}
|
||||
{% endfill %}
|
||||
{% endcomponent_block %}
|
||||
{% endcomponent %}
|
||||
"""
|
||||
)
|
||||
objects = ["OBJECT1", "OBJECT2"]
|
||||
|
@ -1329,15 +1327,15 @@ class IterationFillTest(SimpleTestCase):
|
|||
template = Template(
|
||||
"""
|
||||
{% load component_tags %}
|
||||
{% component_block "slot_in_a_loop" objects=objects %}
|
||||
{% component "slot_in_a_loop" objects=objects %}
|
||||
{% fill "slot_inner" %}
|
||||
{% component_block "slot_in_a_loop" objects=object.inner %}
|
||||
{% component "slot_in_a_loop" objects=object.inner %}
|
||||
{% fill "slot_inner" %}
|
||||
{{ object }}
|
||||
{% endfill %}
|
||||
{% endcomponent_block %}
|
||||
{% endcomponent %}
|
||||
{% endfill %}
|
||||
{% endcomponent_block %}
|
||||
{% endcomponent %}
|
||||
"""
|
||||
)
|
||||
rendered = template.render(Context({"objects": objects}))
|
||||
|
@ -1363,17 +1361,17 @@ class IterationFillTest(SimpleTestCase):
|
|||
template = Template(
|
||||
"""
|
||||
{% load component_tags %}
|
||||
{% component_block "slot_in_a_loop" objects=objects %}
|
||||
{% component "slot_in_a_loop" objects=objects %}
|
||||
{% fill "slot_inner" %}
|
||||
{{ outer_scope_variable_1 }}
|
||||
{% component_block "slot_in_a_loop" objects=object.inner %}
|
||||
{% component "slot_in_a_loop" objects=object.inner %}
|
||||
{% fill "slot_inner" %}
|
||||
{{ outer_scope_variable_2 }}
|
||||
{{ object }}
|
||||
{% endfill %}
|
||||
{% endcomponent_block %}
|
||||
{% endcomponent %}
|
||||
{% endfill %}
|
||||
{% endcomponent_block %}
|
||||
{% endcomponent %}
|
||||
"""
|
||||
)
|
||||
rendered = template.render(
|
||||
|
@ -1413,15 +1411,15 @@ class IterationFillTest(SimpleTestCase):
|
|||
template = Template(
|
||||
"""
|
||||
{% load component_tags %}
|
||||
{% component_block "slot_in_a_loop" objects=objects %}
|
||||
{% component "slot_in_a_loop" objects=objects %}
|
||||
{% fill "slot_inner" %}
|
||||
{% component_block "slot_in_a_loop" objects=object.inner %}
|
||||
{% component "slot_in_a_loop" objects=object.inner %}
|
||||
{% fill "slot_inner" as "super_slot_inner" %}
|
||||
{{ super_slot_inner.default }}
|
||||
{% endfill %}
|
||||
{% endcomponent_block %}
|
||||
{% endcomponent %}
|
||||
{% endfill %}
|
||||
{% endcomponent_block %}
|
||||
{% endcomponent %}
|
||||
"""
|
||||
)
|
||||
rendered = template.render(Context({"objects": objects}))
|
||||
|
@ -1449,17 +1447,17 @@ class IterationFillTest(SimpleTestCase):
|
|||
template = Template(
|
||||
"""
|
||||
{% load component_tags %}
|
||||
{% component_block "slot_in_a_loop" objects=objects %}
|
||||
{% component "slot_in_a_loop" objects=objects %}
|
||||
{% fill "slot_inner" %}
|
||||
{{ outer_scope_variable_1 }}
|
||||
{% component_block "slot_in_a_loop" objects=object.inner %}
|
||||
{% component "slot_in_a_loop" objects=object.inner %}
|
||||
{% fill "slot_inner" as "super_slot_inner" %}
|
||||
{{ outer_scope_variable_2 }}
|
||||
{{ super_slot_inner.default }}
|
||||
{% endfill %}
|
||||
{% endcomponent_block %}
|
||||
{% endcomponent %}
|
||||
{% endfill %}
|
||||
{% endcomponent_block %}
|
||||
{% endcomponent %}
|
||||
"""
|
||||
)
|
||||
rendered = template.render(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue