Deployed 04737412 to dev with MkDocs 1.6.1 and mike 2.1.3

This commit is contained in:
github-actions 2025-06-05 06:52:55 +00:00
parent f764061f72
commit 3bfa6e700f
48 changed files with 122 additions and 125 deletions

View file

@ -9,7 +9,7 @@
<a id=__codelineno-0-9 name=__codelineno-0-9 href=#__codelineno-0-9></a> <span class=s2>&quot;my_template.html&quot;</span><span class=p>,</span>
<a id=__codelineno-0-10 name=__codelineno-0-10 href=#__codelineno-0-10></a> <span class=n>context</span><span class=o>=</span><span class=p>{</span><span class=s2>&quot;DJC_DEPS_STRATEGY&quot;</span><span class=p>:</span> <span class=s2>&quot;ignore&quot;</span><span class=p>},</span>
<a id=__codelineno-0-11 name=__codelineno-0-11 href=#__codelineno-0-11></a><span class=p>)</span>
</code></pre></div> <p>In fact, you can set the <code>DJC_DEPS_STRATEGY</code> context key to any of the strategies:</p> <ul> <li><code>"document"</code></li> <li><code>"fragment"</code></li> <li><code>"simple"</code></li> <li><code>"prepend"</code></li> <li><code>"append"</code></li> <li><code>"ignore"</code></li> </ul> <p>See <a href=https://django-components.github.io/django-components/0.140/concepts/advanced/rendering_js_css/ >Dependencies rendering</a> for more info.</p> </li> </ul> <p><strong>Typing</strong></p> <ul> <li> <p>Component typing no longer uses generics. Instead, the types are now defined as class attributes of the component class.</p> <p>Before:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-1-1 name=__codelineno-1-1 href=#__codelineno-1-1></a><span class=n>Args</span> <span class=o>=</span> <span class=n>Tuple</span><span class=p>[</span><span class=nb>float</span><span class=p>,</span> <span class=nb>str</span><span class=p>]</span>
</code></pre></div> <p>In fact, you can set the <code>DJC_DEPS_STRATEGY</code> context key to any of the strategies:</p> <ul> <li><code>"document"</code></li> <li><code>"fragment"</code></li> <li><code>"simple"</code></li> <li><code>"prepend"</code></li> <li><code>"append"</code></li> <li><code>"ignore"</code></li> </ul> <p>See <a href=https://django-components.github.io/django-components/0.140.1/concepts/advanced/rendering_js_css/ >Dependencies rendering</a> for more info.</p> </li> </ul> <p><strong>Typing</strong></p> <ul> <li> <p>Component typing no longer uses generics. Instead, the types are now defined as class attributes of the component class.</p> <p>Before:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-1-1 name=__codelineno-1-1 href=#__codelineno-1-1></a><span class=n>Args</span> <span class=o>=</span> <span class=n>Tuple</span><span class=p>[</span><span class=nb>float</span><span class=p>,</span> <span class=nb>str</span><span class=p>]</span>
<a id=__codelineno-1-2 name=__codelineno-1-2 href=#__codelineno-1-2></a>
<a id=__codelineno-1-3 name=__codelineno-1-3 href=#__codelineno-1-3></a><span class=k>class</span><span class=w> </span><span class=nc>Button</span><span class=p>(</span><span class=n>Component</span><span class=p>[</span><span class=n>Args</span><span class=p>]):</span>
<a id=__codelineno-1-4 name=__codelineno-1-4 href=#__codelineno-1-4></a> <span class=k>pass</span>
@ -17,7 +17,7 @@
<a id=__codelineno-2-2 name=__codelineno-2-2 href=#__codelineno-2-2></a> <span class=k>class</span><span class=w> </span><span class=nc>Args</span><span class=p>(</span><span class=n>NamedTuple</span><span class=p>):</span>
<a id=__codelineno-2-3 name=__codelineno-2-3 href=#__codelineno-2-3></a> <span class=n>size</span><span class=p>:</span> <span class=nb>float</span>
<a id=__codelineno-2-4 name=__codelineno-2-4 href=#__codelineno-2-4></a> <span class=n>text</span><span class=p>:</span> <span class=nb>str</span>
</code></pre></div> <p>See <a href=https://django-components.github.io/django-components/0.140/concepts/fundamentals/typing_and_validation/#migrating-from-generics-to-class-attributes>Migrating from generics to class attributes</a> for more info.</p> </li> <li> <p>Removed <code>EmptyTuple</code> and <code>EmptyDict</code> types. Instead, there is now a single <code>Empty</code> type.</p> <div class=highlight><pre><span></span><code><a id=__codelineno-3-1 name=__codelineno-3-1 href=#__codelineno-3-1></a><span class=kn>from</span><span class=w> </span><span class=nn>django_components</span><span class=w> </span><span class=kn>import</span> <span class=n>Component</span><span class=p>,</span> <span class=n>Empty</span>
</code></pre></div> <p>See <a href=https://django-components.github.io/django-components/0.140.1/concepts/fundamentals/typing_and_validation/#migrating-from-generics-to-class-attributes>Migrating from generics to class attributes</a> for more info. - Removed <code>EmptyTuple</code> and <code>EmptyDict</code> types. Instead, there is now a single <code>Empty</code> type.</p> <div class=highlight><pre><span></span><code><a id=__codelineno-3-1 name=__codelineno-3-1 href=#__codelineno-3-1></a><span class=kn>from</span><span class=w> </span><span class=nn>django_components</span><span class=w> </span><span class=kn>import</span> <span class=n>Component</span><span class=p>,</span> <span class=n>Empty</span>
<a id=__codelineno-3-2 name=__codelineno-3-2 href=#__codelineno-3-2></a>
<a id=__codelineno-3-3 name=__codelineno-3-3 href=#__codelineno-3-3></a><span class=k>class</span><span class=w> </span><span class=nc>Button</span><span class=p>(</span><span class=n>Component</span><span class=p>):</span>
<a id=__codelineno-3-4 name=__codelineno-3-4 href=#__codelineno-3-4></a> <span class=n>template</span> <span class=o>=</span> <span class=s2>&quot;Hello&quot;</span>
@ -357,7 +357,7 @@
<a id=__codelineno-65-5 name=__codelineno-65-5 href=#__codelineno-65-5></a> <span class=p>},</span>
<a id=__codelineno-65-6 name=__codelineno-65-6 href=#__codelineno-65-6></a> <span class=n>deps_strategy</span><span class=o>=</span><span class=s2>&quot;append&quot;</span><span class=p>,</span>
<a id=__codelineno-65-7 name=__codelineno-65-7 href=#__codelineno-65-7></a><span class=p>)</span>
</code></pre></div> <p>Comparison of dependencies render strategies:</p> <ul> <li><code>"document"</code><ul> <li>Smartly inserts JS / CSS into placeholders or into <code>&lt;head&gt;</code> and <code>&lt;body&gt;</code> tags.</li> <li>Inserts extra script to allow <code>fragment</code> strategy to work.</li> <li>Assumes the HTML will be rendered in a JS-enabled browser.</li> </ul> </li> <li><code>"fragment"</code><ul> <li>A lightweight HTML fragment to be inserted into a document with AJAX.</li> <li>Ignores placeholders and any <code>&lt;head&gt;</code> / <code>&lt;body&gt;</code> tags.</li> <li>No JS / CSS included.</li> </ul> </li> <li><code>"simple"</code><ul> <li>Smartly insert JS / CSS into placeholders or into <code>&lt;head&gt;</code> and <code>&lt;body&gt;</code> tags.</li> <li>No extra script loaded.</li> </ul> </li> <li><code>"prepend"</code><ul> <li>Insert JS / CSS before the rendered HTML.</li> <li>Ignores placeholders and any <code>&lt;head&gt;</code> / <code>&lt;body&gt;</code> tags.</li> <li>No extra script loaded.</li> </ul> </li> <li><code>"append"</code><ul> <li>Insert JS / CSS after the rendered HTML.</li> <li>Ignores placeholders and any <code>&lt;head&gt;</code> / <code>&lt;body&gt;</code> tags.</li> <li>No extra script loaded.</li> </ul> </li> <li><code>"ignore"</code><ul> <li>Rendered HTML is left as-is. You can still process it with a different strategy later with <code>render_dependencies()</code>.</li> <li>Used for inserting rendered HTML into other components.</li> </ul> </li> </ul> <p>See <a href=https://django-components.github.io/django-components/0.140/concepts/advanced/rendering_js_css/ >Dependencies rendering</a> for more info.</p> </li> <li> <p>New <code>Component.args</code>, <code>Component.kwargs</code>, <code>Component.slots</code> attributes available on the component class itself.</p> <p>These attributes are the same as the ones available in <code>Component.get_template_data()</code>.</p> <p>You can use these in other methods like <code>Component.on_render_before()</code> or <code>Component.on_render_after()</code>.</p> <div class=highlight><pre><span></span><code><a id=__codelineno-66-1 name=__codelineno-66-1 href=#__codelineno-66-1></a><span class=kn>from</span><span class=w> </span><span class=nn>django_components</span><span class=w> </span><span class=kn>import</span> <span class=n>Component</span><span class=p>,</span> <span class=n>SlotInput</span>
</code></pre></div> <p>Comparison of dependencies render strategies:</p> <ul> <li><code>"document"</code><ul> <li>Smartly inserts JS / CSS into placeholders or into <code>&lt;head&gt;</code> and <code>&lt;body&gt;</code> tags.</li> <li>Inserts extra script to allow <code>fragment</code> strategy to work.</li> <li>Assumes the HTML will be rendered in a JS-enabled browser.</li> </ul> </li> <li><code>"fragment"</code><ul> <li>A lightweight HTML fragment to be inserted into a document with AJAX.</li> <li>Ignores placeholders and any <code>&lt;head&gt;</code> / <code>&lt;body&gt;</code> tags.</li> <li>No JS / CSS included.</li> </ul> </li> <li><code>"simple"</code><ul> <li>Smartly insert JS / CSS into placeholders or into <code>&lt;head&gt;</code> and <code>&lt;body&gt;</code> tags.</li> <li>No extra script loaded.</li> </ul> </li> <li><code>"prepend"</code><ul> <li>Insert JS / CSS before the rendered HTML.</li> <li>Ignores placeholders and any <code>&lt;head&gt;</code> / <code>&lt;body&gt;</code> tags.</li> <li>No extra script loaded.</li> </ul> </li> <li><code>"append"</code><ul> <li>Insert JS / CSS after the rendered HTML.</li> <li>Ignores placeholders and any <code>&lt;head&gt;</code> / <code>&lt;body&gt;</code> tags.</li> <li>No extra script loaded.</li> </ul> </li> <li><code>"ignore"</code><ul> <li>Rendered HTML is left as-is. You can still process it with a different strategy later with <code>render_dependencies()</code>.</li> <li>Used for inserting rendered HTML into other components.</li> </ul> </li> </ul> <p>See <a href=https://django-components.github.io/django-components/0.140.1/concepts/advanced/rendering_js_css/ >Dependencies rendering</a> for more info.</p> </li> <li> <p>New <code>Component.args</code>, <code>Component.kwargs</code>, <code>Component.slots</code> attributes available on the component class itself.</p> <p>These attributes are the same as the ones available in <code>Component.get_template_data()</code>.</p> <p>You can use these in other methods like <code>Component.on_render_before()</code> or <code>Component.on_render_after()</code>.</p> <div class=highlight><pre><span></span><code><a id=__codelineno-66-1 name=__codelineno-66-1 href=#__codelineno-66-1></a><span class=kn>from</span><span class=w> </span><span class=nn>django_components</span><span class=w> </span><span class=kn>import</span> <span class=n>Component</span><span class=p>,</span> <span class=n>SlotInput</span>
<a id=__codelineno-66-2 name=__codelineno-66-2 href=#__codelineno-66-2></a>
<a id=__codelineno-66-3 name=__codelineno-66-3 href=#__codelineno-66-3></a><span class=k>class</span><span class=w> </span><span class=nc>Table</span><span class=p>(</span><span class=n>Component</span><span class=p>):</span>
<a id=__codelineno-66-4 name=__codelineno-66-4 href=#__codelineno-66-4></a> <span class=k>class</span><span class=w> </span><span class=nc>Args</span><span class=p>(</span><span class=n>NamedTuple</span><span class=p>):</span>
@ -386,7 +386,7 @@
<a id=__codelineno-67-11 name=__codelineno-67-11 href=#__codelineno-67-11></a><span class=x> </span><span class=cp>{%</span> <span class=k>slot</span> <span class=s2>&quot;content&quot;</span> <span class=o>/</span> <span class=cp>%}</span>
<a id=__codelineno-67-12 name=__codelineno-67-12 href=#__codelineno-67-12></a><span class=x> &lt;/div&gt;</span>
<a id=__codelineno-67-13 name=__codelineno-67-13 href=#__codelineno-67-13></a><span class=cp>{%</span> <span class=k>endif</span> <span class=cp>%}</span>
</code></pre></div> <p>Same as with the parameters in <code>Component.get_template_data()</code>, they will be instances of the <code>Args</code>, <code>Kwargs</code>, <code>Slots</code> classes if defined, or plain lists / dictionaries otherwise.</p> </li> <li> <p>New component lifecycle hook <code>Component.on_render()</code>.</p> <p>This hook is called when the component is being rendered.</p> <p>You can override this method to:</p> <ul> <li>Change what template gets rendered</li> <li>Modify the context</li> <li>Modify the rendered output after it has been rendered</li> <li>Handle errors</li> </ul> <p>See <a href=https://django-components.github.io/django-components/0.140/concepts/advanced/hooks/#on_render>on_render</a> for more info.</p> </li> <li> <p><code>get_component_url()</code> now optionally accepts <code>query</code> and <code>fragment</code> arguments.</p> <div class=highlight><pre><span></span><code><a id=__codelineno-68-1 name=__codelineno-68-1 href=#__codelineno-68-1></a><span class=kn>from</span><span class=w> </span><span class=nn>django_components</span><span class=w> </span><span class=kn>import</span> <span class=n>get_component_url</span>
</code></pre></div> <p>Same as with the parameters in <code>Component.get_template_data()</code>, they will be instances of the <code>Args</code>, <code>Kwargs</code>, <code>Slots</code> classes if defined, or plain lists / dictionaries otherwise.</p> </li> <li> <p>New component lifecycle hook <code>Component.on_render()</code>.</p> <p>This hook is called when the component is being rendered.</p> <p>You can override this method to:</p> <ul> <li>Change what template gets rendered</li> <li>Modify the context</li> <li>Modify the rendered output after it has been rendered</li> <li>Handle errors</li> </ul> <p>See <a href=https://django-components.github.io/django-components/0.140.1/concepts/advanced/hooks/#on_render>on_render</a> for more info.</p> </li> <li> <p><code>get_component_url()</code> now optionally accepts <code>query</code> and <code>fragment</code> arguments.</p> <div class=highlight><pre><span></span><code><a id=__codelineno-68-1 name=__codelineno-68-1 href=#__codelineno-68-1></a><span class=kn>from</span><span class=w> </span><span class=nn>django_components</span><span class=w> </span><span class=kn>import</span> <span class=n>get_component_url</span>
<a id=__codelineno-68-2 name=__codelineno-68-2 href=#__codelineno-68-2></a>
<a id=__codelineno-68-3 name=__codelineno-68-3 href=#__codelineno-68-3></a><span class=n>url</span> <span class=o>=</span> <span class=n>get_component_url</span><span class=p>(</span>
<a id=__codelineno-68-4 name=__codelineno-68-4 href=#__codelineno-68-4></a> <span class=n>MyComponent</span><span class=p>,</span>
@ -408,7 +408,7 @@
</code></pre></div> <p>And render it like so:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-70-1 name=__codelineno-70-1 href=#__codelineno-70-1></a><span class=cp>{%</span> <span class=k>mytag</span> <span class=nv>name</span><span class=o>=</span><span class=s2>&quot;John&quot;</span> <span class=cp>%}</span>
<a id=__codelineno-70-2 name=__codelineno-70-2 href=#__codelineno-70-2></a><span class=x> Hello, world!</span>
<a id=__codelineno-70-3 name=__codelineno-70-3 href=#__codelineno-70-3></a><span class=cp>{%</span> <span class=k>endmytag</span> <span class=cp>%}</span>
</code></pre></div> <p>Then, the <code>contents</code> attribute of the <code>BaseNode</code> instance will contain the string <code>"Hello, world!"</code>.</p> </li> <li> <p>The <code>BaseNode</code> class also has two new metadata attributes:</p> <ul> <li><code>template_name</code> - the name of the template that rendered the node.</li> <li><code>template_component</code> - the component class that the template belongs to.</li> </ul> <p>This is useful for debugging purposes.</p> </li> <li> <p><code>Slot</code> class now has 3 new metadata fields:</p> <ol> <li> <p><code>Slot.contents</code> attribute contains the original contents:</p> <ul> <li>If <code>Slot</code> was created from <code>{% fill %}</code> tag, <code>Slot.contents</code> will contain the body of the <code>{% fill %}</code> tag.</li> <li>If <code>Slot</code> was created from string via <code>Slot("...")</code>, <code>Slot.contents</code> will contain that string.</li> <li>If <code>Slot</code> was created from a function, <code>Slot.contents</code> will contain that function.</li> </ul> </li> <li> <p><code>Slot.extra</code> attribute where you can put arbitrary metadata about the slot.</p> </li> <li> <p><code>Slot.fill_node</code> attribute tells where the slot comes from:</p> <ul> <li><code>FillNode</code> instance if the slot was created from <code>{% fill %}</code> tag.</li> <li><code>ComponentNode</code> instance if the slot was created as a default slot from a <code>{% component %}</code> tag.</li> <li><code>None</code> if the slot was created from a string, function, or <code>Slot</code> instance.</li> </ul> </li> </ol> <p>See <a href=https://django-components.github.io/django-components/0.140/concepts/fundamentals/slots/#slot-metadata>Slot metadata</a>.</p> </li> <li> <p><code>{% fill %}</code> tag now accepts <code>body</code> kwarg to pass a Slot instance to fill.</p> <p>First pass a <code>Slot</code> instance to the template with the <code>get_template_data()</code> method:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-71-1 name=__codelineno-71-1 href=#__codelineno-71-1></a><span class=kn>from</span><span class=w> </span><span class=nn>django_components</span><span class=w> </span><span class=kn>import</span> <span class=n>component</span><span class=p>,</span> <span class=n>Slot</span>
</code></pre></div> <p>Then, the <code>contents</code> attribute of the <code>BaseNode</code> instance will contain the string <code>"Hello, world!"</code>.</p> </li> <li> <p>The <code>BaseNode</code> class also has two new metadata attributes:</p> <ul> <li><code>template_name</code> - the name of the template that rendered the node.</li> <li><code>template_component</code> - the component class that the template belongs to.</li> </ul> <p>This is useful for debugging purposes.</p> </li> <li> <p><code>Slot</code> class now has 3 new metadata fields:</p> <ol> <li> <p><code>Slot.contents</code> attribute contains the original contents:</p> <ul> <li>If <code>Slot</code> was created from <code>{% fill %}</code> tag, <code>Slot.contents</code> will contain the body of the <code>{% fill %}</code> tag.</li> <li>If <code>Slot</code> was created from string via <code>Slot("...")</code>, <code>Slot.contents</code> will contain that string.</li> <li>If <code>Slot</code> was created from a function, <code>Slot.contents</code> will contain that function.</li> </ul> </li> <li> <p><code>Slot.extra</code> attribute where you can put arbitrary metadata about the slot.</p> </li> <li> <p><code>Slot.fill_node</code> attribute tells where the slot comes from:</p> <ul> <li><code>FillNode</code> instance if the slot was created from <code>{% fill %}</code> tag.</li> <li><code>ComponentNode</code> instance if the slot was created as a default slot from a <code>{% component %}</code> tag.</li> <li><code>None</code> if the slot was created from a string, function, or <code>Slot</code> instance.</li> </ul> </li> </ol> <p>See <a href=https://django-components.github.io/django-components/0.140.1/concepts/fundamentals/slots/#slot-metadata>Slot metadata</a>.</p> </li> <li> <p><code>{% fill %}</code> tag now accepts <code>body</code> kwarg to pass a Slot instance to fill.</p> <p>First pass a <code>Slot</code> instance to the template with the <code>get_template_data()</code> method:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-71-1 name=__codelineno-71-1 href=#__codelineno-71-1></a><span class=kn>from</span><span class=w> </span><span class=nn>django_components</span><span class=w> </span><span class=kn>import</span> <span class=n>component</span><span class=p>,</span> <span class=n>Slot</span>
<a id=__codelineno-71-2 name=__codelineno-71-2 href=#__codelineno-71-2></a>
<a id=__codelineno-71-3 name=__codelineno-71-3 href=#__codelineno-71-3></a><span class=k>class</span><span class=w> </span><span class=nc>Table</span><span class=p>(</span><span class=n>Component</span><span class=p>):</span>
<a id=__codelineno-71-4 name=__codelineno-71-4 href=#__codelineno-71-4></a> <span class=k>def</span><span class=w> </span><span class=nf>get_template_data</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>args</span><span class=p>,</span> <span class=n>kwargs</span><span class=p>,</span> <span class=n>slots</span><span class=p>,</span> <span class=n>context</span><span class=p>):</span>
@ -456,10 +456,10 @@
<a id=__codelineno-77-6 name=__codelineno-77-6 href=#__codelineno-77-6></a> <span class=n>kwargs</span><span class=o>=</span><span class=p>{</span><span class=s2>&quot;position&quot;</span><span class=p>:</span> <span class=s2>&quot;left&quot;</span><span class=p>},</span>
<a id=__codelineno-77-7 name=__codelineno-77-7 href=#__codelineno-77-7></a> <span class=n>slots</span><span class=o>=</span><span class=p>{</span><span class=s2>&quot;content&quot;</span><span class=p>:</span> <span class=s2>&quot;Hello, Bob&quot;</span><span class=p>}</span>
<a id=__codelineno-77-8 name=__codelineno-77-8 href=#__codelineno-77-8></a><span class=p>)</span>
</code></pre></div> <p>Read more on <a href=https://django-components.github.io/django-components/0.140/concepts/advanced/component_caching/ >Component caching</a>.</p> </li> <li> <p>New extension hook <code>on_slot_rendered()</code></p> <p>This hook is called when a slot is rendered, and allows you to access and/or modify the rendered result.</p> <p>This is used by the <a href=https://django-components.github.io/django-components/0.140/guides/other/troubleshooting/#component-and-slot-highlighting>"debug highlight" feature</a>.</p> <p>To modify the rendered result, return the new value:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-78-1 name=__codelineno-78-1 href=#__codelineno-78-1></a><span class=k>class</span><span class=w> </span><span class=nc>MyExtension</span><span class=p>(</span><span class=n>ComponentExtension</span><span class=p>):</span>
</code></pre></div> <p>Read more on <a href=https://django-components.github.io/django-components/0.140.1/concepts/advanced/component_caching/ >Component caching</a>.</p> </li> <li> <p>New extension hook <code>on_slot_rendered()</code></p> <p>This hook is called when a slot is rendered, and allows you to access and/or modify the rendered result.</p> <p>This is used by the <a href=https://django-components.github.io/django-components/0.140.1/guides/other/troubleshooting/#component-and-slot-highlighting>"debug highlight" feature</a>.</p> <p>To modify the rendered result, return the new value:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-78-1 name=__codelineno-78-1 href=#__codelineno-78-1></a><span class=k>class</span><span class=w> </span><span class=nc>MyExtension</span><span class=p>(</span><span class=n>ComponentExtension</span><span class=p>):</span>
<a id=__codelineno-78-2 name=__codelineno-78-2 href=#__codelineno-78-2></a> <span class=k>def</span><span class=w> </span><span class=nf>on_slot_rendered</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>ctx</span><span class=p>:</span> <span class=n>OnSlotRenderedContext</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n>Optional</span><span class=p>[</span><span class=nb>str</span><span class=p>]:</span>
<a id=__codelineno-78-3 name=__codelineno-78-3 href=#__codelineno-78-3></a> <span class=k>return</span> <span class=n>ctx</span><span class=o>.</span><span class=n>result</span> <span class=o>+</span> <span class=s2>&quot;&lt;!-- Hello, world! --&gt;&quot;</span>
</code></pre></div> <p>If you don't want to modify the rendered result, return <code>None</code>.</p> <p>See all <a href=https://django-components.github.io/django-components/0.140/reference/extension_hooks/ >Extension hooks</a>.</p> </li> <li> <p>When creating extensions, the previous syntax with <code>ComponentExtension.ExtensionClass</code> was causing Mypy errors, because Mypy doesn't allow using class attributes as bases:</p> <p>Before:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-79-1 name=__codelineno-79-1 href=#__codelineno-79-1></a><span class=kn>from</span><span class=w> </span><span class=nn>django_components</span><span class=w> </span><span class=kn>import</span> <span class=n>ComponentExtension</span>
</code></pre></div> <p>If you don't want to modify the rendered result, return <code>None</code>.</p> <p>See all <a href=https://django-components.github.io/django-components/0.140.1/reference/extension_hooks/ >Extension hooks</a>.</p> </li> <li> <p>When creating extensions, the previous syntax with <code>ComponentExtension.ExtensionClass</code> was causing Mypy errors, because Mypy doesn't allow using class attributes as bases:</p> <p>Before:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-79-1 name=__codelineno-79-1 href=#__codelineno-79-1></a><span class=kn>from</span><span class=w> </span><span class=nn>django_components</span><span class=w> </span><span class=kn>import</span> <span class=n>ComponentExtension</span>
<a id=__codelineno-79-2 name=__codelineno-79-2 href=#__codelineno-79-2></a>
<a id=__codelineno-79-3 name=__codelineno-79-3 href=#__codelineno-79-3></a><span class=k>class</span><span class=w> </span><span class=nc>MyExtension</span><span class=p>(</span><span class=n>ComponentExtension</span><span class=p>):</span>
<a id=__codelineno-79-4 name=__codelineno-79-4 href=#__codelineno-79-4></a> <span class=k>class</span><span class=w> </span><span class=nc>ExtensionClass</span><span class=p>(</span><span class=n>ComponentExtension</span><span class=o>.</span><span class=n>ExtensionClass</span><span class=p>):</span> <span class=c1># Error!</span>