django-components/0.112/reference/django_components/index.html

9510 lines
No EOL
1.9 MiB
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!doctype html><html lang=en class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content="A way to create simple reusable template components in Django."><link href=https://emilstenstrom.github.io/django-components/latest/reference/django_components/ rel=canonical><link href=../../license/ rel=prev><link href=app_settings/ rel=next><link rel=icon href=../../assets/images/favicon.png><meta name=generator content="mkdocs-1.6.1, mkdocs-material-9.5.43"><title>Index - Django-Components</title><link rel=stylesheet href=../../assets/stylesheets/main.0253249f.min.css><link rel=stylesheet href=../../assets/stylesheets/palette.06af60db.min.css><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style><link rel=stylesheet href=../../assets/_markdown_exec_pyodide.css><link rel=stylesheet href=../../assets/_mkdocstrings.css><link rel=stylesheet href=../../css/timeago.css><script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script><meta property=og:type content=website><meta property=og:title content="Index - Django-Components"><meta property=og:description content="A way to create simple reusable template components in Django."><meta property=og:image content=https://emilstenstrom.github.io/django-components/latest/assets/images/social/reference/django_components/index.png><meta property=og:image:type content=image/png><meta property=og:image:width content=1200><meta property=og:image:height content=630><meta content=https://emilstenstrom.github.io/django-components/latest/reference/django_components/ property=og:url><meta name=twitter:card content=summary_large_image><meta name=twitter:title content="Index - Django-Components"><meta name=twitter:description content="A way to create simple reusable template components in Django."><meta name=twitter:image content=https://emilstenstrom.github.io/django-components/latest/assets/images/social/reference/django_components/index.png></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> <a href=#django_components class=md-skip> Skip to content </a> </div> <div data-md-component=announce> <aside class=md-banner> <div class="md-banner__inner md-grid md-typeset"> 🚨The documentation is still a work in progress. 🚨 </div> </aside> </div> <div data-md-color-scheme=default data-md-component=outdated hidden> </div> <header class="md-header md-header--shadow" data-md-component=header> <nav class="md-header__inner md-grid" aria-label=Header> <a href=../.. title=Django-Components class="md-header__button md-logo" aria-label=Django-Components data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> Django-Components </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> Index </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media=(prefers-color-scheme) data-md-color-scheme=default data-md-color-primary=indigo data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="m14.3 16-.7-2h-3.2l-.7 2H7.8L11 7h2l3.2 9zM20 8.69V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12zm-9.15 3.96h2.3L12 9z"/></svg> </label> <input class=md-option data-md-color-media="(prefers-color-scheme: light)" data-md-color-scheme=default data-md-color-primary=teal data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_2 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="m17.75 4.09-2.53 1.94.91 3.06-2.63-1.81-2.63 1.81.91-3.06-2.53-1.94L12.44 4l1.06-3 1.06 3zm3.5 6.91-1.64 1.25.59 1.98-1.7-1.17-1.7 1.17.59-1.98L15.75 11l2.06-.05L18.5 9l.69 1.95zm-2.28 4.95c.83-.08 1.72 1.1 1.19 1.85-.32.45-.66.87-1.08 1.27C15.17 23 8.84 23 4.94 19.07c-3.91-3.9-3.91-10.24 0-14.14.4-.4.82-.76 1.27-1.08.75-.53 1.93.36 1.85 1.19-.27 2.86.69 5.83 2.89 8.02a9.96 9.96 0 0 0 8.02 2.89m-1.64 2.02a12.08 12.08 0 0 1-7.8-3.47c-2.17-2.19-3.33-5-3.49-7.82-2.81 3.14-2.7 7.96.31 10.98 3.02 3.01 7.84 3.12 10.98.31"/></svg> </label> <input class=md-option data-md-color-media="(prefers-color-scheme: dark)" data-md-color-scheme=slate data-md-color-primary=teal data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_2> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 7a5 5 0 0 1 5 5 5 5 0 0 1-5 5 5 5 0 0 1-5-5 5 5 0 0 1 5-5m0 2a3 3 0 0 0-3 3 3 3 0 0 0 3 3 3 3 0 0 0 3-3 3 3 0 0 0-3-3m0-7 2.39 3.42C13.65 5.15 12.84 5 12 5s-1.65.15-2.39.42zM3.34 7l4.16-.35A7.2 7.2 0 0 0 5.94 8.5c-.44.74-.69 1.5-.83 2.29zm.02 10 1.76-3.77a7.131 7.131 0 0 0 2.38 4.14zM20.65 7l-1.77 3.79a7.02 7.02 0 0 0-2.38-4.15zm-.01 10-4.14.36c.59-.51 1.12-1.14 1.54-1.86.42-.73.69-1.5.83-2.29zM12 22l-2.41-3.44c.74.27 1.55.44 2.41.44.82 0 1.63-.17 2.37-.44z"/></svg> </label> </form> <script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=Search placeholder=Search autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg> </label> <nav class=md-search__options aria-label=Search> <a href=javascript:void(0) class="md-search__icon md-icon" title=Share aria-label=Share data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7s-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91s2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=Clear aria-label=Clear tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap tabindex=0 data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> Initializing search </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/EmilStenstrom/django-components title="Go to repository" class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8M97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg> </div> <div class=md-source__repository> EmilStenstrom/django-components </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary" aria-label=Navigation data-md-level=0> <label class=md-nav__title for=__drawer> <a href=../.. title=Django-Components class="md-nav__button md-logo" aria-label=Django-Components data-md-component=logo> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54"/></svg> </a> Django-Components </label> <div class=md-nav__source> <a href=https://github.com/EmilStenstrom/django-components title="Go to repository" class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8M97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg> </div> <div class=md-source__repository> EmilStenstrom/django-components </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_1> <div class="md-nav__link md-nav__container"> <a href=../.. class="md-nav__link "> <span class=md-ellipsis> README </span> </a> <label class="md-nav__link " for=__nav_1 id=__nav_1_label tabindex> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_1_label aria-expanded=false> <label class=md-nav__title for=__nav_1> <span class="md-nav__icon md-icon"></span> README </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../CHANGELOG/ class=md-nav__link> <span class=md-ellipsis> Changelog </span> </a> </li> <li class=md-nav__item> <a href=../../CODE_OF_CONDUCT/ class=md-nav__link> <span class=md-ellipsis> Code of Conduct </span> </a> </li> <li class=md-nav__item> <a href=../../license/ class=md-nav__link> <span class=md-ellipsis> License </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2 checked> <label class=md-nav__link for=__nav_2 id=__nav_2_label tabindex> <span class=md-ellipsis> Reference </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=true> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> Reference </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--active md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2_1 checked> <label class=md-nav__link for=__nav_2_1 id=__nav_2_1_label tabindex=0> <span class=md-ellipsis> API Reference </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_2_1_label aria-expanded=true> <label class=md-nav__title for=__nav_2_1> <span class="md-nav__icon md-icon"></span> API Reference </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--active md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2_1_1 checked> <div class="md-nav__link md-nav__container"> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-nav doc-symbol-module"></code> django_components </span> </a> <label class="md-nav__link md-nav__link--active" for=__nav_2_1_1 id=__nav_2_1_1_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_2_1_1_label aria-expanded=true> <label class=md-nav__title for=__nav_2_1_1> <span class="md-nav__icon md-icon"></span> <code class="doc-symbol doc-symbol-nav doc-symbol-module"></code> django_components </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=app_settings/ class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-nav doc-symbol-module"></code> app_settings </span> </a> </li> <li class=md-nav__item> <a href=apps/ class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-nav doc-symbol-module"></code> apps </span> </a> </li> <li class=md-nav__item> <a href=attributes/ class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-nav doc-symbol-module"></code> attributes </span> </a> </li> <li class=md-nav__item> <a href=autodiscovery/ class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-nav doc-symbol-module"></code> autodiscovery </span> </a> </li> <li class=md-nav__item> <a href=component/ class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-nav doc-symbol-module"></code> component </span> </a> </li> <li class=md-nav__item> <a href=component_media/ class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-nav doc-symbol-module"></code> component_media </span> </a> </li> <li class=md-nav__item> <a href=component_registry/ class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-nav doc-symbol-module"></code> component_registry </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_2_1_1_9> <div class="md-nav__link md-nav__container"> <a href=components/ class="md-nav__link "> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-nav doc-symbol-module"></code> components </span> </a> <label class="md-nav__link " for=__nav_2_1_1_9 id=__nav_2_1_1_9_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=4 aria-labelledby=__nav_2_1_1_9_label aria-expanded=false> <label class=md-nav__title for=__nav_2_1_1_9> <span class="md-nav__icon md-icon"></span> <code class="doc-symbol doc-symbol-nav doc-symbol-module"></code> components </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=components/dynamic/ class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-nav doc-symbol-module"></code> dynamic </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=context/ class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-nav doc-symbol-module"></code> context </span> </a> </li> <li class=md-nav__item> <a href=dependencies/ class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-nav doc-symbol-module"></code> dependencies </span> </a> </li> <li class=md-nav__item> <a href=expression/ class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-nav doc-symbol-module"></code> expression </span> </a> </li> <li class=md-nav__item> <a href=finders/ class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-nav doc-symbol-module"></code> finders </span> </a> </li> <li class=md-nav__item> <a href=library/ class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-nav doc-symbol-module"></code> library </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_2_1_1_15> <div class="md-nav__link md-nav__container"> <a href=management/ class="md-nav__link "> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-nav doc-symbol-module"></code> management </span> </a> <label class="md-nav__link " for=__nav_2_1_1_15 id=__nav_2_1_1_15_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=4 aria-labelledby=__nav_2_1_1_15_label aria-expanded=false> <label class=md-nav__title for=__nav_2_1_1_15> <span class="md-nav__icon md-icon"></span> <code class="doc-symbol doc-symbol-nav doc-symbol-module"></code> management </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_2_1_1_15_2> <div class="md-nav__link md-nav__container"> <a href=management/commands/ class="md-nav__link "> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-nav doc-symbol-module"></code> commands </span> </a> <label class="md-nav__link " for=__nav_2_1_1_15_2 id=__nav_2_1_1_15_2_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=5 aria-labelledby=__nav_2_1_1_15_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2_1_1_15_2> <span class="md-nav__icon md-icon"></span> <code class="doc-symbol doc-symbol-nav doc-symbol-module"></code> commands </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=management/commands/startcomponent/ class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-nav doc-symbol-module"></code> startcomponent </span> </a> </li> <li class=md-nav__item> <a href=management/commands/upgradecomponent/ class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-nav doc-symbol-module"></code> upgradecomponent </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=middleware/ class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-nav doc-symbol-module"></code> middleware </span> </a> </li> <li class=md-nav__item> <a href=node/ class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-nav doc-symbol-module"></code> node </span> </a> </li> <li class=md-nav__item> <a href=provide/ class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-nav doc-symbol-module"></code> provide </span> </a> </li> <li class=md-nav__item> <a href=slots/ class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-nav doc-symbol-module"></code> slots </span> </a> </li> <li class=md-nav__item> <a href=tag_formatter/ class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-nav doc-symbol-module"></code> tag_formatter </span> </a> </li> <li class=md-nav__item> <a href=template/ class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-nav doc-symbol-module"></code> template </span> </a> </li> <li class=md-nav__item> <a href=template_loader/ class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-nav doc-symbol-module"></code> template_loader </span> </a> </li> <li class=md-nav__item> <a href=template_parser/ class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-nav doc-symbol-module"></code> template_parser </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_2_1_1_24> <div class="md-nav__link md-nav__container"> <a href=templatetags/ class="md-nav__link "> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-nav doc-symbol-module"></code> templatetags </span> </a> <label class="md-nav__link " for=__nav_2_1_1_24 id=__nav_2_1_1_24_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=4 aria-labelledby=__nav_2_1_1_24_label aria-expanded=false> <label class=md-nav__title for=__nav_2_1_1_24> <span class="md-nav__icon md-icon"></span> <code class="doc-symbol doc-symbol-nav doc-symbol-module"></code> templatetags </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=templatetags/component_tags/ class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-nav doc-symbol-module"></code> component_tags </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=types/ class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-nav doc-symbol-module"></code> types </span> </a> </li> <li class=md-nav__item> <a href=urls/ class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-nav doc-symbol-module"></code> urls </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_2_1_1_27> <div class="md-nav__link md-nav__container"> <a href=util/ class="md-nav__link "> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-nav doc-symbol-module"></code> util </span> </a> <label class="md-nav__link " for=__nav_2_1_1_27 id=__nav_2_1_1_27_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=4 aria-labelledby=__nav_2_1_1_27_label aria-expanded=false> <label class=md-nav__title for=__nav_2_1_1_27> <span class="md-nav__icon md-icon"></span> <code class="doc-symbol doc-symbol-nav doc-symbol-module"></code> util </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=util/cache/ class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-nav doc-symbol-module"></code> cache </span> </a> </li> <li class=md-nav__item> <a href=util/html/ class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-nav doc-symbol-module"></code> html </span> </a> </li> <li class=md-nav__item> <a href=util/loader/ class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-nav doc-symbol-module"></code> loader </span> </a> </li> <li class=md-nav__item> <a href=util/logger/ class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-nav doc-symbol-module"></code> logger </span> </a> </li> <li class=md-nav__item> <a href=util/misc/ class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-nav doc-symbol-module"></code> misc </span> </a> </li> <li class=md-nav__item> <a href=util/nanoid/ class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-nav doc-symbol-module"></code> nanoid </span> </a> </li> <li class=md-nav__item> <a href=util/tag_parser/ class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-nav doc-symbol-module"></code> tag_parser </span> </a> </li> <li class=md-nav__item> <a href=util/types/ class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-nav doc-symbol-module"></code> types </span> </a> </li> <li class=md-nav__item> <a href=util/validation/ class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-nav doc-symbol-module"></code> validation </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_2_1_2> <div class="md-nav__link md-nav__container"> <a href=../django_components_js/build/ class="md-nav__link "> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-nav doc-symbol-module"></code> django_components_js </span> </a> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_2_1_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2_1_2> <span class="md-nav__icon md-icon"></span> <code class="doc-symbol doc-symbol-nav doc-symbol-module"></code> django_components_js </label> <ul class=md-nav__list data-md-scrollfix> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_2_1_3> <div class="md-nav__link md-nav__container"> <a href=../docs/ class="md-nav__link "> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-nav doc-symbol-module"></code> docs </span> </a> <label class="md-nav__link " for=__nav_2_1_3 id=__nav_2_1_3_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=3 aria-labelledby=__nav_2_1_3_label aria-expanded=false> <label class=md-nav__title for=__nav_2_1_3> <span class="md-nav__icon md-icon"></span> <code class="doc-symbol doc-symbol-nav doc-symbol-module"></code> docs </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle md-toggle--indeterminate" type=checkbox id=__nav_2_1_3_2> <div class="md-nav__link md-nav__container"> <a href=../docs/scripts/ class="md-nav__link "> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-nav doc-symbol-module"></code> scripts </span> </a> <label class="md-nav__link " for=__nav_2_1_3_2 id=__nav_2_1_3_2_label tabindex=0> <span class="md-nav__icon md-icon"></span> </label> </div> <nav class=md-nav data-md-level=4 aria-labelledby=__nav_2_1_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_2_1_3_2> <span class="md-nav__icon md-icon"></span> <code class="doc-symbol doc-symbol-nav doc-symbol-module"></code> scripts </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../docs/scripts/reference/ class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-nav doc-symbol-module"></code> reference </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label="Table of contents"> <label class=md-nav__title for=__toc> <span class="md-nav__icon md-icon"></span> Table of contents </label> <ul class=md-nav__list data-md-component=toc data-md-scrollfix> <li class=md-nav__item> <a href=#django_components.EmptyTuple class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;EmptyTuple </span> </a> </li> <li class=md-nav__item> <a href=#django_components.registry class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;registry </span> </a> </li> <li class=md-nav__item> <a href=#django_components.AlreadyRegistered class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-class"></code>&nbsp;AlreadyRegistered </span> </a> </li> <li class=md-nav__item> <a href=#django_components.Component class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-class"></code>&nbsp;Component </span> </a> <nav class=md-nav aria-label= Component> <ul class=md-nav__list> <li class=md-nav__item> <a href=#django_components.Component.Media class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;Media </span> </a> </li> <li class=md-nav__item> <a href=#django_components.Component.css class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;css </span> </a> </li> <li class=md-nav__item> <a href=#django_components.Component.input class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;input </span> </a> </li> <li class=md-nav__item> <a href=#django_components.Component.is_filled class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;is_filled </span> </a> </li> <li class=md-nav__item> <a href=#django_components.Component.js class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;js </span> </a> </li> <li class=md-nav__item> <a href=#django_components.Component.media class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;media </span> </a> </li> <li class=md-nav__item> <a href=#django_components.Component.response_class class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;response_class </span> </a> </li> <li class=md-nav__item> <a href=#django_components.Component.template class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;template </span> </a> </li> <li class=md-nav__item> <a href=#django_components.Component.template_name class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;template_name </span> </a> </li> <li class=md-nav__item> <a href=#django_components.Component.as_view class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;as_view </span> </a> </li> <li class=md-nav__item> <a href=#django_components.Component.get_template class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;get_template </span> </a> </li> <li class=md-nav__item> <a href=#django_components.Component.get_template_name class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;get_template_name </span> </a> </li> <li class=md-nav__item> <a href=#django_components.Component.inject class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;inject </span> </a> </li> <li class=md-nav__item> <a href=#django_components.Component.on_render_after class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;on_render_after </span> </a> </li> <li class=md-nav__item> <a href=#django_components.Component.on_render_before class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;on_render_before </span> </a> </li> <li class=md-nav__item> <a href=#django_components.Component.render class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;render </span> </a> </li> <li class=md-nav__item> <a href=#django_components.Component.render_to_response class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;render_to_response </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#django_components.ComponentFileEntry class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-class"></code>&nbsp;ComponentFileEntry </span> </a> <nav class=md-nav aria-label= ComponentFileEntry> <ul class=md-nav__list> <li class=md-nav__item> <a href=#django_components.ComponentFileEntry.dot_path class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;dot_path </span> </a> </li> <li class=md-nav__item> <a href=#django_components.ComponentFileEntry.filepath class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;filepath </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#django_components.ComponentFormatter class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-class"></code>&nbsp;ComponentFormatter </span> </a> </li> <li class=md-nav__item> <a href=#django_components.ComponentRegistry class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-class"></code>&nbsp;ComponentRegistry </span> </a> <nav class=md-nav aria-label= ComponentRegistry> <ul class=md-nav__list> <li class=md-nav__item> <a href=#django_components.ComponentRegistry--using-registry-to-share-components class=md-nav__link> <span class=md-ellipsis> Using registry to share components </span> </a> </li> <li class=md-nav__item> <a href=#django_components.ComponentRegistry.library class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;library </span> </a> </li> <li class=md-nav__item> <a href=#django_components.ComponentRegistry.settings class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;settings </span> </a> </li> <li class=md-nav__item> <a href=#django_components.ComponentRegistry.all class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;all </span> </a> </li> <li class=md-nav__item> <a href=#django_components.ComponentRegistry.clear class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;clear </span> </a> </li> <li class=md-nav__item> <a href=#django_components.ComponentRegistry.get class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;get </span> </a> </li> <li class=md-nav__item> <a href=#django_components.ComponentRegistry.register class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;register </span> </a> </li> <li class=md-nav__item> <a href=#django_components.ComponentRegistry.unregister class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;unregister </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#django_components.ComponentVars class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-class"></code>&nbsp;ComponentVars </span> </a> <nav class=md-nav aria-label= ComponentVars> <ul class=md-nav__list> <li class=md-nav__item> <a href=#django_components.ComponentVars.is_filled class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;is_filled </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#django_components.ComponentView class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-class"></code>&nbsp;ComponentView </span> </a> </li> <li class=md-nav__item> <a href=#django_components.ComponentsSettings class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-class"></code>&nbsp;ComponentsSettings </span> </a> <nav class=md-nav aria-label= ComponentsSettings> <ul class=md-nav__list> <li class=md-nav__item> <a href=#django_components.ComponentsSettings.app_dirs class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;app_dirs </span> </a> </li> <li class=md-nav__item> <a href=#django_components.ComponentsSettings.autodiscover class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;autodiscover </span> </a> </li> <li class=md-nav__item> <a href=#django_components.ComponentsSettings.context_behavior class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;context_behavior </span> </a> </li> <li class=md-nav__item> <a href=#django_components.ComponentsSettings.dirs class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;dirs </span> </a> </li> <li class=md-nav__item> <a href=#django_components.ComponentsSettings.dynamic_component_name class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;dynamic_component_name </span> </a> </li> <li class=md-nav__item> <a href=#django_components.ComponentsSettings.forbidden_static_files class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;forbidden_static_files </span> </a> </li> <li class=md-nav__item> <a href=#django_components.ComponentsSettings.libraries class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;libraries </span> </a> <nav class=md-nav aria-label= libraries> <ul class=md-nav__list> <li class=md-nav__item> <a href=#django_components.ComponentsSettings.libraries--manually-loading-libraries class=md-nav__link> <span class=md-ellipsis> Manually loading libraries </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#django_components.ComponentsSettings.multiline_tags class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;multiline_tags </span> </a> </li> <li class=md-nav__item> <a href=#django_components.ComponentsSettings.reload_on_file_change class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;reload_on_file_change </span> </a> </li> <li class=md-nav__item> <a href=#django_components.ComponentsSettings.reload_on_template_change class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;reload_on_template_change </span> </a> </li> <li class=md-nav__item> <a href=#django_components.ComponentsSettings.static_files_allowed class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;static_files_allowed </span> </a> </li> <li class=md-nav__item> <a href=#django_components.ComponentsSettings.static_files_forbidden class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;static_files_forbidden </span> </a> </li> <li class=md-nav__item> <a href=#django_components.ComponentsSettings.tag_formatter class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;tag_formatter </span> </a> </li> <li class=md-nav__item> <a href=#django_components.ComponentsSettings.template_cache_size class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;template_cache_size </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#django_components.ContextBehavior class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-class"></code>&nbsp;ContextBehavior </span> </a> <nav class=md-nav aria-label= ContextBehavior> <ul class=md-nav__list> <li class=md-nav__item> <a href=#django_components.ContextBehavior.DJANGO class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;DJANGO </span> </a> </li> <li class=md-nav__item> <a href=#django_components.ContextBehavior.ISOLATED class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;ISOLATED </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#django_components.DynamicComponent class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-class"></code>&nbsp;DynamicComponent </span> </a> <nav class=md-nav aria-label= DynamicComponent> <ul class=md-nav__list> <li class=md-nav__item> <a href=#django_components.DynamicComponent--use-cases class=md-nav__link> <span class=md-ellipsis> Use cases </span> </a> </li> <li class=md-nav__item> <a href=#django_components.DynamicComponent--component-name class=md-nav__link> <span class=md-ellipsis> Component name </span> </a> </li> <li class=md-nav__item> <a href=#django_components.DynamicComponent.Media class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;Media </span> </a> </li> <li class=md-nav__item> <a href=#django_components.DynamicComponent.css class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;css </span> </a> </li> <li class=md-nav__item> <a href=#django_components.DynamicComponent.input class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;input </span> </a> </li> <li class=md-nav__item> <a href=#django_components.DynamicComponent.is_filled class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;is_filled </span> </a> </li> <li class=md-nav__item> <a href=#django_components.DynamicComponent.js class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;js </span> </a> </li> <li class=md-nav__item> <a href=#django_components.DynamicComponent.media class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;media </span> </a> </li> <li class=md-nav__item> <a href=#django_components.DynamicComponent.response_class class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;response_class </span> </a> </li> <li class=md-nav__item> <a href=#django_components.DynamicComponent.template_name class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;template_name </span> </a> </li> <li class=md-nav__item> <a href=#django_components.DynamicComponent.as_view class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;as_view </span> </a> </li> <li class=md-nav__item> <a href=#django_components.DynamicComponent.get_template class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;get_template </span> </a> </li> <li class=md-nav__item> <a href=#django_components.DynamicComponent.get_template_name class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;get_template_name </span> </a> </li> <li class=md-nav__item> <a href=#django_components.DynamicComponent.inject class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;inject </span> </a> </li> <li class=md-nav__item> <a href=#django_components.DynamicComponent.on_render_after class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;on_render_after </span> </a> </li> <li class=md-nav__item> <a href=#django_components.DynamicComponent.on_render_before class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;on_render_before </span> </a> </li> <li class=md-nav__item> <a href=#django_components.DynamicComponent.render class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;render </span> </a> </li> <li class=md-nav__item> <a href=#django_components.DynamicComponent.render_to_response class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;render_to_response </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#django_components.EmptyDict class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-class"></code>&nbsp;EmptyDict </span> </a> </li> <li class=md-nav__item> <a href=#django_components.NotRegistered class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-class"></code>&nbsp;NotRegistered </span> </a> </li> <li class=md-nav__item> <a href=#django_components.RegistrySettings class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-class"></code>&nbsp;RegistrySettings </span> </a> <nav class=md-nav aria-label= RegistrySettings> <ul class=md-nav__list> <li class=md-nav__item> <a href=#django_components.RegistrySettings.CONTEXT_BEHAVIOR class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;CONTEXT_BEHAVIOR </span> </a> </li> <li class=md-nav__item> <a href=#django_components.RegistrySettings.TAG_FORMATTER class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;TAG_FORMATTER </span> </a> </li> <li class=md-nav__item> <a href=#django_components.RegistrySettings.context_behavior class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;context_behavior </span> </a> </li> <li class=md-nav__item> <a href=#django_components.RegistrySettings.tag_formatter class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;tag_formatter </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#django_components.ShorthandComponentFormatter class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-class"></code>&nbsp;ShorthandComponentFormatter </span> </a> </li> <li class=md-nav__item> <a href=#django_components.Slot class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-class"></code>&nbsp;Slot </span> </a> </li> <li class=md-nav__item> <a href=#django_components.SlotRef class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-class"></code>&nbsp;SlotRef </span> </a> </li> <li class=md-nav__item> <a href=#django_components.TagFormatterABC class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-class"></code>&nbsp;TagFormatterABC </span> </a> <nav class=md-nav aria-label= TagFormatterABC> <ul class=md-nav__list> <li class=md-nav__item> <a href=#django_components.TagFormatterABC.end_tag class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;end_tag </span> </a> </li> <li class=md-nav__item> <a href=#django_components.TagFormatterABC.parse class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;parse </span> </a> </li> <li class=md-nav__item> <a href=#django_components.TagFormatterABC.start_tag class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;start_tag </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#django_components.TagProtectedError class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-class"></code>&nbsp;TagProtectedError </span> </a> </li> <li class=md-nav__item> <a href=#django_components.TagResult class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-class"></code>&nbsp;TagResult </span> </a> <nav class=md-nav aria-label= TagResult> <ul class=md-nav__list> <li class=md-nav__item> <a href=#django_components.TagResult.component_name class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;component_name </span> </a> </li> <li class=md-nav__item> <a href=#django_components.TagResult.tokens class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;tokens </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#django_components.autodiscover class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-function"></code>&nbsp;autodiscover </span> </a> </li> <li class=md-nav__item> <a href=#django_components.cached_template class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-function"></code>&nbsp;cached_template </span> </a> </li> <li class=md-nav__item> <a href=#django_components.get_component_dirs class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-function"></code>&nbsp;get_component_dirs </span> </a> </li> <li class=md-nav__item> <a href=#django_components.get_component_files class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-function"></code>&nbsp;get_component_files </span> </a> </li> <li class=md-nav__item> <a href=#django_components.import_libraries class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-function"></code>&nbsp;import_libraries </span> </a> </li> <li class=md-nav__item> <a href=#django_components.register class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-function"></code>&nbsp;register </span> </a> </li> <li class=md-nav__item> <a href=#django_components.render_dependencies class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-function"></code>&nbsp;render_dependencies </span> </a> </li> <li class=md-nav__item> <a href=#django_components.app_settings class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-module"></code>&nbsp;app_settings </span> </a> <nav class=md-nav aria-label= app_settings> <ul class=md-nav__list> <li class=md-nav__item> <a href=#django_components.app_settings.ComponentsSettings class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-class"></code>&nbsp;ComponentsSettings </span> </a> <nav class=md-nav aria-label= ComponentsSettings> <ul class=md-nav__list> <li class=md-nav__item> <a href=#django_components.app_settings.ComponentsSettings.app_dirs class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;app_dirs </span> </a> </li> <li class=md-nav__item> <a href=#django_components.app_settings.ComponentsSettings.autodiscover class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;autodiscover </span> </a> </li> <li class=md-nav__item> <a href=#django_components.app_settings.ComponentsSettings.context_behavior class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;context_behavior </span> </a> </li> <li class=md-nav__item> <a href=#django_components.app_settings.ComponentsSettings.dirs class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;dirs </span> </a> </li> <li class=md-nav__item> <a href=#django_components.app_settings.ComponentsSettings.dynamic_component_name class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;dynamic_component_name </span> </a> </li> <li class=md-nav__item> <a href=#django_components.app_settings.ComponentsSettings.forbidden_static_files class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;forbidden_static_files </span> </a> </li> <li class=md-nav__item> <a href=#django_components.app_settings.ComponentsSettings.libraries class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;libraries </span> </a> <nav class=md-nav aria-label= libraries> <ul class=md-nav__list> <li class=md-nav__item> <a href=#django_components.app_settings.ComponentsSettings.libraries--manually-loading-libraries class=md-nav__link> <span class=md-ellipsis> Manually loading libraries </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#django_components.app_settings.ComponentsSettings.multiline_tags class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;multiline_tags </span> </a> </li> <li class=md-nav__item> <a href=#django_components.app_settings.ComponentsSettings.reload_on_file_change class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;reload_on_file_change </span> </a> </li> <li class=md-nav__item> <a href=#django_components.app_settings.ComponentsSettings.reload_on_template_change class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;reload_on_template_change </span> </a> </li> <li class=md-nav__item> <a href=#django_components.app_settings.ComponentsSettings.static_files_allowed class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;static_files_allowed </span> </a> </li> <li class=md-nav__item> <a href=#django_components.app_settings.ComponentsSettings.static_files_forbidden class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;static_files_forbidden </span> </a> </li> <li class=md-nav__item> <a href=#django_components.app_settings.ComponentsSettings.tag_formatter class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;tag_formatter </span> </a> </li> <li class=md-nav__item> <a href=#django_components.app_settings.ComponentsSettings.template_cache_size class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;template_cache_size </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#django_components.app_settings.ContextBehavior class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-class"></code>&nbsp;ContextBehavior </span> </a> <nav class=md-nav aria-label= ContextBehavior> <ul class=md-nav__list> <li class=md-nav__item> <a href=#django_components.app_settings.ContextBehavior.DJANGO class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;DJANGO </span> </a> </li> <li class=md-nav__item> <a href=#django_components.app_settings.ContextBehavior.ISOLATED class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;ISOLATED </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#django_components.attributes class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-module"></code>&nbsp;attributes </span> </a> <nav class=md-nav aria-label= attributes> <ul class=md-nav__list> <li class=md-nav__item> <a href=#django_components.attributes.append_attributes class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-function"></code>&nbsp;append_attributes </span> </a> </li> <li class=md-nav__item> <a href=#django_components.attributes.attributes_to_string class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-function"></code>&nbsp;attributes_to_string </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#django_components.autodiscovery class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-module"></code>&nbsp;autodiscovery </span> </a> <nav class=md-nav aria-label= autodiscovery> <ul class=md-nav__list> <li class=md-nav__item> <a href=#django_components.autodiscovery.autodiscover class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-function"></code>&nbsp;autodiscover </span> </a> </li> <li class=md-nav__item> <a href=#django_components.autodiscovery.import_libraries class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-function"></code>&nbsp;import_libraries </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#django_components.component class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-module"></code>&nbsp;component </span> </a> <nav class=md-nav aria-label= component> <ul class=md-nav__list> <li class=md-nav__item> <a href=#django_components.component.Component class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-class"></code>&nbsp;Component </span> </a> <nav class=md-nav aria-label= Component> <ul class=md-nav__list> <li class=md-nav__item> <a href=#django_components.component.Component.Media class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;Media </span> </a> </li> <li class=md-nav__item> <a href=#django_components.component.Component.css class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;css </span> </a> </li> <li class=md-nav__item> <a href=#django_components.component.Component.input class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;input </span> </a> </li> <li class=md-nav__item> <a href=#django_components.component.Component.is_filled class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;is_filled </span> </a> </li> <li class=md-nav__item> <a href=#django_components.component.Component.js class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;js </span> </a> </li> <li class=md-nav__item> <a href=#django_components.component.Component.media class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;media </span> </a> </li> <li class=md-nav__item> <a href=#django_components.component.Component.response_class class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;response_class </span> </a> </li> <li class=md-nav__item> <a href=#django_components.component.Component.template class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;template </span> </a> </li> <li class=md-nav__item> <a href=#django_components.component.Component.template_name class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;template_name </span> </a> </li> <li class=md-nav__item> <a href=#django_components.component.Component.as_view class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;as_view </span> </a> </li> <li class=md-nav__item> <a href=#django_components.component.Component.get_template class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;get_template </span> </a> </li> <li class=md-nav__item> <a href=#django_components.component.Component.get_template_name class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;get_template_name </span> </a> </li> <li class=md-nav__item> <a href=#django_components.component.Component.inject class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;inject </span> </a> </li> <li class=md-nav__item> <a href=#django_components.component.Component.on_render_after class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;on_render_after </span> </a> </li> <li class=md-nav__item> <a href=#django_components.component.Component.on_render_before class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;on_render_before </span> </a> </li> <li class=md-nav__item> <a href=#django_components.component.Component.render class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;render </span> </a> </li> <li class=md-nav__item> <a href=#django_components.component.Component.render_to_response class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;render_to_response </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#django_components.component.ComponentNode class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-class"></code>&nbsp;ComponentNode </span> </a> </li> <li class=md-nav__item> <a href=#django_components.component.ComponentVars class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-class"></code>&nbsp;ComponentVars </span> </a> <nav class=md-nav aria-label= ComponentVars> <ul class=md-nav__list> <li class=md-nav__item> <a href=#django_components.component.ComponentVars.is_filled class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;is_filled </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#django_components.component.ComponentView class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-class"></code>&nbsp;ComponentView </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#django_components.component_media class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-module"></code>&nbsp;component_media </span> </a> <nav class=md-nav aria-label= component_media> <ul class=md-nav__list> <li class=md-nav__item> <a href=#django_components.component_media.ComponentMediaInput class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-class"></code>&nbsp;ComponentMediaInput </span> </a> </li> <li class=md-nav__item> <a href=#django_components.component_media.MediaMeta class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-class"></code>&nbsp;MediaMeta </span> </a> <nav class=md-nav aria-label= MediaMeta> <ul class=md-nav__list> <li class=md-nav__item> <a href=#django_components.component_media.MediaMeta--1-support-for-multiple-interfaces-of-jscss class=md-nav__link> <span class=md-ellipsis> 1. Support for multiple interfaces of JS/CSS </span> </a> </li> <li class=md-nav__item> <a href=#django_components.component_media.MediaMeta--2-media-are-first-resolved-relative-to-class-definition-file class=md-nav__link> <span class=md-ellipsis> 2. Media are first resolved relative to class definition file </span> </a> </li> <li class=md-nav__item> <a href=#django_components.component_media.MediaMeta--3-media-can-be-defined-as-str-bytes-pathlike-safestring-or-function-of-thereof class=md-nav__link> <span class=md-ellipsis> 3. Media can be defined as str, bytes, PathLike, SafeString, or function of thereof </span> </a> </li> <li class=md-nav__item> <a href=#django_components.component_media.MediaMeta--4-subclass-media-class-with-media_class class=md-nav__link> <span class=md-ellipsis> 4. Subclass wzxhzdk:17 class with wzxhzdk:18 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#django_components.component_registry class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-module"></code>&nbsp;component_registry </span> </a> <nav class=md-nav aria-label= component_registry> <ul class=md-nav__list> <li class=md-nav__item> <a href=#django_components.component_registry.registry class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;registry </span> </a> </li> <li class=md-nav__item> <a href=#django_components.component_registry.AlreadyRegistered class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-class"></code>&nbsp;AlreadyRegistered </span> </a> </li> <li class=md-nav__item> <a href=#django_components.component_registry.ComponentRegistry class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-class"></code>&nbsp;ComponentRegistry </span> </a> <nav class=md-nav aria-label= ComponentRegistry> <ul class=md-nav__list> <li class=md-nav__item> <a href=#django_components.component_registry.ComponentRegistry--using-registry-to-share-components class=md-nav__link> <span class=md-ellipsis> Using registry to share components </span> </a> </li> <li class=md-nav__item> <a href=#django_components.component_registry.ComponentRegistry.library class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;library </span> </a> </li> <li class=md-nav__item> <a href=#django_components.component_registry.ComponentRegistry.settings class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;settings </span> </a> </li> <li class=md-nav__item> <a href=#django_components.component_registry.ComponentRegistry.all class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;all </span> </a> </li> <li class=md-nav__item> <a href=#django_components.component_registry.ComponentRegistry.clear class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;clear </span> </a> </li> <li class=md-nav__item> <a href=#django_components.component_registry.ComponentRegistry.get class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;get </span> </a> </li> <li class=md-nav__item> <a href=#django_components.component_registry.ComponentRegistry.register class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;register </span> </a> </li> <li class=md-nav__item> <a href=#django_components.component_registry.ComponentRegistry.unregister class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;unregister </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#django_components.component_registry.NotRegistered class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-class"></code>&nbsp;NotRegistered </span> </a> </li> <li class=md-nav__item> <a href=#django_components.component_registry.RegistrySettings class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-class"></code>&nbsp;RegistrySettings </span> </a> <nav class=md-nav aria-label= RegistrySettings> <ul class=md-nav__list> <li class=md-nav__item> <a href=#django_components.component_registry.RegistrySettings.CONTEXT_BEHAVIOR class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;CONTEXT_BEHAVIOR </span> </a> </li> <li class=md-nav__item> <a href=#django_components.component_registry.RegistrySettings.TAG_FORMATTER class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;TAG_FORMATTER </span> </a> </li> <li class=md-nav__item> <a href=#django_components.component_registry.RegistrySettings.context_behavior class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;context_behavior </span> </a> </li> <li class=md-nav__item> <a href=#django_components.component_registry.RegistrySettings.tag_formatter class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;tag_formatter </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#django_components.component_registry.register class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-function"></code>&nbsp;register </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#django_components.components class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-module"></code>&nbsp;components </span> </a> <nav class=md-nav aria-label= components> <ul class=md-nav__list> <li class=md-nav__item> <a href=#django_components.components.DynamicComponent class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-class"></code>&nbsp;DynamicComponent </span> </a> <nav class=md-nav aria-label= DynamicComponent> <ul class=md-nav__list> <li class=md-nav__item> <a href=#django_components.components.DynamicComponent--use-cases class=md-nav__link> <span class=md-ellipsis> Use cases </span> </a> </li> <li class=md-nav__item> <a href=#django_components.components.DynamicComponent--component-name class=md-nav__link> <span class=md-ellipsis> Component name </span> </a> </li> <li class=md-nav__item> <a href=#django_components.components.DynamicComponent.Media class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;Media </span> </a> </li> <li class=md-nav__item> <a href=#django_components.components.DynamicComponent.css class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;css </span> </a> </li> <li class=md-nav__item> <a href=#django_components.components.DynamicComponent.input class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;input </span> </a> </li> <li class=md-nav__item> <a href=#django_components.components.DynamicComponent.is_filled class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;is_filled </span> </a> </li> <li class=md-nav__item> <a href=#django_components.components.DynamicComponent.js class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;js </span> </a> </li> <li class=md-nav__item> <a href=#django_components.components.DynamicComponent.media class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;media </span> </a> </li> <li class=md-nav__item> <a href=#django_components.components.DynamicComponent.response_class class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;response_class </span> </a> </li> <li class=md-nav__item> <a href=#django_components.components.DynamicComponent.template_name class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;template_name </span> </a> </li> <li class=md-nav__item> <a href=#django_components.components.DynamicComponent.as_view class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;as_view </span> </a> </li> <li class=md-nav__item> <a href=#django_components.components.DynamicComponent.get_template class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;get_template </span> </a> </li> <li class=md-nav__item> <a href=#django_components.components.DynamicComponent.get_template_name class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;get_template_name </span> </a> </li> <li class=md-nav__item> <a href=#django_components.components.DynamicComponent.inject class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;inject </span> </a> </li> <li class=md-nav__item> <a href=#django_components.components.DynamicComponent.on_render_after class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;on_render_after </span> </a> </li> <li class=md-nav__item> <a href=#django_components.components.DynamicComponent.on_render_before class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;on_render_before </span> </a> </li> <li class=md-nav__item> <a href=#django_components.components.DynamicComponent.render class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;render </span> </a> </li> <li class=md-nav__item> <a href=#django_components.components.DynamicComponent.render_to_response class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;render_to_response </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#django_components.components.dynamic class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-module"></code>&nbsp;dynamic </span> </a> <nav class=md-nav aria-label= dynamic> <ul class=md-nav__list> <li class=md-nav__item> <a href=#django_components.components.dynamic.DynamicComponent class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-class"></code>&nbsp;DynamicComponent </span> </a> <nav class=md-nav aria-label= DynamicComponent> <ul class=md-nav__list> <li class=md-nav__item> <a href=#django_components.components.dynamic.DynamicComponent--use-cases class=md-nav__link> <span class=md-ellipsis> Use cases </span> </a> </li> <li class=md-nav__item> <a href=#django_components.components.dynamic.DynamicComponent--component-name class=md-nav__link> <span class=md-ellipsis> Component name </span> </a> </li> <li class=md-nav__item> <a href=#django_components.components.dynamic.DynamicComponent.Media class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;Media </span> </a> </li> <li class=md-nav__item> <a href=#django_components.components.dynamic.DynamicComponent.css class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;css </span> </a> </li> <li class=md-nav__item> <a href=#django_components.components.dynamic.DynamicComponent.input class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;input </span> </a> </li> <li class=md-nav__item> <a href=#django_components.components.dynamic.DynamicComponent.is_filled class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;is_filled </span> </a> </li> <li class=md-nav__item> <a href=#django_components.components.dynamic.DynamicComponent.js class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;js </span> </a> </li> <li class=md-nav__item> <a href=#django_components.components.dynamic.DynamicComponent.media class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;media </span> </a> </li> <li class=md-nav__item> <a href=#django_components.components.dynamic.DynamicComponent.response_class class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;response_class </span> </a> </li> <li class=md-nav__item> <a href=#django_components.components.dynamic.DynamicComponent.template_name class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;template_name </span> </a> </li> <li class=md-nav__item> <a href=#django_components.components.dynamic.DynamicComponent.as_view class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;as_view </span> </a> </li> <li class=md-nav__item> <a href=#django_components.components.dynamic.DynamicComponent.get_template class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;get_template </span> </a> </li> <li class=md-nav__item> <a href=#django_components.components.dynamic.DynamicComponent.get_template_name class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;get_template_name </span> </a> </li> <li class=md-nav__item> <a href=#django_components.components.dynamic.DynamicComponent.inject class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;inject </span> </a> </li> <li class=md-nav__item> <a href=#django_components.components.dynamic.DynamicComponent.on_render_after class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;on_render_after </span> </a> </li> <li class=md-nav__item> <a href=#django_components.components.dynamic.DynamicComponent.on_render_before class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;on_render_before </span> </a> </li> <li class=md-nav__item> <a href=#django_components.components.dynamic.DynamicComponent.render class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;render </span> </a> </li> <li class=md-nav__item> <a href=#django_components.components.dynamic.DynamicComponent.render_to_response class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;render_to_response </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#django_components.context class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-module"></code>&nbsp;context </span> </a> <nav class=md-nav aria-label= context> <ul class=md-nav__list> <li class=md-nav__item> <a href=#django_components.context.copy_forloop_context class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-function"></code>&nbsp;copy_forloop_context </span> </a> </li> <li class=md-nav__item> <a href=#django_components.context.get_injected_context_var class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-function"></code>&nbsp;get_injected_context_var </span> </a> </li> <li class=md-nav__item> <a href=#django_components.context.set_provided_context_var class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-function"></code>&nbsp;set_provided_context_var </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#django_components.dependencies class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-module"></code>&nbsp;dependencies </span> </a> <nav class=md-nav aria-label= dependencies> <ul class=md-nav__list> <li class=md-nav__item> <a href=#django_components.dependencies.ComponentDependencyMiddleware class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-class"></code>&nbsp;ComponentDependencyMiddleware </span> </a> </li> <li class=md-nav__item> <a href=#django_components.dependencies.render_dependencies class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-function"></code>&nbsp;render_dependencies </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#django_components.expression class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-module"></code>&nbsp;expression </span> </a> <nav class=md-nav aria-label= expression> <ul class=md-nav__list> <li class=md-nav__item> <a href=#django_components.expression.Operator class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-class"></code>&nbsp;Operator </span> </a> </li> <li class=md-nav__item> <a href=#django_components.expression.SpreadOperator class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-class"></code>&nbsp;SpreadOperator </span> </a> </li> <li class=md-nav__item> <a href=#django_components.expression.process_aggregate_kwargs class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-function"></code>&nbsp;process_aggregate_kwargs </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#django_components.finders class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-module"></code>&nbsp;finders </span> </a> <nav class=md-nav aria-label= finders> <ul class=md-nav__list> <li class=md-nav__item> <a href=#django_components.finders.ComponentsFileSystemFinder class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-class"></code>&nbsp;ComponentsFileSystemFinder </span> </a> <nav class=md-nav aria-label= ComponentsFileSystemFinder> <ul class=md-nav__list> <li class=md-nav__item> <a href=#django_components.finders.ComponentsFileSystemFinder.find class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;find </span> </a> </li> <li class=md-nav__item> <a href=#django_components.finders.ComponentsFileSystemFinder.find_location class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;find_location </span> </a> </li> <li class=md-nav__item> <a href=#django_components.finders.ComponentsFileSystemFinder.list class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;list </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#django_components.library class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-module"></code>&nbsp;library </span> </a> <nav class=md-nav aria-label= library> <ul class=md-nav__list> <li class=md-nav__item> <a href=#django_components.library.PROTECTED_TAGS class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;PROTECTED_TAGS </span> </a> </li> <li class=md-nav__item> <a href=#django_components.library.TagProtectedError class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-class"></code>&nbsp;TagProtectedError </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#django_components.management class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-module"></code>&nbsp;management </span> </a> <nav class=md-nav aria-label= management> <ul class=md-nav__list> <li class=md-nav__item> <a href=#django_components.management.commands class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-module"></code>&nbsp;commands </span> </a> <nav class=md-nav aria-label= commands> <ul class=md-nav__list> <li class=md-nav__item> <a href=#django_components.management.commands.startcomponent class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-module"></code>&nbsp;startcomponent </span> </a> <nav class=md-nav aria-label= startcomponent> <ul class=md-nav__list> <li class=md-nav__item> <a href=#django_components.management.commands.startcomponent--management-command-usage class=md-nav__link> <span class=md-ellipsis> Management Command Usage </span> </a> </li> <li class=md-nav__item> <a href=#django_components.management.commands.startcomponent.Command class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-class"></code>&nbsp;Command </span> </a> <nav class=md-nav aria-label= Command> <ul class=md-nav__list> <li class=md-nav__item> <a href=#django_components.management.commands.startcomponent.Command--management-command-usage class=md-nav__link> <span class=md-ellipsis> Management Command Usage </span> </a> </li> <li class=md-nav__item> <a href=#django_components.management.commands.startcomponent.Command--management-command-examples class=md-nav__link> <span class=md-ellipsis> Management Command Examples </span> </a> </li> <li class=md-nav__item> <a href=#django_components.management.commands.startcomponent.Command--creating-a-component-with-default-settings class=md-nav__link> <span class=md-ellipsis> Creating a Component with Default Settings </span> </a> </li> <li class=md-nav__item> <a href=#django_components.management.commands.startcomponent.Command--creating-a-component-with-custom-settings class=md-nav__link> <span class=md-ellipsis> Creating a Component with Custom Settings </span> </a> </li> <li class=md-nav__item> <a href=#django_components.management.commands.startcomponent.Command--overwriting-an-existing-component class=md-nav__link> <span class=md-ellipsis> Overwriting an Existing Component </span> </a> </li> <li class=md-nav__item> <a href=#django_components.management.commands.startcomponent.Command--simulating-component-creation class=md-nav__link> <span class=md-ellipsis> Simulating Component Creation </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#django_components.middleware class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-module"></code>&nbsp;middleware </span> </a> <nav class=md-nav aria-label= middleware> <ul class=md-nav__list> <li class=md-nav__item> <a href=#django_components.middleware.ComponentDependencyMiddleware class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-class"></code>&nbsp;ComponentDependencyMiddleware </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#django_components.node class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-module"></code>&nbsp;node </span> </a> <nav class=md-nav aria-label= node> <ul class=md-nav__list> <li class=md-nav__item> <a href=#django_components.node.BaseNode class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-class"></code>&nbsp;BaseNode </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#django_components.provide class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-module"></code>&nbsp;provide </span> </a> <nav class=md-nav aria-label= provide> <ul class=md-nav__list> <li class=md-nav__item> <a href=#django_components.provide.ProvideNode class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-class"></code>&nbsp;ProvideNode </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#django_components.slots class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-module"></code>&nbsp;slots </span> </a> <nav class=md-nav aria-label= slots> <ul class=md-nav__list> <li class=md-nav__item> <a href=#django_components.slots.FillNode class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-class"></code>&nbsp;FillNode </span> </a> </li> <li class=md-nav__item> <a href=#django_components.slots.Slot class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-class"></code>&nbsp;Slot </span> </a> </li> <li class=md-nav__item> <a href=#django_components.slots.SlotFill class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-class"></code>&nbsp;SlotFill </span> </a> <nav class=md-nav aria-label= SlotFill> <ul class=md-nav__list> <li class=md-nav__item> <a href=#django_components.slots.SlotFill.name class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;name </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#django_components.slots.SlotIsFilled class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-class"></code>&nbsp;SlotIsFilled </span> </a> </li> <li class=md-nav__item> <a href=#django_components.slots.SlotNode class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-class"></code>&nbsp;SlotNode </span> </a> </li> <li class=md-nav__item> <a href=#django_components.slots.SlotRef class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-class"></code>&nbsp;SlotRef </span> </a> </li> <li class=md-nav__item> <a href=#django_components.slots.resolve_fills class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-function"></code>&nbsp;resolve_fills </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#django_components.tag_formatter class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-module"></code>&nbsp;tag_formatter </span> </a> <nav class=md-nav aria-label= tag_formatter> <ul class=md-nav__list> <li class=md-nav__item> <a href=#django_components.tag_formatter.ComponentFormatter class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-class"></code>&nbsp;ComponentFormatter </span> </a> </li> <li class=md-nav__item> <a href=#django_components.tag_formatter.InternalTagFormatter class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-class"></code>&nbsp;InternalTagFormatter </span> </a> </li> <li class=md-nav__item> <a href=#django_components.tag_formatter.ShorthandComponentFormatter class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-class"></code>&nbsp;ShorthandComponentFormatter </span> </a> </li> <li class=md-nav__item> <a href=#django_components.tag_formatter.TagFormatterABC class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-class"></code>&nbsp;TagFormatterABC </span> </a> <nav class=md-nav aria-label= TagFormatterABC> <ul class=md-nav__list> <li class=md-nav__item> <a href=#django_components.tag_formatter.TagFormatterABC.end_tag class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;end_tag </span> </a> </li> <li class=md-nav__item> <a href=#django_components.tag_formatter.TagFormatterABC.parse class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;parse </span> </a> </li> <li class=md-nav__item> <a href=#django_components.tag_formatter.TagFormatterABC.start_tag class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;start_tag </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#django_components.tag_formatter.TagResult class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-class"></code>&nbsp;TagResult </span> </a> <nav class=md-nav aria-label= TagResult> <ul class=md-nav__list> <li class=md-nav__item> <a href=#django_components.tag_formatter.TagResult.component_name class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;component_name </span> </a> </li> <li class=md-nav__item> <a href=#django_components.tag_formatter.TagResult.tokens class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;tokens </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#django_components.tag_formatter.get_tag_formatter class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-function"></code>&nbsp;get_tag_formatter </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#django_components.template class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-module"></code>&nbsp;template </span> </a> <nav class=md-nav aria-label= template> <ul class=md-nav__list> <li class=md-nav__item> <a href=#django_components.template.cached_template class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-function"></code>&nbsp;cached_template </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#django_components.template_loader class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-module"></code>&nbsp;template_loader </span> </a> <nav class=md-nav aria-label= template_loader> <ul class=md-nav__list> <li class=md-nav__item> <a href=#django_components.template_loader.Loader class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-class"></code>&nbsp;Loader </span> </a> <nav class=md-nav aria-label= Loader> <ul class=md-nav__list> <li class=md-nav__item> <a href=#django_components.template_loader.Loader.get_dirs class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-method"></code>&nbsp;get_dirs </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#django_components.template_parser class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-module"></code>&nbsp;template_parser </span> </a> <nav class=md-nav aria-label= template_parser> <ul class=md-nav__list> <li class=md-nav__item> <a href=#django_components.template_parser.parse_bits class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-function"></code>&nbsp;parse_bits </span> </a> </li> <li class=md-nav__item> <a href=#django_components.template_parser.token_kwargs class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-function"></code>&nbsp;token_kwargs </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#django_components.templatetags class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-module"></code>&nbsp;templatetags </span> </a> <nav class=md-nav aria-label= templatetags> <ul class=md-nav__list> <li class=md-nav__item> <a href=#django_components.templatetags.component_tags class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-module"></code>&nbsp;component_tags </span> </a> <nav class=md-nav aria-label= component_tags> <ul class=md-nav__list> <li class=md-nav__item> <a href=#django_components.templatetags.component_tags.TagSpec class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-class"></code>&nbsp;TagSpec </span> </a> <nav class=md-nav aria-label= TagSpec> <ul class=md-nav__list> <li class=md-nav__item> <a href=#django_components.templatetags.component_tags.TagSpec.end_tag class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;end_tag </span> </a> </li> <li class=md-nav__item> <a href=#django_components.templatetags.component_tags.TagSpec.flags class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;flags </span> </a> </li> <li class=md-nav__item> <a href=#django_components.templatetags.component_tags.TagSpec.keywordonly_args class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;keywordonly_args </span> </a> </li> <li class=md-nav__item> <a href=#django_components.templatetags.component_tags.TagSpec.optional_kwargs class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;optional_kwargs </span> </a> </li> <li class=md-nav__item> <a href=#django_components.templatetags.component_tags.TagSpec.pos_or_keyword_args class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;pos_or_keyword_args </span> </a> </li> <li class=md-nav__item> <a href=#django_components.templatetags.component_tags.TagSpec.positional_args_allow_extra class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;positional_args_allow_extra </span> </a> </li> <li class=md-nav__item> <a href=#django_components.templatetags.component_tags.TagSpec.positional_only_args class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;positional_only_args </span> </a> </li> <li class=md-nav__item> <a href=#django_components.templatetags.component_tags.TagSpec.repeatable_kwargs class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;repeatable_kwargs </span> </a> </li> <li class=md-nav__item> <a href=#django_components.templatetags.component_tags.TagSpec.tag class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;tag </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#django_components.templatetags.component_tags.component class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-function"></code>&nbsp;component </span> </a> <nav class=md-nav aria-label= component> <ul class=md-nav__list> <li class=md-nav__item> <a href=#django_components.templatetags.component_tags.component--component-input class=md-nav__link> <span class=md-ellipsis> Component input </span> </a> </li> <li class=md-nav__item> <a href=#django_components.templatetags.component_tags.component--inserting-into-slots class=md-nav__link> <span class=md-ellipsis> Inserting into slots </span> </a> </li> <li class=md-nav__item> <a href=#django_components.templatetags.component_tags.component--isolating-components class=md-nav__link> <span class=md-ellipsis> Isolating components </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#django_components.templatetags.component_tags.component_css_dependencies class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-function"></code>&nbsp;component_css_dependencies </span> </a> </li> <li class=md-nav__item> <a href=#django_components.templatetags.component_tags.component_js_dependencies class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-function"></code>&nbsp;component_js_dependencies </span> </a> </li> <li class=md-nav__item> <a href=#django_components.templatetags.component_tags.fill class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-function"></code>&nbsp;fill </span> </a> <nav class=md-nav aria-label= fill> <ul class=md-nav__list> <li class=md-nav__item> <a href=#django_components.templatetags.component_tags.fill--accessing-slots-default-content-with-the-default-kwarg class=md-nav__link> <span class=md-ellipsis> Accessing slot's default content with the wzxhzdk:8 kwarg </span> </a> </li> <li class=md-nav__item> <a href=#django_components.templatetags.component_tags.fill--accessing-slots-data-with-the-data-kwarg class=md-nav__link> <span class=md-ellipsis> Accessing slot's data with the wzxhzdk:9 kwarg </span> </a> </li> <li class=md-nav__item> <a href=#django_components.templatetags.component_tags.fill--accessing-slot-data-and-default-content-on-the-default-slot class=md-nav__link> <span class=md-ellipsis> Accessing slot data and default content on the default slot </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#django_components.templatetags.component_tags.html_attrs class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-function"></code>&nbsp;html_attrs </span> </a> </li> <li class=md-nav__item> <a href=#django_components.templatetags.component_tags.provide class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-function"></code>&nbsp;provide </span> </a> </li> <li class=md-nav__item> <a href=#django_components.templatetags.component_tags.slot class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-function"></code>&nbsp;slot </span> </a> <nav class=md-nav aria-label= slot> <ul class=md-nav__list> <li class=md-nav__item> <a href=#django_components.templatetags.component_tags.slot--passing-data-to-slots class=md-nav__link> <span class=md-ellipsis> Passing data to slots </span> </a> </li> <li class=md-nav__item> <a href=#django_components.templatetags.component_tags.slot--accessing-default-slot-content class=md-nav__link> <span class=md-ellipsis> Accessing default slot content </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#django_components.templatetags.component_tags.with_tag_spec class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-function"></code>&nbsp;with_tag_spec </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#django_components.types class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-module"></code>&nbsp;types </span> </a> </li> <li class=md-nav__item> <a href=#django_components.util class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-module"></code>&nbsp;util </span> </a> <nav class=md-nav aria-label= util> <ul class=md-nav__list> <li class=md-nav__item> <a href=#django_components.util.cache class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-module"></code>&nbsp;cache </span> </a> <nav class=md-nav aria-label= cache> <ul class=md-nav__list> <li class=md-nav__item> <a href=#django_components.util.cache.lazy_cache class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-function"></code>&nbsp;lazy_cache </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#django_components.util.html class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-module"></code>&nbsp;html </span> </a> <nav class=md-nav aria-label= html> <ul class=md-nav__list> <li class=md-nav__item> <a href=#django_components.util.html.parse_document_or_nodes class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-function"></code>&nbsp;parse_document_or_nodes </span> </a> </li> <li class=md-nav__item> <a href=#django_components.util.html.parse_multiroot_html class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-function"></code>&nbsp;parse_multiroot_html </span> </a> </li> <li class=md-nav__item> <a href=#django_components.util.html.parse_node class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-function"></code>&nbsp;parse_node </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#django_components.util.loader class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-module"></code>&nbsp;loader </span> </a> <nav class=md-nav aria-label= loader> <ul class=md-nav__list> <li class=md-nav__item> <a href=#django_components.util.loader.ComponentFileEntry class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-class"></code>&nbsp;ComponentFileEntry </span> </a> <nav class=md-nav aria-label= ComponentFileEntry> <ul class=md-nav__list> <li class=md-nav__item> <a href=#django_components.util.loader.ComponentFileEntry.dot_path class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;dot_path </span> </a> </li> <li class=md-nav__item> <a href=#django_components.util.loader.ComponentFileEntry.filepath class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;filepath </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#django_components.util.loader.get_component_dirs class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-function"></code>&nbsp;get_component_dirs </span> </a> </li> <li class=md-nav__item> <a href=#django_components.util.loader.get_component_files class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-function"></code>&nbsp;get_component_files </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#django_components.util.logger class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-module"></code>&nbsp;logger </span> </a> <nav class=md-nav aria-label= logger> <ul class=md-nav__list> <li class=md-nav__item> <a href=#django_components.util.logger.trace class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-function"></code>&nbsp;trace </span> </a> </li> <li class=md-nav__item> <a href=#django_components.util.logger.trace_msg class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-function"></code>&nbsp;trace_msg </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#django_components.util.misc class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-module"></code>&nbsp;misc </span> </a> <nav class=md-nav aria-label= misc> <ul class=md-nav__list> <li class=md-nav__item> <a href=#django_components.util.misc.gen_id class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-function"></code>&nbsp;gen_id </span> </a> </li> <li class=md-nav__item> <a href=#django_components.util.misc.get_import_path class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-function"></code>&nbsp;get_import_path </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#django_components.util.tag_parser class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-module"></code>&nbsp;tag_parser </span> </a> <nav class=md-nav aria-label= tag_parser> <ul class=md-nav__list> <li class=md-nav__item> <a href=#django_components.util.tag_parser.TagAttr class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-class"></code>&nbsp;TagAttr </span> </a> <nav class=md-nav aria-label= TagAttr> <ul class=md-nav__list> <li class=md-nav__item> <a href=#django_components.util.tag_parser.TagAttr.quoted class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;quoted </span> </a> </li> <li class=md-nav__item> <a href=#django_components.util.tag_parser.TagAttr.start_index class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;start_index </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#django_components.util.types class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-module"></code>&nbsp;types </span> </a> <nav class=md-nav aria-label= types> <ul class=md-nav__list> <li class=md-nav__item> <a href=#django_components.util.types.EmptyTuple class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-attribute"></code>&nbsp;EmptyTuple </span> </a> </li> <li class=md-nav__item> <a href=#django_components.util.types.EmptyDict class=md-nav__link> <span class=md-ellipsis> <code class="doc-symbol doc-symbol-toc doc-symbol-class"></code>&nbsp;EmptyDict </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <a href=https://github.com/EmilStenstrom/django-components/edit/master/src/src/django_components/__init__.py title="Edit this page" class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M10 20H6V4h7v5h5v3.1l2-2V8l-6-6H6c-1.1 0-2 .9-2 2v16c0 1.1.9 2 2 2h4zm10.2-7c.1 0 .3.1.4.2l1.3 1.3c.2.2.2.6 0 .8l-1 1-2.1-2.1 1-1c.1-.1.2-.2.4-.2m0 3.9L14.1 23H12v-2.1l6.1-6.1z"/></svg> </a> <a href=https://github.com/EmilStenstrom/django-components/raw/master/src/src/django_components/__init__.py title="View source of this page" class="md-content__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M17 18c.56 0 1 .44 1 1s-.44 1-1 1-1-.44-1-1 .44-1 1-1m0-3c-2.73 0-5.06 1.66-6 4 .94 2.34 3.27 4 6 4s5.06-1.66 6-4c-.94-2.34-3.27-4-6-4m0 6.5a2.5 2.5 0 0 1-2.5-2.5 2.5 2.5 0 0 1 2.5-2.5 2.5 2.5 0 0 1 2.5 2.5 2.5 2.5 0 0 1-2.5 2.5M9.27 20H6V4h7v5h5v4.07c.7.08 1.36.25 2 .49V8l-6-6H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4.5a8.2 8.2 0 0 1-1.23-2"/></svg> </a> <div class="doc doc-object doc-module"> <h1 id=django_components class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-module"></code> <span class="doc doc-object-name doc-module-name">django_components</span> <a href=#django_components class=headerlink title="Permanent link">¤</a></h1> <div class="doc doc-contents first"> <p>Main package for Django Components.</p> <p><span class=doc-section-title>Modules:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.app_settings href=#django_components.app_settings>app_settings</a></code></b> <div class=doc-md-description> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.attributes href=#django_components.attributes>attributes</a></code></b> <div class=doc-md-description> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.autodiscovery href=#django_components.autodiscovery>autodiscovery</a></code></b> <div class=doc-md-description> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.component href=#django_components.component>component</a></code></b> <div class=doc-md-description> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.component_media href=#django_components.component_media>component_media</a></code></b> <div class=doc-md-description> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.component_registry href=#django_components.component_registry>component_registry</a></code></b> <div class=doc-md-description> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.components href=#django_components.components>components</a></code></b> <div class=doc-md-description> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.context href=#django_components.context>context</a></code></b> <div class=doc-md-description> <p>This file centralizes various ways we use Django's Context class</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.dependencies href=#django_components.dependencies>dependencies</a></code></b> <div class=doc-md-description> <p>All code related to management of component dependencies (JS and CSS scripts)</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.expression href=#django_components.expression>expression</a></code></b> <div class=doc-md-description> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.finders href=#django_components.finders>finders</a></code></b> <div class=doc-md-description> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.library href=#django_components.library>library</a></code></b> <div class=doc-md-description> <p>Module for interfacing with Django's Library (<code>django.template.library</code>)</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.management href=#django_components.management>management</a></code></b> <div class=doc-md-description> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.middleware href=#django_components.middleware>middleware</a></code></b> <div class=doc-md-description> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.node href=#django_components.node>node</a></code></b> <div class=doc-md-description> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.provide href=#django_components.provide>provide</a></code></b> <div class=doc-md-description> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.slots href=#django_components.slots>slots</a></code></b> <div class=doc-md-description> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.tag_formatter href=#django_components.tag_formatter>tag_formatter</a></code></b> <div class=doc-md-description> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.template href=#django_components.template>template</a></code></b> <div class=doc-md-description> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.template_loader href=#django_components.template_loader>template_loader</a></code></b> <div class=doc-md-description> <p>Template loader that loads templates from each Django app's "components" directory.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.template_parser href=#django_components.template_parser>template_parser</a></code></b> <div class=doc-md-description> <p>Overrides for the Django Template system to allow finer control over template parsing.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.templatetags href=#django_components.templatetags>templatetags</a></code></b> <div class=doc-md-description> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.types href=#django_components.types>types</a></code></b> <div class=doc-md-description> <p>Helper types for IDEs.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.util href=#django_components.util>util</a></code></b> <div class=doc-md-description> </div> </li> </ul> <p><span class=doc-section-title>Classes:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.AlreadyRegistered href=#django_components.AlreadyRegistered>AlreadyRegistered</a></code></b> <div class=doc-md-description> <p>Raised when you try to register a <a href=../api#django_components#Component>Component</a>,</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.Component href=#django_components.Component>Component</a></code></b> <div class=doc-md-description> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.ComponentFileEntry href=#django_components.ComponentFileEntry>ComponentFileEntry</a></code></b> <div class=doc-md-description> <p>Result returned by <a href=../api#django_components.get_component_files><code>get_component_files()</code></a>.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.ComponentFormatter href=#django_components.ComponentFormatter>ComponentFormatter</a></code></b> <div class=doc-md-description> <p>The original django_component's component tag formatter, it uses the <code>{% component %}</code></p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.ComponentRegistry href=#django_components.ComponentRegistry>ComponentRegistry</a></code></b> <div class=doc-md-description> <p>Manages <a href=../api#django_components.Component>components</a> and makes them available</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.ComponentVars href=#django_components.ComponentVars>ComponentVars</a></code></b> <div class=doc-md-description> <p>Type for the variables available inside the component templates.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.ComponentView href=#django_components.ComponentView>ComponentView</a></code></b> <div class=doc-md-description> <p>Subclass of <code>django.views.View</code> where the <code>Component</code> instance is available</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.ComponentsSettings href=#django_components.ComponentsSettings>ComponentsSettings</a></code></b> <div class=doc-md-description> <p>Settings available for django_components.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.ContextBehavior href=#django_components.ContextBehavior>ContextBehavior</a></code></b> <div class=doc-md-description> <p>Configure how (and whether) the context is passed to the component fills</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.DynamicComponent href=#django_components.DynamicComponent>DynamicComponent</a></code></b> <div class=doc-md-description> <p>This component is given a registered name or a reference to another component,</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.EmptyDict href=#django_components.EmptyDict>EmptyDict</a></code></b> <div class=doc-md-description> <p>TypedDict with no members.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.NotRegistered href=#django_components.NotRegistered>NotRegistered</a></code></b> <div class=doc-md-description> <p>Raised when you try to access a <a href=../api#django_components#Component>Component</a>,</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.RegistrySettings href=#django_components.RegistrySettings>RegistrySettings</a></code></b> <div class=doc-md-description> <p>Configuration for a <a href=../api#django_components.ComponentRegistry><code>ComponentRegistry</code></a>.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.ShorthandComponentFormatter href=#django_components.ShorthandComponentFormatter>ShorthandComponentFormatter</a></code></b> <div class=doc-md-description> <p>The component tag formatter that uses <code>{% &lt;name&gt; %}</code> / <code>{% end&lt;name&gt; %}</code> tags.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.Slot href=#django_components.Slot>Slot</a></code></b> <div class=doc-md-description> <p>This class holds the slot content function along with related metadata.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.SlotRef href=#django_components.SlotRef>SlotRef</a></code></b> <div class=doc-md-description> <p>SlotRef allows to treat a slot as a variable. The slot is rendered only once</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.TagFormatterABC href=#django_components.TagFormatterABC>TagFormatterABC</a></code></b> <div class=doc-md-description> <p>Abstract base class for defining custom tag formatters.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.TagProtectedError href=#django_components.TagProtectedError>TagProtectedError</a></code></b> <div class=doc-md-description> <p>The way the <a href=../../concepts/advanced/tag_formatter><code>TagFormatter</code></a> works is that,</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.TagResult href=#django_components.TagResult>TagResult</a></code></b> <div class=doc-md-description> <p>The return value from <a href=../api#django_components.TagFormatterABC.parse><code>TagFormatter.parse()</code></a>.</p> </div> </li> </ul> <p><span class=doc-section-title>Functions:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.autodiscover href=#django_components.autodiscover>autodiscover</a></code></b> <div class=doc-md-description> <p>Search for all python files in</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.cached_template href=#django_components.cached_template>cached_template</a></code></b> <div class=doc-md-description> <p>Create a Template instance that will be cached as per the</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.get_component_dirs href=#django_components.get_component_dirs>get_component_dirs</a></code></b> <div class=doc-md-description> <p>Get directories that may contain component files.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.get_component_files href=#django_components.get_component_files>get_component_files</a></code></b> <div class=doc-md-description> <p>Search for files within the component directories (as defined in</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.import_libraries href=#django_components.import_libraries>import_libraries</a></code></b> <div class=doc-md-description> <p>Import modules set in</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.register href=#django_components.register>register</a></code></b> <div class=doc-md-description> <p>Class decorator for registering a <a href=./#django_components.Component>component</a></p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.render_dependencies href=#django_components.render_dependencies>render_dependencies</a></code></b> <div class=doc-md-description> <p>Given a string that contains parts that were rendered by components,</p> </div> </li> </ul> <p><span class=doc-section-title>Attributes:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.EmptyTuple href=#django_components.EmptyTuple>EmptyTuple</a></code></b> <div class=doc-md-description> <p>Tuple with no members.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.registry href=#django_components.registry>registry</a></code></b> (<code><a class="autorefs autorefs-internal" title=django_components.component_registry.ComponentRegistry href=#django_components.component_registry.ComponentRegistry>ComponentRegistry</a></code>) <div class=doc-md-description> <p>The default and global <a href=./#django_components.ComponentRegistry>component registry</a>.</p> </div> </li> </ul> <div class="doc doc-children"> <div class="doc doc-object doc-attribute"> <h2 id=django_components.EmptyTuple class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">EmptyTuple</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-module-attribute"><code>module-attribute</code></small> </span> <a href=#django_components.EmptyTuple class=headerlink title="Permanent link">¤</a></h2> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>EmptyTuple</span> <span class=o>=</span> <span class=n><a class="autorefs autorefs-external" title=typing.Tuple href=https://docs.python.org/3.12/library/typing.html#typing.Tuple>Tuple</a></span><span class=p>[]</span>
</code></pre></div> <div class="doc doc-contents "> <p>Tuple with no members.</p> <p>You can use this to define a <a href=../api#django_components.Component>Component</a> that accepts NO positional arguments:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=kn>from</span> <span class=nn>django_components</span> <span class=kn>import</span> <span class=n>Component</span><span class=p>,</span> <span class=n>EmptyTuple</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=k>class</span> <span class=nc>Table</span><span class=p>(</span><span class=n>Component</span><span class=p>(</span><span class=n>EmptyTuple</span><span class=p>,</span> <span class=n>Any</span><span class=p>,</span> <span class=n>Any</span><span class=p>,</span> <span class=n>Any</span><span class=p>,</span> <span class=n>Any</span><span class=p>,</span> <span class=n>Any</span><span class=p>))</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a> <span class=o>...</span>
</code></pre></div> <p>After that, when you call <a href=../api#django_components.Component.render><code>Component.render()</code></a> or <a href=../api#django_components.Component.render_to_response><code>Component.render_to_response()</code></a>, the <code>args</code> parameter will raise type error if <code>args</code> is anything else than an empty tuple.</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>Table</span><span class=o>.</span><span class=n>render</span><span class=p>(</span>
<a id=__codelineno-1-2 name=__codelineno-1-2 href=#__codelineno-1-2></a> <span class=n>args</span><span class=p>:</span> <span class=p>(),</span>
<a id=__codelineno-1-3 name=__codelineno-1-3 href=#__codelineno-1-3></a><span class=p>)</span>
</code></pre></div> <p>Omitting <code>args</code> is also fine:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-2-1 name=__codelineno-2-1 href=#__codelineno-2-1></a><span class=n>Table</span><span class=o>.</span><span class=n>render</span><span class=p>()</span>
</code></pre></div> <p>Other values are not allowed. This will raise an error with MyPy:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-3-1 name=__codelineno-3-1 href=#__codelineno-3-1></a><span class=n>Table</span><span class=o>.</span><span class=n>render</span><span class=p>(</span>
<a id=__codelineno-3-2 name=__codelineno-3-2 href=#__codelineno-3-2></a> <span class=n>args</span><span class=p>:</span> <span class=p>(</span><span class=s2>&quot;one&quot;</span><span class=p>,</span> <span class=mi>2</span><span class=p>,</span> <span class=s2>&quot;three&quot;</span><span class=p>),</span>
<a id=__codelineno-3-3 name=__codelineno-3-3 href=#__codelineno-3-3></a><span class=p>)</span>
</code></pre></div> </div> </div> <div class="doc doc-object doc-attribute"> <h2 id=django_components.registry class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">registry</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-module-attribute"><code>module-attribute</code></small> </span> <a href=#django_components.registry class=headerlink title="Permanent link">¤</a></h2> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>registry</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-internal" title=django_components.component_registry.ComponentRegistry href=#django_components.component_registry.ComponentRegistry>ComponentRegistry</a></span> <span class=o>=</span> <span class=n><a class="autorefs autorefs-internal" title=django_components.component_registry.ComponentRegistry href=#django_components.component_registry.ComponentRegistry>ComponentRegistry</a></span><span class=p>()</span>
</code></pre></div> <div class="doc doc-contents "> <p>The default and global <a href=./#django_components.ComponentRegistry>component registry</a>. Use this instance to directly register or remove components:</p> <p>See <a href=../../concepts/advanced/component_registry>Registering components</a>.</p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=c1># Register components</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a><span class=n>registry</span><span class=o>.</span><span class=n>register</span><span class=p>(</span><span class=s2>&quot;button&quot;</span><span class=p>,</span> <span class=n>ButtonComponent</span><span class=p>)</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=n>registry</span><span class=o>.</span><span class=n>register</span><span class=p>(</span><span class=s2>&quot;card&quot;</span><span class=p>,</span> <span class=n>CardComponent</span><span class=p>)</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a><span class=c1># Get single</span>
<a id=__codelineno-0-6 name=__codelineno-0-6 href=#__codelineno-0-6></a><span class=n>registry</span><span class=o>.</span><span class=n>get</span><span class=p>(</span><span class=s2>&quot;button&quot;</span><span class=p>)</span>
<a id=__codelineno-0-7 name=__codelineno-0-7 href=#__codelineno-0-7></a>
<a id=__codelineno-0-8 name=__codelineno-0-8 href=#__codelineno-0-8></a><span class=c1># Get all</span>
<a id=__codelineno-0-9 name=__codelineno-0-9 href=#__codelineno-0-9></a><span class=n>registry</span><span class=o>.</span><span class=n>all</span><span class=p>()</span>
<a id=__codelineno-0-10 name=__codelineno-0-10 href=#__codelineno-0-10></a>
<a id=__codelineno-0-11 name=__codelineno-0-11 href=#__codelineno-0-11></a><span class=c1># Unregister single</span>
<a id=__codelineno-0-12 name=__codelineno-0-12 href=#__codelineno-0-12></a><span class=n>registry</span><span class=o>.</span><span class=n>unregister</span><span class=p>(</span><span class=s2>&quot;button&quot;</span><span class=p>)</span>
<a id=__codelineno-0-13 name=__codelineno-0-13 href=#__codelineno-0-13></a>
<a id=__codelineno-0-14 name=__codelineno-0-14 href=#__codelineno-0-14></a><span class=c1># Unregister all</span>
<a id=__codelineno-0-15 name=__codelineno-0-15 href=#__codelineno-0-15></a><span class=n>registry</span><span class=o>.</span><span class=n>clear</span><span class=p>()</span>
</code></pre></div> </div> </div> <div class="doc doc-object doc-class"> <h2 id=django_components.AlreadyRegistered class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-class"></code> <span class="doc doc-object-name doc-class-name">AlreadyRegistered</span> <a href=#django_components.AlreadyRegistered class=headerlink title="Permanent link">¤</a></h2> <div class="doc doc-contents "> <p class="doc doc-class-bases"> Bases: <code><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/exceptions.html#Exception>Exception</a></code></p> <p>Raised when you try to register a <a href=../api#django_components#Component>Component</a>, but it's already registered with given <a href=../api#django_components.ComponentRegistry>ComponentRegistry</a>.</p> </div> </div> <div class="doc doc-object doc-class"> <h2 id=django_components.Component class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-class"></code> <span class="doc doc-object-name doc-class-name">Component</span> <a href=#django_components.Component class=headerlink title="Permanent link">¤</a></h2> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>Component</span><span class=p>(</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a> <span class=n>registered_name</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a> <span class=n>component_id</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a> <span class=n>outer_context</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><span title=django.template.context.Context>Context</span></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a> <span class=n>registry</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-internal" title=django_components.component_registry.ComponentRegistry href=#django_components.component_registry.ComponentRegistry>ComponentRegistry</a></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-6 name=__codelineno-0-6 href=#__codelineno-0-6></a><span class=p>)</span>
</code></pre></div> <div class="doc doc-contents "> <p class="doc doc-class-bases"> Bases: <code><a class="autorefs autorefs-external" title=typing.Generic href=https://docs.python.org/3.12/library/typing.html#typing.Generic>Generic</a>[<span title=django_components.component.ArgsType>ArgsType</span>, <span title=django_components.component.KwargsType>KwargsType</span>, <span title=django_components.component.SlotsType>SlotsType</span>, <span title=django_components.component.DataType>DataType</span>, <span title=django_components.component.JsDataType>JsDataType</span>, <span title=django_components.component.CssDataType>CssDataType</span>]</code></p> <p><span class=doc-section-title>Methods:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.Component.as_view href=#django_components.Component.as_view>as_view</a></code></b> <div class=doc-md-description> <p>Shortcut for calling <code>Component.View.as_view</code> and passing component instance to it.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.Component.get_template href=#django_components.Component.get_template>get_template</a></code></b> <div class=doc-md-description> <p>Inlined Django template associated with this component. Can be a plain string or a Template instance.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.Component.get_template_name href=#django_components.Component.get_template_name>get_template_name</a></code></b> <div class=doc-md-description> <p>Filepath to the Django template associated with this component.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.Component.inject href=#django_components.Component.inject>inject</a></code></b> <div class=doc-md-description> <p>Use this method to retrieve the data that was passed to a <code>{% provide %}</code> tag</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.Component.on_render_after href=#django_components.Component.on_render_after>on_render_after</a></code></b> <div class=doc-md-description> <p>Hook that runs just after the component's template was rendered.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.Component.on_render_before href=#django_components.Component.on_render_before>on_render_before</a></code></b> <div class=doc-md-description> <p>Hook that runs just before the component's template is rendered.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.Component.render href=#django_components.Component.render>render</a></code></b> <div class=doc-md-description> <p>Render the component into a string.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.Component.render_to_response href=#django_components.Component.render_to_response>render_to_response</a></code></b> <div class=doc-md-description> <p>Render the component and wrap the content in the response class.</p> </div> </li> </ul> <p><span class=doc-section-title>Attributes:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.Component.Media href=#django_components.Component.Media>Media</a></code></b> <div class=doc-md-description> <p>Defines JS and CSS media files associated with this component.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.Component.css href=#django_components.Component.css>css</a></code></b> (<code><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>]</code>) <div class=doc-md-description> <p>Inlined CSS associated with this component.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.Component.input href=#django_components.Component.input>input</a></code></b> (<code><span title=django_components.component.RenderInput>RenderInput</span>[<span title=django_components.component.ArgsType>ArgsType</span>, <span title=django_components.component.KwargsType>KwargsType</span>, <span title=django_components.component.SlotsType>SlotsType</span>]</code>) <div class=doc-md-description> <p>Input holds the data (like arg, kwargs, slots) that were passsed to</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.Component.is_filled href=#django_components.Component.is_filled>is_filled</a></code></b> (<code><a class="autorefs autorefs-internal" title=django_components.slots.SlotIsFilled href=#django_components.slots.SlotIsFilled>SlotIsFilled</a></code>) <div class=doc-md-description> <p>Dictionary describing which slots have or have not been filled.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.Component.js href=#django_components.Component.js>js</a></code></b> (<code><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>]</code>) <div class=doc-md-description> <p>Inlined JS associated with this component.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.Component.media href=#django_components.Component.media>media</a></code></b> (<code><a class="autorefs autorefs-internal" title=django_components.component.Component.Media href=#django_components.component.Component.Media>Media</a></code>) <div class=doc-md-description> <p>Normalized definition of JS and CSS media files associated with this component.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.Component.response_class href=#django_components.Component.response_class>response_class</a></code></b> <div class=doc-md-description> <p>This allows to configure what class is used to generate response from <code>render_to_response</code></p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.Component.template href=#django_components.Component.template>template</a></code></b> (<code><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a>[<a class="autorefs autorefs-external" title=typing.Union href=https://docs.python.org/3.12/library/typing.html#typing.Union>Union</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>, <span title=django.template.base.Template>Template</span>]]</code>) <div class=doc-md-description> <p>Inlined Django template associated with this component. Can be a plain string or a Template instance.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.Component.template_name href=#django_components.Component.template_name>template_name</a></code></b> (<code><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>]</code>) <div class=doc-md-description> <p>Filepath to the Django template associated with this component.</p> </div> </li> </ul> <details class=quote> <summary>Source code in <code>src/django_components/component.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-287>287</a></span>
<span class=normal><a href=#__codelineno-0-288>288</a></span>
<span class=normal><a href=#__codelineno-0-289>289</a></span>
<span class=normal><a href=#__codelineno-0-290>290</a></span>
<span class=normal><a href=#__codelineno-0-291>291</a></span>
<span class=normal><a href=#__codelineno-0-292>292</a></span>
<span class=normal><a href=#__codelineno-0-293>293</a></span>
<span class=normal><a href=#__codelineno-0-294>294</a></span>
<span class=normal><a href=#__codelineno-0-295>295</a></span>
<span class=normal><a href=#__codelineno-0-296>296</a></span>
<span class=normal><a href=#__codelineno-0-297>297</a></span>
<span class=normal><a href=#__codelineno-0-298>298</a></span>
<span class=normal><a href=#__codelineno-0-299>299</a></span>
<span class=normal><a href=#__codelineno-0-300>300</a></span>
<span class=normal><a href=#__codelineno-0-301>301</a></span>
<span class=normal><a href=#__codelineno-0-302>302</a></span>
<span class=normal><a href=#__codelineno-0-303>303</a></span>
<span class=normal><a href=#__codelineno-0-304>304</a></span>
<span class=normal><a href=#__codelineno-0-305>305</a></span>
<span class=normal><a href=#__codelineno-0-306>306</a></span>
<span class=normal><a href=#__codelineno-0-307>307</a></span>
<span class=normal><a href=#__codelineno-0-308>308</a></span>
<span class=normal><a href=#__codelineno-0-309>309</a></span>
<span class=normal><a href=#__codelineno-0-310>310</a></span>
<span class=normal><a href=#__codelineno-0-311>311</a></span>
<span class=normal><a href=#__codelineno-0-312>312</a></span>
<span class=normal><a href=#__codelineno-0-313>313</a></span>
<span class=normal><a href=#__codelineno-0-314>314</a></span>
<span class=normal><a href=#__codelineno-0-315>315</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-287 name=__codelineno-0-287></a><span class=k>def</span> <span class=fm>__init__</span><span class=p>(</span>
<a id=__codelineno-0-288 name=__codelineno-0-288></a> <span class=bp>self</span><span class=p>,</span>
<a id=__codelineno-0-289 name=__codelineno-0-289></a> <span class=n>registered_name</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=nb>str</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-290 name=__codelineno-0-290></a> <span class=n>component_id</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=nb>str</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-291 name=__codelineno-0-291></a> <span class=n>outer_context</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>Context</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-292 name=__codelineno-0-292></a> <span class=n>registry</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>ComponentRegistry</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span> <span class=c1># noqa F811</span>
<a id=__codelineno-0-293 name=__codelineno-0-293></a><span class=p>):</span>
<a id=__codelineno-0-294 name=__codelineno-0-294></a> <span class=c1># When user first instantiates the component class before calling</span>
<a id=__codelineno-0-295 name=__codelineno-0-295></a> <span class=c1># `render` or `render_to_response`, then we want to allow the render</span>
<a id=__codelineno-0-296 name=__codelineno-0-296></a> <span class=c1># function to make use of the instantiated object.</span>
<a id=__codelineno-0-297 name=__codelineno-0-297></a> <span class=c1>#</span>
<a id=__codelineno-0-298 name=__codelineno-0-298></a> <span class=c1># So while `MyComp.render()` creates a new instance of MyComp internally,</span>
<a id=__codelineno-0-299 name=__codelineno-0-299></a> <span class=c1># if we do `MyComp(registered_name=&quot;abc&quot;).render()`, then we use the</span>
<a id=__codelineno-0-300 name=__codelineno-0-300></a> <span class=c1># already-instantiated object.</span>
<a id=__codelineno-0-301 name=__codelineno-0-301></a> <span class=c1>#</span>
<a id=__codelineno-0-302 name=__codelineno-0-302></a> <span class=c1># To achieve that, we want to re-assign the class methods as instance methods.</span>
<a id=__codelineno-0-303 name=__codelineno-0-303></a> <span class=c1># For that we have to &quot;unwrap&quot; the class methods via __func__.</span>
<a id=__codelineno-0-304 name=__codelineno-0-304></a> <span class=c1># See https://stackoverflow.com/a/76706399/9788634</span>
<a id=__codelineno-0-305 name=__codelineno-0-305></a> <span class=bp>self</span><span class=o>.</span><span class=n>render_to_response</span> <span class=o>=</span> <span class=n>types</span><span class=o>.</span><span class=n>MethodType</span><span class=p>(</span><span class=bp>self</span><span class=o>.</span><span class=vm>__class__</span><span class=o>.</span><span class=n>render_to_response</span><span class=o>.</span><span class=vm>__func__</span><span class=p>,</span> <span class=bp>self</span><span class=p>)</span> <span class=c1># type: ignore</span>
<a id=__codelineno-0-306 name=__codelineno-0-306></a> <span class=bp>self</span><span class=o>.</span><span class=n>render</span> <span class=o>=</span> <span class=n>types</span><span class=o>.</span><span class=n>MethodType</span><span class=p>(</span><span class=bp>self</span><span class=o>.</span><span class=vm>__class__</span><span class=o>.</span><span class=n>render</span><span class=o>.</span><span class=vm>__func__</span><span class=p>,</span> <span class=bp>self</span><span class=p>)</span> <span class=c1># type: ignore</span>
<a id=__codelineno-0-307 name=__codelineno-0-307></a> <span class=bp>self</span><span class=o>.</span><span class=n>as_view</span> <span class=o>=</span> <span class=n>types</span><span class=o>.</span><span class=n>MethodType</span><span class=p>(</span><span class=bp>self</span><span class=o>.</span><span class=vm>__class__</span><span class=o>.</span><span class=n>as_view</span><span class=o>.</span><span class=vm>__func__</span><span class=p>,</span> <span class=bp>self</span><span class=p>)</span> <span class=c1># type: ignore</span>
<a id=__codelineno-0-308 name=__codelineno-0-308></a>
<a id=__codelineno-0-309 name=__codelineno-0-309></a> <span class=bp>self</span><span class=o>.</span><span class=n>registered_name</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=nb>str</span><span class=p>]</span> <span class=o>=</span> <span class=n>registered_name</span>
<a id=__codelineno-0-310 name=__codelineno-0-310></a> <span class=bp>self</span><span class=o>.</span><span class=n>outer_context</span><span class=p>:</span> <span class=n>Context</span> <span class=o>=</span> <span class=n>outer_context</span> <span class=ow>or</span> <span class=n>Context</span><span class=p>()</span>
<a id=__codelineno-0-311 name=__codelineno-0-311></a> <span class=bp>self</span><span class=o>.</span><span class=n>component_id</span> <span class=o>=</span> <span class=n>component_id</span> <span class=ow>or</span> <span class=n>gen_id</span><span class=p>()</span>
<a id=__codelineno-0-312 name=__codelineno-0-312></a> <span class=bp>self</span><span class=o>.</span><span class=n>registry</span> <span class=o>=</span> <span class=n>registry</span> <span class=ow>or</span> <span class=n>registry_</span>
<a id=__codelineno-0-313 name=__codelineno-0-313></a> <span class=bp>self</span><span class=o>.</span><span class=n>_render_stack</span><span class=p>:</span> <span class=n>Deque</span><span class=p>[</span><span class=n>RenderStackItem</span><span class=p>[</span><span class=n>ArgsType</span><span class=p>,</span> <span class=n>KwargsType</span><span class=p>,</span> <span class=n>SlotsType</span><span class=p>]]</span> <span class=o>=</span> <span class=n>deque</span><span class=p>()</span>
<a id=__codelineno-0-314 name=__codelineno-0-314></a> <span class=c1># None == uninitialized, False == No types, Tuple == types</span>
<a id=__codelineno-0-315 name=__codelineno-0-315></a> <span class=bp>self</span><span class=o>.</span><span class=n>_types</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>Union</span><span class=p>[</span><span class=n>Tuple</span><span class=p>[</span><span class=n>Any</span><span class=p>,</span> <span class=n>Any</span><span class=p>,</span> <span class=n>Any</span><span class=p>,</span> <span class=n>Any</span><span class=p>,</span> <span class=n>Any</span><span class=p>,</span> <span class=n>Any</span><span class=p>],</span> <span class=n>Literal</span><span class=p>[</span><span class=kc>False</span><span class=p>]]]</span> <span class=o>=</span> <span class=kc>None</span>
</code></pre></div></td></tr></table></div> </details> <div class="doc doc-children"> <div class="doc doc-object doc-attribute"> <h3 id=django_components.Component.Media class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">Media</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.Component.Media class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>Media</span> <span class=o>=</span> <span class=n><a class="autorefs autorefs-internal" title=django_components.component_media.ComponentMediaInput href=#django_components.component_media.ComponentMediaInput>ComponentMediaInput</a></span>
</code></pre></div> <div class="doc doc-contents "> <p>Defines JS and CSS media files associated with this component.</p> </div> </div> <div class="doc doc-object doc-attribute"> <h3 id=django_components.Component.css class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">css</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.Component.css class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>css</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>Inlined CSS associated with this component.</p> </div> </div> <div class="doc doc-object doc-attribute"> <h3 id=django_components.Component.input class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">input</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-property"><code>property</code></small> </span> <a href=#django_components.Component.input class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nb>input</span><span class=p>:</span> <span class=n><span title=django_components.component.RenderInput>RenderInput</span></span><span class=p>[</span><span class=n><span title=django_components.component.ArgsType>ArgsType</span></span><span class=p>,</span> <span class=n><span title=django_components.component.KwargsType>KwargsType</span></span><span class=p>,</span> <span class=n><span title=django_components.component.SlotsType>SlotsType</span></span><span class=p>]</span>
</code></pre></div> <div class="doc doc-contents "> <p>Input holds the data (like arg, kwargs, slots) that were passsed to the current execution of the <code>render</code> method.</p> </div> </div> <div class="doc doc-object doc-attribute"> <h3 id=django_components.Component.is_filled class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">is_filled</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-property"><code>property</code></small> </span> <a href=#django_components.Component.is_filled class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>is_filled</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-internal" title=django_components.slots.SlotIsFilled href=#django_components.slots.SlotIsFilled>SlotIsFilled</a></span>
</code></pre></div> <div class="doc doc-contents "> <p>Dictionary describing which slots have or have not been filled.</p> <p>This attribute is available for use only within the template as <code>{{ component_vars.is_filled.slot_name }}</code>, and within <code>on_render_before</code> and <code>on_render_after</code> hooks.</p> </div> </div> <div class="doc doc-object doc-attribute"> <h3 id=django_components.Component.js class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">js</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.Component.js class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>js</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>Inlined JS associated with this component.</p> </div> </div> <div class="doc doc-object doc-attribute"> <h3 id=django_components.Component.media class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">media</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.Component.media class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>media</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-internal" title=django_components.component.Component.Media href=#django_components.component.Component.Media>Media</a></span>
</code></pre></div> <div class="doc doc-contents "> <p>Normalized definition of JS and CSS media files associated with this component.</p> <p>NOTE: This field is generated from Component.Media class.</p> </div> </div> <div class="doc doc-object doc-attribute"> <h3 id=django_components.Component.response_class class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">response_class</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.Component.response_class class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>response_class</span> <span class=o>=</span> <span class=n><a class="autorefs autorefs-external" title=django.http.HttpResponse href=https://docs.djangoproject.com/en/5.0/ref/request-response/#django.http.HttpResponse>HttpResponse</a></span>
</code></pre></div> <div class="doc doc-contents "> <p>This allows to configure what class is used to generate response from <code>render_to_response</code></p> </div> </div> <div class="doc doc-object doc-attribute"> <h3 id=django_components.Component.template class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">template</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.Component.template class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>template</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Union href=https://docs.python.org/3.12/library/typing.html#typing.Union>Union</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span> <span class=n><span title=django.template.base.Template>Template</span></span><span class=p>]]</span> <span class=o>=</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>Inlined Django template associated with this component. Can be a plain string or a Template instance.</p> <p>Only one of <code>template_name</code>, <code>get_template_name</code>, <code>template</code> or <code>get_template</code> must be defined.</p> </div> </div> <div class="doc doc-object doc-attribute"> <h3 id=django_components.Component.template_name class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">template_name</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.Component.template_name class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>template_name</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>Filepath to the Django template associated with this component.</p> <p>The filepath must be relative to either the file where the component class was defined, or one of the roots of <code>STATIFILES_DIRS</code>.</p> <p>Only one of <code>template_name</code>, <code>get_template_name</code>, <code>template</code> or <code>get_template</code> must be defined.</p> </div> </div> <div class="doc doc-object doc-function"> <h3 id=django_components.Component.as_view class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">as_view</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-classmethod"><code>classmethod</code></small> </span> <a href=#django_components.Component.as_view class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>as_view</span><span class=p>(</span><span class=o>**</span><span class=n>initkwargs</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Any href=https://docs.python.org/3.12/library/typing.html#typing.Any>Any</a></span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><span title=django_components.component.ViewFn>ViewFn</span></span>
</code></pre></div> <div class="doc doc-contents "> <p>Shortcut for calling <code>Component.View.as_view</code> and passing component instance to it.</p> <details class=quote> <summary>Source code in <code>src/django_components/component.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-460>460</a></span>
<span class=normal><a href=#__codelineno-0-461>461</a></span>
<span class=normal><a href=#__codelineno-0-462>462</a></span>
<span class=normal><a href=#__codelineno-0-463>463</a></span>
<span class=normal><a href=#__codelineno-0-464>464</a></span>
<span class=normal><a href=#__codelineno-0-465>465</a></span>
<span class=normal><a href=#__codelineno-0-466>466</a></span>
<span class=normal><a href=#__codelineno-0-467>467</a></span>
<span class=normal><a href=#__codelineno-0-468>468</a></span>
<span class=normal><a href=#__codelineno-0-469>469</a></span>
<span class=normal><a href=#__codelineno-0-470>470</a></span>
<span class=normal><a href=#__codelineno-0-471>471</a></span>
<span class=normal><a href=#__codelineno-0-472>472</a></span>
<span class=normal><a href=#__codelineno-0-473>473</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-460 name=__codelineno-0-460></a><span class=nd>@classmethod</span>
<a id=__codelineno-0-461 name=__codelineno-0-461></a><span class=k>def</span> <span class=nf>as_view</span><span class=p>(</span><span class=bp>cls</span><span class=p>,</span> <span class=o>**</span><span class=n>initkwargs</span><span class=p>:</span> <span class=n>Any</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n>ViewFn</span><span class=p>:</span>
<a id=__codelineno-0-462 name=__codelineno-0-462></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-463 name=__codelineno-0-463></a><span class=sd> Shortcut for calling `Component.View.as_view` and passing component instance to it.</span>
<a id=__codelineno-0-464 name=__codelineno-0-464></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-465 name=__codelineno-0-465></a> <span class=c1># This method may be called as class method or as instance method.</span>
<a id=__codelineno-0-466 name=__codelineno-0-466></a> <span class=c1># If called as class method, create a new instance.</span>
<a id=__codelineno-0-467 name=__codelineno-0-467></a> <span class=k>if</span> <span class=nb>isinstance</span><span class=p>(</span><span class=bp>cls</span><span class=p>,</span> <span class=n>Component</span><span class=p>):</span>
<a id=__codelineno-0-468 name=__codelineno-0-468></a> <span class=n>comp</span><span class=p>:</span> <span class=n>Component</span> <span class=o>=</span> <span class=bp>cls</span>
<a id=__codelineno-0-469 name=__codelineno-0-469></a> <span class=k>else</span><span class=p>:</span>
<a id=__codelineno-0-470 name=__codelineno-0-470></a> <span class=n>comp</span> <span class=o>=</span> <span class=bp>cls</span><span class=p>()</span>
<a id=__codelineno-0-471 name=__codelineno-0-471></a>
<a id=__codelineno-0-472 name=__codelineno-0-472></a> <span class=c1># Allow the View class to access this component via `self.component`</span>
<a id=__codelineno-0-473 name=__codelineno-0-473></a> <span class=k>return</span> <span class=n>comp</span><span class=o>.</span><span class=n>View</span><span class=o>.</span><span class=n>as_view</span><span class=p>(</span><span class=o>**</span><span class=n>initkwargs</span><span class=p>,</span> <span class=n>component</span><span class=o>=</span><span class=n>comp</span><span class=p>)</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h3 id=django_components.Component.get_template class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">get_template</span> <a href=#django_components.Component.get_template class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>get_template</span><span class=p>(</span><span class=n>context</span><span class=p>:</span> <span class=n><span title=django.template.context.Context>Context</span></span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Union href=https://docs.python.org/3.12/library/typing.html#typing.Union>Union</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span> <span class=n><span title=django.template.base.Template>Template</span></span><span class=p>]]</span>
</code></pre></div> <div class="doc doc-contents "> <p>Inlined Django template associated with this component. Can be a plain string or a Template instance.</p> <p>Only one of <code>template_name</code>, <code>get_template_name</code>, <code>template</code> or <code>get_template</code> must be defined.</p> <details class=quote> <summary>Source code in <code>src/django_components/component.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-227>227</a></span>
<span class=normal><a href=#__codelineno-0-228>228</a></span>
<span class=normal><a href=#__codelineno-0-229>229</a></span>
<span class=normal><a href=#__codelineno-0-230>230</a></span>
<span class=normal><a href=#__codelineno-0-231>231</a></span>
<span class=normal><a href=#__codelineno-0-232>232</a></span>
<span class=normal><a href=#__codelineno-0-233>233</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-227 name=__codelineno-0-227></a><span class=k>def</span> <span class=nf>get_template</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>context</span><span class=p>:</span> <span class=n>Context</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n>Optional</span><span class=p>[</span><span class=n>Union</span><span class=p>[</span><span class=nb>str</span><span class=p>,</span> <span class=n>Template</span><span class=p>]]:</span>
<a id=__codelineno-0-228 name=__codelineno-0-228></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-229 name=__codelineno-0-229></a><span class=sd> Inlined Django template associated with this component. Can be a plain string or a Template instance.</span>
<a id=__codelineno-0-230 name=__codelineno-0-230></a>
<a id=__codelineno-0-231 name=__codelineno-0-231></a><span class=sd> Only one of `template_name`, `get_template_name`, `template` or `get_template` must be defined.</span>
<a id=__codelineno-0-232 name=__codelineno-0-232></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-233 name=__codelineno-0-233></a> <span class=k>return</span> <span class=kc>None</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h3 id=django_components.Component.get_template_name class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">get_template_name</span> <a href=#django_components.Component.get_template_name class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>get_template_name</span><span class=p>(</span><span class=n>context</span><span class=p>:</span> <span class=n><span title=django.template.context.Context>Context</span></span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]</span>
</code></pre></div> <div class="doc doc-contents "> <p>Filepath to the Django template associated with this component.</p> <p>The filepath must be relative to either the file where the component class was defined, or one of the roots of <code>STATIFILES_DIRS</code>.</p> <p>Only one of <code>template_name</code>, <code>get_template_name</code>, <code>template</code> or <code>get_template</code> must be defined.</p> <details class=quote> <summary>Source code in <code>src/django_components/component.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-209>209</a></span>
<span class=normal><a href=#__codelineno-0-210>210</a></span>
<span class=normal><a href=#__codelineno-0-211>211</a></span>
<span class=normal><a href=#__codelineno-0-212>212</a></span>
<span class=normal><a href=#__codelineno-0-213>213</a></span>
<span class=normal><a href=#__codelineno-0-214>214</a></span>
<span class=normal><a href=#__codelineno-0-215>215</a></span>
<span class=normal><a href=#__codelineno-0-216>216</a></span>
<span class=normal><a href=#__codelineno-0-217>217</a></span>
<span class=normal><a href=#__codelineno-0-218>218</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-209 name=__codelineno-0-209></a><span class=k>def</span> <span class=nf>get_template_name</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>context</span><span class=p>:</span> <span class=n>Context</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-0-210 name=__codelineno-0-210></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-211 name=__codelineno-0-211></a><span class=sd> Filepath to the Django template associated with this component.</span>
<a id=__codelineno-0-212 name=__codelineno-0-212></a>
<a id=__codelineno-0-213 name=__codelineno-0-213></a><span class=sd> The filepath must be relative to either the file where the component class was defined,</span>
<a id=__codelineno-0-214 name=__codelineno-0-214></a><span class=sd> or one of the roots of `STATIFILES_DIRS`.</span>
<a id=__codelineno-0-215 name=__codelineno-0-215></a>
<a id=__codelineno-0-216 name=__codelineno-0-216></a><span class=sd> Only one of `template_name`, `get_template_name`, `template` or `get_template` must be defined.</span>
<a id=__codelineno-0-217 name=__codelineno-0-217></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-218 name=__codelineno-0-218></a> <span class=k>return</span> <span class=kc>None</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h3 id=django_components.Component.inject class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">inject</span> <a href=#django_components.Component.inject class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>inject</span><span class=p>(</span><span class=n>key</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span> <span class=n>default</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Any href=https://docs.python.org/3.12/library/typing.html#typing.Any>Any</a></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-external" title=typing.Any href=https://docs.python.org/3.12/library/typing.html#typing.Any>Any</a></span>
</code></pre></div> <div class="doc doc-contents "> <p>Use this method to retrieve the data that was passed to a <code>{% provide %}</code> tag with the corresponding key.</p> <p>To retrieve the data, <code>inject()</code> must be called inside a component that's inside the <code>{% provide %}</code> tag.</p> <p>You may also pass a default that will be used if the <code>provide</code> tag with given key was NOT found.</p> <p>This method mut be used inside the <code>get_context_data()</code> method and raises an error if called elsewhere.</p> <p>Example:</p> <p>Given this template: <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=cp>{%</span> <span class=k>provide</span> <span class=s2>&quot;provider&quot;</span> <span class=nv>hello</span><span class=o>=</span><span class=s2>&quot;world&quot;</span> <span class=cp>%}</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a><span class=x> </span><span class=cp>{%</span> <span class=k>component</span> <span class=s2>&quot;my_comp&quot;</span> <span class=cp>%}</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=x> </span><span class=cp>{%</span> <span class=k>endcomponent</span> <span class=cp>%}</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a><span class=cp>{%</span> <span class=k>endprovide</span> <span class=cp>%}</span>
</code></pre></div></p> <p>And given this definition of "my_comp" component: <div class=highlight><pre><span></span><code><a id=__codelineno-1-1 name=__codelineno-1-1 href=#__codelineno-1-1></a><span class=kn>from</span> <span class=nn>django_components</span> <span class=kn>import</span> <span class=n>Component</span><span class=p>,</span> <span class=n>register</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=nd>@register</span><span class=p>(</span><span class=s2>&quot;my_comp&quot;</span><span class=p>)</span>
<a id=__codelineno-1-4 name=__codelineno-1-4 href=#__codelineno-1-4></a><span class=k>class</span> <span class=nc>MyComp</span><span class=p>(</span><span class=n>Component</span><span class=p>):</span>
<a id=__codelineno-1-5 name=__codelineno-1-5 href=#__codelineno-1-5></a> <span class=n>template</span> <span class=o>=</span> <span class=s2>&quot;hi {{ data.hello }}!&quot;</span>
<a id=__codelineno-1-6 name=__codelineno-1-6 href=#__codelineno-1-6></a> <span class=k>def</span> <span class=nf>get_context_data</span><span class=p>(</span><span class=bp>self</span><span class=p>):</span>
<a id=__codelineno-1-7 name=__codelineno-1-7 href=#__codelineno-1-7></a> <span class=n>data</span> <span class=o>=</span> <span class=bp>self</span><span class=o>.</span><span class=n>inject</span><span class=p>(</span><span class=s2>&quot;provider&quot;</span><span class=p>)</span>
<a id=__codelineno-1-8 name=__codelineno-1-8 href=#__codelineno-1-8></a> <span class=k>return</span> <span class=p>{</span><span class=s2>&quot;data&quot;</span><span class=p>:</span> <span class=n>data</span><span class=p>}</span>
</code></pre></div></p> <p>This renders into: <div class=highlight><pre><span></span><code><a id=__codelineno-2-1 name=__codelineno-2-1 href=#__codelineno-2-1></a>hi world!
</code></pre></div></p> <p>As the <code>{{ data.hello }}</code> is taken from the "provider".</p> <details class=quote> <summary>Source code in <code>src/django_components/component.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-410>410</a></span>
<span class=normal><a href=#__codelineno-0-411>411</a></span>
<span class=normal><a href=#__codelineno-0-412>412</a></span>
<span class=normal><a href=#__codelineno-0-413>413</a></span>
<span class=normal><a href=#__codelineno-0-414>414</a></span>
<span class=normal><a href=#__codelineno-0-415>415</a></span>
<span class=normal><a href=#__codelineno-0-416>416</a></span>
<span class=normal><a href=#__codelineno-0-417>417</a></span>
<span class=normal><a href=#__codelineno-0-418>418</a></span>
<span class=normal><a href=#__codelineno-0-419>419</a></span>
<span class=normal><a href=#__codelineno-0-420>420</a></span>
<span class=normal><a href=#__codelineno-0-421>421</a></span>
<span class=normal><a href=#__codelineno-0-422>422</a></span>
<span class=normal><a href=#__codelineno-0-423>423</a></span>
<span class=normal><a href=#__codelineno-0-424>424</a></span>
<span class=normal><a href=#__codelineno-0-425>425</a></span>
<span class=normal><a href=#__codelineno-0-426>426</a></span>
<span class=normal><a href=#__codelineno-0-427>427</a></span>
<span class=normal><a href=#__codelineno-0-428>428</a></span>
<span class=normal><a href=#__codelineno-0-429>429</a></span>
<span class=normal><a href=#__codelineno-0-430>430</a></span>
<span class=normal><a href=#__codelineno-0-431>431</a></span>
<span class=normal><a href=#__codelineno-0-432>432</a></span>
<span class=normal><a href=#__codelineno-0-433>433</a></span>
<span class=normal><a href=#__codelineno-0-434>434</a></span>
<span class=normal><a href=#__codelineno-0-435>435</a></span>
<span class=normal><a href=#__codelineno-0-436>436</a></span>
<span class=normal><a href=#__codelineno-0-437>437</a></span>
<span class=normal><a href=#__codelineno-0-438>438</a></span>
<span class=normal><a href=#__codelineno-0-439>439</a></span>
<span class=normal><a href=#__codelineno-0-440>440</a></span>
<span class=normal><a href=#__codelineno-0-441>441</a></span>
<span class=normal><a href=#__codelineno-0-442>442</a></span>
<span class=normal><a href=#__codelineno-0-443>443</a></span>
<span class=normal><a href=#__codelineno-0-444>444</a></span>
<span class=normal><a href=#__codelineno-0-445>445</a></span>
<span class=normal><a href=#__codelineno-0-446>446</a></span>
<span class=normal><a href=#__codelineno-0-447>447</a></span>
<span class=normal><a href=#__codelineno-0-448>448</a></span>
<span class=normal><a href=#__codelineno-0-449>449</a></span>
<span class=normal><a href=#__codelineno-0-450>450</a></span>
<span class=normal><a href=#__codelineno-0-451>451</a></span>
<span class=normal><a href=#__codelineno-0-452>452</a></span>
<span class=normal><a href=#__codelineno-0-453>453</a></span>
<span class=normal><a href=#__codelineno-0-454>454</a></span>
<span class=normal><a href=#__codelineno-0-455>455</a></span>
<span class=normal><a href=#__codelineno-0-456>456</a></span>
<span class=normal><a href=#__codelineno-0-457>457</a></span>
<span class=normal><a href=#__codelineno-0-458>458</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-410 name=__codelineno-0-410></a><span class=k>def</span> <span class=nf>inject</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>key</span><span class=p>:</span> <span class=nb>str</span><span class=p>,</span> <span class=n>default</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>Any</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n>Any</span><span class=p>:</span>
<a id=__codelineno-0-411 name=__codelineno-0-411></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-412 name=__codelineno-0-412></a><span class=sd> Use this method to retrieve the data that was passed to a `{% provide %}` tag</span>
<a id=__codelineno-0-413 name=__codelineno-0-413></a><span class=sd> with the corresponding key.</span>
<a id=__codelineno-0-414 name=__codelineno-0-414></a>
<a id=__codelineno-0-415 name=__codelineno-0-415></a><span class=sd> To retrieve the data, `inject()` must be called inside a component that&#39;s</span>
<a id=__codelineno-0-416 name=__codelineno-0-416></a><span class=sd> inside the `{% provide %}` tag.</span>
<a id=__codelineno-0-417 name=__codelineno-0-417></a>
<a id=__codelineno-0-418 name=__codelineno-0-418></a><span class=sd> You may also pass a default that will be used if the `provide` tag with given</span>
<a id=__codelineno-0-419 name=__codelineno-0-419></a><span class=sd> key was NOT found.</span>
<a id=__codelineno-0-420 name=__codelineno-0-420></a>
<a id=__codelineno-0-421 name=__codelineno-0-421></a><span class=sd> This method mut be used inside the `get_context_data()` method and raises</span>
<a id=__codelineno-0-422 name=__codelineno-0-422></a><span class=sd> an error if called elsewhere.</span>
<a id=__codelineno-0-423 name=__codelineno-0-423></a>
<a id=__codelineno-0-424 name=__codelineno-0-424></a><span class=sd> Example:</span>
<a id=__codelineno-0-425 name=__codelineno-0-425></a>
<a id=__codelineno-0-426 name=__codelineno-0-426></a><span class=sd> Given this template:</span>
<a id=__codelineno-0-427 name=__codelineno-0-427></a><span class=sd> ```django</span>
<a id=__codelineno-0-428 name=__codelineno-0-428></a><span class=sd> {% provide &quot;provider&quot; hello=&quot;world&quot; %}</span>
<a id=__codelineno-0-429 name=__codelineno-0-429></a><span class=sd> {% component &quot;my_comp&quot; %}</span>
<a id=__codelineno-0-430 name=__codelineno-0-430></a><span class=sd> {% endcomponent %}</span>
<a id=__codelineno-0-431 name=__codelineno-0-431></a><span class=sd> {% endprovide %}</span>
<a id=__codelineno-0-432 name=__codelineno-0-432></a><span class=sd> ```</span>
<a id=__codelineno-0-433 name=__codelineno-0-433></a>
<a id=__codelineno-0-434 name=__codelineno-0-434></a><span class=sd> And given this definition of &quot;my_comp&quot; component:</span>
<a id=__codelineno-0-435 name=__codelineno-0-435></a><span class=sd> ```py</span>
<a id=__codelineno-0-436 name=__codelineno-0-436></a><span class=sd> from django_components import Component, register</span>
<a id=__codelineno-0-437 name=__codelineno-0-437></a>
<a id=__codelineno-0-438 name=__codelineno-0-438></a><span class=sd> @register(&quot;my_comp&quot;)</span>
<a id=__codelineno-0-439 name=__codelineno-0-439></a><span class=sd> class MyComp(Component):</span>
<a id=__codelineno-0-440 name=__codelineno-0-440></a><span class=sd> template = &quot;hi {{ data.hello }}!&quot;</span>
<a id=__codelineno-0-441 name=__codelineno-0-441></a><span class=sd> def get_context_data(self):</span>
<a id=__codelineno-0-442 name=__codelineno-0-442></a><span class=sd> data = self.inject(&quot;provider&quot;)</span>
<a id=__codelineno-0-443 name=__codelineno-0-443></a><span class=sd> return {&quot;data&quot;: data}</span>
<a id=__codelineno-0-444 name=__codelineno-0-444></a><span class=sd> ```</span>
<a id=__codelineno-0-445 name=__codelineno-0-445></a>
<a id=__codelineno-0-446 name=__codelineno-0-446></a><span class=sd> This renders into:</span>
<a id=__codelineno-0-447 name=__codelineno-0-447></a><span class=sd> ```</span>
<a id=__codelineno-0-448 name=__codelineno-0-448></a><span class=sd> hi world!</span>
<a id=__codelineno-0-449 name=__codelineno-0-449></a><span class=sd> ```</span>
<a id=__codelineno-0-450 name=__codelineno-0-450></a>
<a id=__codelineno-0-451 name=__codelineno-0-451></a><span class=sd> As the `{{ data.hello }}` is taken from the &quot;provider&quot;.</span>
<a id=__codelineno-0-452 name=__codelineno-0-452></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-453 name=__codelineno-0-453></a> <span class=k>if</span> <span class=bp>self</span><span class=o>.</span><span class=n>input</span> <span class=ow>is</span> <span class=kc>None</span><span class=p>:</span>
<a id=__codelineno-0-454 name=__codelineno-0-454></a> <span class=k>raise</span> <span class=ne>RuntimeError</span><span class=p>(</span>
<a id=__codelineno-0-455 name=__codelineno-0-455></a> <span class=sa>f</span><span class=s2>&quot;Method &#39;inject()&#39; of component &#39;</span><span class=si>{</span><span class=bp>self</span><span class=o>.</span><span class=n>name</span><span class=si>}</span><span class=s2>&#39; was called outside of &#39;get_context_data()&#39;&quot;</span>
<a id=__codelineno-0-456 name=__codelineno-0-456></a> <span class=p>)</span>
<a id=__codelineno-0-457 name=__codelineno-0-457></a>
<a id=__codelineno-0-458 name=__codelineno-0-458></a> <span class=k>return</span> <span class=n>get_injected_context_var</span><span class=p>(</span><span class=bp>self</span><span class=o>.</span><span class=n>name</span><span class=p>,</span> <span class=bp>self</span><span class=o>.</span><span class=n>input</span><span class=o>.</span><span class=n>context</span><span class=p>,</span> <span class=n>key</span><span class=p>,</span> <span class=n>default</span><span class=p>)</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h3 id=django_components.Component.on_render_after class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">on_render_after</span> <a href=#django_components.Component.on_render_after class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>on_render_after</span><span class=p>(</span><span class=n>context</span><span class=p>:</span> <span class=n><span title=django.template.context.Context>Context</span></span><span class=p>,</span> <span class=n>template</span><span class=p>:</span> <span class=n><span title=django.template.base.Template>Template</span></span><span class=p>,</span> <span class=n>content</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><span title=django_components.slots.SlotResult>SlotResult</span></span><span class=p>]</span>
</code></pre></div> <div class="doc doc-contents "> <p>Hook that runs just after the component's template was rendered. It receives the rendered output as the last argument.</p> <p>You can use this hook to access the context or the template, but modifying them won't have any effect.</p> <p>To override the content that gets rendered, you can return a string or SafeString from this hook.</p> <details class=quote> <summary>Source code in <code>src/django_components/component.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-268>268</a></span>
<span class=normal><a href=#__codelineno-0-269>269</a></span>
<span class=normal><a href=#__codelineno-0-270>270</a></span>
<span class=normal><a href=#__codelineno-0-271>271</a></span>
<span class=normal><a href=#__codelineno-0-272>272</a></span>
<span class=normal><a href=#__codelineno-0-273>273</a></span>
<span class=normal><a href=#__codelineno-0-274>274</a></span>
<span class=normal><a href=#__codelineno-0-275>275</a></span>
<span class=normal><a href=#__codelineno-0-276>276</a></span>
<span class=normal><a href=#__codelineno-0-277>277</a></span>
<span class=normal><a href=#__codelineno-0-278>278</a></span>
<span class=normal><a href=#__codelineno-0-279>279</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-268 name=__codelineno-0-268></a><span class=k>def</span> <span class=nf>on_render_after</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>context</span><span class=p>:</span> <span class=n>Context</span><span class=p>,</span> <span class=n>template</span><span class=p>:</span> <span class=n>Template</span><span class=p>,</span> <span class=n>content</span><span class=p>:</span> <span class=nb>str</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n>Optional</span><span class=p>[</span><span class=n>SlotResult</span><span class=p>]:</span>
<a id=__codelineno-0-269 name=__codelineno-0-269></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-270 name=__codelineno-0-270></a><span class=sd> Hook that runs just after the component&#39;s template was rendered.</span>
<a id=__codelineno-0-271 name=__codelineno-0-271></a><span class=sd> It receives the rendered output as the last argument.</span>
<a id=__codelineno-0-272 name=__codelineno-0-272></a>
<a id=__codelineno-0-273 name=__codelineno-0-273></a><span class=sd> You can use this hook to access the context or the template, but modifying</span>
<a id=__codelineno-0-274 name=__codelineno-0-274></a><span class=sd> them won&#39;t have any effect.</span>
<a id=__codelineno-0-275 name=__codelineno-0-275></a>
<a id=__codelineno-0-276 name=__codelineno-0-276></a><span class=sd> To override the content that gets rendered, you can return a string or SafeString</span>
<a id=__codelineno-0-277 name=__codelineno-0-277></a><span class=sd> from this hook.</span>
<a id=__codelineno-0-278 name=__codelineno-0-278></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-279 name=__codelineno-0-279></a> <span class=k>pass</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h3 id=django_components.Component.on_render_before class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">on_render_before</span> <a href=#django_components.Component.on_render_before class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>on_render_before</span><span class=p>(</span><span class=n>context</span><span class=p>:</span> <span class=n><span title=django.template.context.Context>Context</span></span><span class=p>,</span> <span class=n>template</span><span class=p>:</span> <span class=n><span title=django.template.base.Template>Template</span></span><span class=p>)</span> <span class=o>-&gt;</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>Hook that runs just before the component's template is rendered.</p> <p>You can use this hook to access or modify the context or the template.</p> <details class=quote> <summary>Source code in <code>src/django_components/component.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-260>260</a></span>
<span class=normal><a href=#__codelineno-0-261>261</a></span>
<span class=normal><a href=#__codelineno-0-262>262</a></span>
<span class=normal><a href=#__codelineno-0-263>263</a></span>
<span class=normal><a href=#__codelineno-0-264>264</a></span>
<span class=normal><a href=#__codelineno-0-265>265</a></span>
<span class=normal><a href=#__codelineno-0-266>266</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-260 name=__codelineno-0-260></a><span class=k>def</span> <span class=nf>on_render_before</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>context</span><span class=p>:</span> <span class=n>Context</span><span class=p>,</span> <span class=n>template</span><span class=p>:</span> <span class=n>Template</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=kc>None</span><span class=p>:</span>
<a id=__codelineno-0-261 name=__codelineno-0-261></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-262 name=__codelineno-0-262></a><span class=sd> Hook that runs just before the component&#39;s template is rendered.</span>
<a id=__codelineno-0-263 name=__codelineno-0-263></a>
<a id=__codelineno-0-264 name=__codelineno-0-264></a><span class=sd> You can use this hook to access or modify the context or the template.</span>
<a id=__codelineno-0-265 name=__codelineno-0-265></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-266 name=__codelineno-0-266></a> <span class=k>pass</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h3 id=django_components.Component.render class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">render</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-classmethod"><code>classmethod</code></small> </span> <a href=#django_components.Component.render class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>render</span><span class=p>(</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a> <span class=n>context</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Union href=https://docs.python.org/3.12/library/typing.html#typing.Union>Union</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Dict href=https://docs.python.org/3.12/library/typing.html#typing.Dict>Dict</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span> <span class=n><a class="autorefs autorefs-external" title=typing.Any href=https://docs.python.org/3.12/library/typing.html#typing.Any>Any</a></span><span class=p>],</span> <span class=n><span title=django.template.context.Context>Context</span></span><span class=p>]]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a> <span class=n>args</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><span title=django_components.component.ArgsType>ArgsType</span></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a> <span class=n>kwargs</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><span title=django_components.component.KwargsType>KwargsType</span></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a> <span class=n>slots</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><span title=django_components.component.SlotsType>SlotsType</span></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-6 name=__codelineno-0-6 href=#__codelineno-0-6></a> <span class=n>escape_slots_content</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/functions.html#bool>bool</a></span> <span class=o>=</span> <span class=kc>True</span><span class=p>,</span>
<a id=__codelineno-0-7 name=__codelineno-0-7 href=#__codelineno-0-7></a> <span class=nb>type</span><span class=p>:</span> <span class=n><span title=django_components.dependencies.RenderType>RenderType</span></span> <span class=o>=</span> <span class=s2>&quot;document&quot;</span><span class=p>,</span>
<a id=__codelineno-0-8 name=__codelineno-0-8 href=#__codelineno-0-8></a> <span class=n>render_dependencies</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/functions.html#bool>bool</a></span> <span class=o>=</span> <span class=kc>True</span><span class=p>,</span>
<a id=__codelineno-0-9 name=__codelineno-0-9 href=#__codelineno-0-9></a><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span>
</code></pre></div> <div class="doc doc-contents "> <p>Render the component into a string.</p> <p>Inputs: - <code>args</code> - Positional args for the component. This is the same as calling the component as <code>{% component "my_comp" arg1 arg2 ... %}</code> - <code>kwargs</code> - Kwargs for the component. This is the same as calling the component as <code>{% component "my_comp" key1=val1 key2=val2 ... %}</code> - <code>slots</code> - Component slot fills. This is the same as pasing <code>{% fill %}</code> tags to the component. Accepts a dictionary of <code>{ slot_name: slot_content }</code> where <code>slot_content</code> can be a string or render function. - <code>escape_slots_content</code> - Whether the content from <code>slots</code> should be escaped. - <code>context</code> - A context (dictionary or Django's Context) within which the component is rendered. The keys on the context can be accessed from within the template. - NOTE: In "isolated" mode, context is NOT accessible, and data MUST be passed via component's args and kwargs. - <code>type</code> - Configure how to handle JS and CSS dependencies. - <code>"document"</code> (default) - JS dependencies are inserted into <code>{% component_js_dependencies %}</code>, or to the end of the <code>&lt;body&gt;</code> tag. CSS dependencies are inserted into <code>{% component_css_dependencies %}</code>, or the end of the <code>&lt;head&gt;</code> tag. - <code>render_dependencies</code> - Set this to <code>False</code> if you want to insert the resulting HTML into another component.</p> <p>Example: <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>MyComponent</span><span class=o>.</span><span class=n>render</span><span class=p>(</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a> <span class=n>args</span><span class=o>=</span><span class=p>[</span><span class=mi>1</span><span class=p>,</span> <span class=s2>&quot;two&quot;</span><span class=p>,</span> <span class=p>{}],</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a> <span class=n>kwargs</span><span class=o>=</span><span class=p>{</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a> <span class=s2>&quot;key&quot;</span><span class=p>:</span> <span class=mi>123</span><span class=p>,</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a> <span class=p>},</span>
<a id=__codelineno-0-6 name=__codelineno-0-6 href=#__codelineno-0-6></a> <span class=n>slots</span><span class=o>=</span><span class=p>{</span>
<a id=__codelineno-0-7 name=__codelineno-0-7 href=#__codelineno-0-7></a> <span class=s2>&quot;header&quot;</span><span class=p>:</span> <span class=s1>&#39;STATIC TEXT HERE&#39;</span><span class=p>,</span>
<a id=__codelineno-0-8 name=__codelineno-0-8 href=#__codelineno-0-8></a> <span class=s2>&quot;footer&quot;</span><span class=p>:</span> <span class=k>lambda</span> <span class=n>ctx</span><span class=p>,</span> <span class=n>slot_kwargs</span><span class=p>,</span> <span class=n>slot_ref</span><span class=p>:</span> <span class=sa>f</span><span class=s1>&#39;CTX: </span><span class=si>{</span><span class=n>ctx</span><span class=p>[</span><span class=s1>&#39;hello&#39;</span><span class=p>]</span><span class=si>}</span><span class=s1> SLOT_DATA: </span><span class=si>{</span><span class=n>slot_kwargs</span><span class=p>[</span><span class=s1>&#39;abc&#39;</span><span class=p>]</span><span class=si>}</span><span class=s1>&#39;</span><span class=p>,</span>
<a id=__codelineno-0-9 name=__codelineno-0-9 href=#__codelineno-0-9></a> <span class=p>},</span>
<a id=__codelineno-0-10 name=__codelineno-0-10 href=#__codelineno-0-10></a> <span class=n>escape_slots_content</span><span class=o>=</span><span class=kc>False</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> <details class=quote> <summary>Source code in <code>src/django_components/component.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-549>549</a></span>
<span class=normal><a href=#__codelineno-0-550>550</a></span>
<span class=normal><a href=#__codelineno-0-551>551</a></span>
<span class=normal><a href=#__codelineno-0-552>552</a></span>
<span class=normal><a href=#__codelineno-0-553>553</a></span>
<span class=normal><a href=#__codelineno-0-554>554</a></span>
<span class=normal><a href=#__codelineno-0-555>555</a></span>
<span class=normal><a href=#__codelineno-0-556>556</a></span>
<span class=normal><a href=#__codelineno-0-557>557</a></span>
<span class=normal><a href=#__codelineno-0-558>558</a></span>
<span class=normal><a href=#__codelineno-0-559>559</a></span>
<span class=normal><a href=#__codelineno-0-560>560</a></span>
<span class=normal><a href=#__codelineno-0-561>561</a></span>
<span class=normal><a href=#__codelineno-0-562>562</a></span>
<span class=normal><a href=#__codelineno-0-563>563</a></span>
<span class=normal><a href=#__codelineno-0-564>564</a></span>
<span class=normal><a href=#__codelineno-0-565>565</a></span>
<span class=normal><a href=#__codelineno-0-566>566</a></span>
<span class=normal><a href=#__codelineno-0-567>567</a></span>
<span class=normal><a href=#__codelineno-0-568>568</a></span>
<span class=normal><a href=#__codelineno-0-569>569</a></span>
<span class=normal><a href=#__codelineno-0-570>570</a></span>
<span class=normal><a href=#__codelineno-0-571>571</a></span>
<span class=normal><a href=#__codelineno-0-572>572</a></span>
<span class=normal><a href=#__codelineno-0-573>573</a></span>
<span class=normal><a href=#__codelineno-0-574>574</a></span>
<span class=normal><a href=#__codelineno-0-575>575</a></span>
<span class=normal><a href=#__codelineno-0-576>576</a></span>
<span class=normal><a href=#__codelineno-0-577>577</a></span>
<span class=normal><a href=#__codelineno-0-578>578</a></span>
<span class=normal><a href=#__codelineno-0-579>579</a></span>
<span class=normal><a href=#__codelineno-0-580>580</a></span>
<span class=normal><a href=#__codelineno-0-581>581</a></span>
<span class=normal><a href=#__codelineno-0-582>582</a></span>
<span class=normal><a href=#__codelineno-0-583>583</a></span>
<span class=normal><a href=#__codelineno-0-584>584</a></span>
<span class=normal><a href=#__codelineno-0-585>585</a></span>
<span class=normal><a href=#__codelineno-0-586>586</a></span>
<span class=normal><a href=#__codelineno-0-587>587</a></span>
<span class=normal><a href=#__codelineno-0-588>588</a></span>
<span class=normal><a href=#__codelineno-0-589>589</a></span>
<span class=normal><a href=#__codelineno-0-590>590</a></span>
<span class=normal><a href=#__codelineno-0-591>591</a></span>
<span class=normal><a href=#__codelineno-0-592>592</a></span>
<span class=normal><a href=#__codelineno-0-593>593</a></span>
<span class=normal><a href=#__codelineno-0-594>594</a></span>
<span class=normal><a href=#__codelineno-0-595>595</a></span>
<span class=normal><a href=#__codelineno-0-596>596</a></span>
<span class=normal><a href=#__codelineno-0-597>597</a></span>
<span class=normal><a href=#__codelineno-0-598>598</a></span>
<span class=normal><a href=#__codelineno-0-599>599</a></span>
<span class=normal><a href=#__codelineno-0-600>600</a></span>
<span class=normal><a href=#__codelineno-0-601>601</a></span>
<span class=normal><a href=#__codelineno-0-602>602</a></span>
<span class=normal><a href=#__codelineno-0-603>603</a></span>
<span class=normal><a href=#__codelineno-0-604>604</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-549 name=__codelineno-0-549></a><span class=nd>@classmethod</span>
<a id=__codelineno-0-550 name=__codelineno-0-550></a><span class=k>def</span> <span class=nf>render</span><span class=p>(</span>
<a id=__codelineno-0-551 name=__codelineno-0-551></a> <span class=bp>cls</span><span class=p>,</span>
<a id=__codelineno-0-552 name=__codelineno-0-552></a> <span class=n>context</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>Union</span><span class=p>[</span><span class=n>Dict</span><span class=p>[</span><span class=nb>str</span><span class=p>,</span> <span class=n>Any</span><span class=p>],</span> <span class=n>Context</span><span class=p>]]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-553 name=__codelineno-0-553></a> <span class=n>args</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>ArgsType</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-554 name=__codelineno-0-554></a> <span class=n>kwargs</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>KwargsType</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-555 name=__codelineno-0-555></a> <span class=n>slots</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>SlotsType</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-556 name=__codelineno-0-556></a> <span class=n>escape_slots_content</span><span class=p>:</span> <span class=nb>bool</span> <span class=o>=</span> <span class=kc>True</span><span class=p>,</span>
<a id=__codelineno-0-557 name=__codelineno-0-557></a> <span class=nb>type</span><span class=p>:</span> <span class=n>RenderType</span> <span class=o>=</span> <span class=s2>&quot;document&quot;</span><span class=p>,</span>
<a id=__codelineno-0-558 name=__codelineno-0-558></a> <span class=n>render_dependencies</span><span class=p>:</span> <span class=nb>bool</span> <span class=o>=</span> <span class=kc>True</span><span class=p>,</span>
<a id=__codelineno-0-559 name=__codelineno-0-559></a><span class=p>)</span> <span class=o>-&gt;</span> <span class=nb>str</span><span class=p>:</span>
<a id=__codelineno-0-560 name=__codelineno-0-560></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-561 name=__codelineno-0-561></a><span class=sd> Render the component into a string.</span>
<a id=__codelineno-0-562 name=__codelineno-0-562></a>
<a id=__codelineno-0-563 name=__codelineno-0-563></a><span class=sd> Inputs:</span>
<a id=__codelineno-0-564 name=__codelineno-0-564></a><span class=sd> - `args` - Positional args for the component. This is the same as calling the component</span>
<a id=__codelineno-0-565 name=__codelineno-0-565></a><span class=sd> as `{% component &quot;my_comp&quot; arg1 arg2 ... %}`</span>
<a id=__codelineno-0-566 name=__codelineno-0-566></a><span class=sd> - `kwargs` - Kwargs for the component. This is the same as calling the component</span>
<a id=__codelineno-0-567 name=__codelineno-0-567></a><span class=sd> as `{% component &quot;my_comp&quot; key1=val1 key2=val2 ... %}`</span>
<a id=__codelineno-0-568 name=__codelineno-0-568></a><span class=sd> - `slots` - Component slot fills. This is the same as pasing `{% fill %}` tags to the component.</span>
<a id=__codelineno-0-569 name=__codelineno-0-569></a><span class=sd> Accepts a dictionary of `{ slot_name: slot_content }` where `slot_content` can be a string</span>
<a id=__codelineno-0-570 name=__codelineno-0-570></a><span class=sd> or render function.</span>
<a id=__codelineno-0-571 name=__codelineno-0-571></a><span class=sd> - `escape_slots_content` - Whether the content from `slots` should be escaped.</span>
<a id=__codelineno-0-572 name=__codelineno-0-572></a><span class=sd> - `context` - A context (dictionary or Django&#39;s Context) within which the component</span>
<a id=__codelineno-0-573 name=__codelineno-0-573></a><span class=sd> is rendered. The keys on the context can be accessed from within the template.</span>
<a id=__codelineno-0-574 name=__codelineno-0-574></a><span class=sd> - NOTE: In &quot;isolated&quot; mode, context is NOT accessible, and data MUST be passed via</span>
<a id=__codelineno-0-575 name=__codelineno-0-575></a><span class=sd> component&#39;s args and kwargs.</span>
<a id=__codelineno-0-576 name=__codelineno-0-576></a><span class=sd> - `type` - Configure how to handle JS and CSS dependencies.</span>
<a id=__codelineno-0-577 name=__codelineno-0-577></a><span class=sd> - `&quot;document&quot;` (default) - JS dependencies are inserted into `{% component_js_dependencies %}`,</span>
<a id=__codelineno-0-578 name=__codelineno-0-578></a><span class=sd> or to the end of the `&lt;body&gt;` tag. CSS dependencies are inserted into</span>
<a id=__codelineno-0-579 name=__codelineno-0-579></a><span class=sd> `{% component_css_dependencies %}`, or the end of the `&lt;head&gt;` tag.</span>
<a id=__codelineno-0-580 name=__codelineno-0-580></a><span class=sd> - `render_dependencies` - Set this to `False` if you want to insert the resulting HTML into another component.</span>
<a id=__codelineno-0-581 name=__codelineno-0-581></a>
<a id=__codelineno-0-582 name=__codelineno-0-582></a><span class=sd> Example:</span>
<a id=__codelineno-0-583 name=__codelineno-0-583></a><span class=sd> ```py</span>
<a id=__codelineno-0-584 name=__codelineno-0-584></a><span class=sd> MyComponent.render(</span>
<a id=__codelineno-0-585 name=__codelineno-0-585></a><span class=sd> args=[1, &quot;two&quot;, {}],</span>
<a id=__codelineno-0-586 name=__codelineno-0-586></a><span class=sd> kwargs={</span>
<a id=__codelineno-0-587 name=__codelineno-0-587></a><span class=sd> &quot;key&quot;: 123,</span>
<a id=__codelineno-0-588 name=__codelineno-0-588></a><span class=sd> },</span>
<a id=__codelineno-0-589 name=__codelineno-0-589></a><span class=sd> slots={</span>
<a id=__codelineno-0-590 name=__codelineno-0-590></a><span class=sd> &quot;header&quot;: &#39;STATIC TEXT HERE&#39;,</span>
<a id=__codelineno-0-591 name=__codelineno-0-591></a><span class=sd> &quot;footer&quot;: lambda ctx, slot_kwargs, slot_ref: f&#39;CTX: {ctx[&#39;hello&#39;]} SLOT_DATA: {slot_kwargs[&#39;abc&#39;]}&#39;,</span>
<a id=__codelineno-0-592 name=__codelineno-0-592></a><span class=sd> },</span>
<a id=__codelineno-0-593 name=__codelineno-0-593></a><span class=sd> escape_slots_content=False,</span>
<a id=__codelineno-0-594 name=__codelineno-0-594></a><span class=sd> )</span>
<a id=__codelineno-0-595 name=__codelineno-0-595></a><span class=sd> ```</span>
<a id=__codelineno-0-596 name=__codelineno-0-596></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-597 name=__codelineno-0-597></a> <span class=c1># This method may be called as class method or as instance method.</span>
<a id=__codelineno-0-598 name=__codelineno-0-598></a> <span class=c1># If called as class method, create a new instance.</span>
<a id=__codelineno-0-599 name=__codelineno-0-599></a> <span class=k>if</span> <span class=nb>isinstance</span><span class=p>(</span><span class=bp>cls</span><span class=p>,</span> <span class=n>Component</span><span class=p>):</span>
<a id=__codelineno-0-600 name=__codelineno-0-600></a> <span class=n>comp</span><span class=p>:</span> <span class=n>Component</span> <span class=o>=</span> <span class=bp>cls</span>
<a id=__codelineno-0-601 name=__codelineno-0-601></a> <span class=k>else</span><span class=p>:</span>
<a id=__codelineno-0-602 name=__codelineno-0-602></a> <span class=n>comp</span> <span class=o>=</span> <span class=bp>cls</span><span class=p>()</span>
<a id=__codelineno-0-603 name=__codelineno-0-603></a>
<a id=__codelineno-0-604 name=__codelineno-0-604></a> <span class=k>return</span> <span class=n>comp</span><span class=o>.</span><span class=n>_render</span><span class=p>(</span><span class=n>context</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>escape_slots_content</span><span class=p>,</span> <span class=nb>type</span><span class=p>,</span> <span class=n>render_dependencies</span><span class=p>)</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h3 id=django_components.Component.render_to_response class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">render_to_response</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-classmethod"><code>classmethod</code></small> </span> <a href=#django_components.Component.render_to_response class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>render_to_response</span><span class=p>(</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a> <span class=n>context</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Union href=https://docs.python.org/3.12/library/typing.html#typing.Union>Union</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Dict href=https://docs.python.org/3.12/library/typing.html#typing.Dict>Dict</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span> <span class=n><a class="autorefs autorefs-external" title=typing.Any href=https://docs.python.org/3.12/library/typing.html#typing.Any>Any</a></span><span class=p>],</span> <span class=n><span title=django.template.context.Context>Context</span></span><span class=p>]]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a> <span class=n>slots</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><span title=django_components.component.SlotsType>SlotsType</span></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a> <span class=n>escape_slots_content</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/functions.html#bool>bool</a></span> <span class=o>=</span> <span class=kc>True</span><span class=p>,</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a> <span class=n>args</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><span title=django_components.component.ArgsType>ArgsType</span></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-6 name=__codelineno-0-6 href=#__codelineno-0-6></a> <span class=n>kwargs</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><span title=django_components.component.KwargsType>KwargsType</span></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-7 name=__codelineno-0-7 href=#__codelineno-0-7></a> <span class=nb>type</span><span class=p>:</span> <span class=n><span title=django_components.dependencies.RenderType>RenderType</span></span> <span class=o>=</span> <span class=s2>&quot;document&quot;</span><span class=p>,</span>
<a id=__codelineno-0-8 name=__codelineno-0-8 href=#__codelineno-0-8></a> <span class=o>*</span><span class=n>response_args</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Any href=https://docs.python.org/3.12/library/typing.html#typing.Any>Any</a></span><span class=p>,</span>
<a id=__codelineno-0-9 name=__codelineno-0-9 href=#__codelineno-0-9></a> <span class=o>**</span><span class=n>response_kwargs</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Any href=https://docs.python.org/3.12/library/typing.html#typing.Any>Any</a></span>
<a id=__codelineno-0-10 name=__codelineno-0-10 href=#__codelineno-0-10></a><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-external" title=django.http.HttpResponse href=https://docs.djangoproject.com/en/5.0/ref/request-response/#django.http.HttpResponse>HttpResponse</a></span>
</code></pre></div> <div class="doc doc-contents "> <p>Render the component and wrap the content in the response class.</p> <p>The response class is taken from <code>Component.response_class</code>. Defaults to <code>django.http.HttpResponse</code>.</p> <p>This is the interface for the <code>django.views.View</code> class which allows us to use components as Django views with <code>component.as_view()</code>.</p> <p>Inputs: - <code>args</code> - Positional args for the component. This is the same as calling the component as <code>{% component "my_comp" arg1 arg2 ... %}</code> - <code>kwargs</code> - Kwargs for the component. This is the same as calling the component as <code>{% component "my_comp" key1=val1 key2=val2 ... %}</code> - <code>slots</code> - Component slot fills. This is the same as pasing <code>{% fill %}</code> tags to the component. Accepts a dictionary of <code>{ slot_name: slot_content }</code> where <code>slot_content</code> can be a string or render function. - <code>escape_slots_content</code> - Whether the content from <code>slots</code> should be escaped. - <code>context</code> - A context (dictionary or Django's Context) within which the component is rendered. The keys on the context can be accessed from within the template. - NOTE: In "isolated" mode, context is NOT accessible, and data MUST be passed via component's args and kwargs. - <code>type</code> - Configure how to handle JS and CSS dependencies. - <code>"document"</code> (default) - JS dependencies are inserted into <code>{% component_js_dependencies %}</code>, or to the end of the <code>&lt;body&gt;</code> tag. CSS dependencies are inserted into <code>{% component_css_dependencies %}</code>, or the end of the <code>&lt;head&gt;</code> tag.</p> <p>Any additional args and kwargs are passed to the <code>response_class</code>.</p> <p>Example: <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>MyComponent</span><span class=o>.</span><span class=n>render_to_response</span><span class=p>(</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a> <span class=n>args</span><span class=o>=</span><span class=p>[</span><span class=mi>1</span><span class=p>,</span> <span class=s2>&quot;two&quot;</span><span class=p>,</span> <span class=p>{}],</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a> <span class=n>kwargs</span><span class=o>=</span><span class=p>{</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a> <span class=s2>&quot;key&quot;</span><span class=p>:</span> <span class=mi>123</span><span class=p>,</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a> <span class=p>},</span>
<a id=__codelineno-0-6 name=__codelineno-0-6 href=#__codelineno-0-6></a> <span class=n>slots</span><span class=o>=</span><span class=p>{</span>
<a id=__codelineno-0-7 name=__codelineno-0-7 href=#__codelineno-0-7></a> <span class=s2>&quot;header&quot;</span><span class=p>:</span> <span class=s1>&#39;STATIC TEXT HERE&#39;</span><span class=p>,</span>
<a id=__codelineno-0-8 name=__codelineno-0-8 href=#__codelineno-0-8></a> <span class=s2>&quot;footer&quot;</span><span class=p>:</span> <span class=k>lambda</span> <span class=n>ctx</span><span class=p>,</span> <span class=n>slot_kwargs</span><span class=p>,</span> <span class=n>slot_ref</span><span class=p>:</span> <span class=sa>f</span><span class=s1>&#39;CTX: </span><span class=si>{</span><span class=n>ctx</span><span class=p>[</span><span class=s1>&#39;hello&#39;</span><span class=p>]</span><span class=si>}</span><span class=s1> SLOT_DATA: </span><span class=si>{</span><span class=n>slot_kwargs</span><span class=p>[</span><span class=s1>&#39;abc&#39;</span><span class=p>]</span><span class=si>}</span><span class=s1>&#39;</span><span class=p>,</span>
<a id=__codelineno-0-9 name=__codelineno-0-9 href=#__codelineno-0-9></a> <span class=p>},</span>
<a id=__codelineno-0-10 name=__codelineno-0-10 href=#__codelineno-0-10></a> <span class=n>escape_slots_content</span><span class=o>=</span><span class=kc>False</span><span class=p>,</span>
<a id=__codelineno-0-11 name=__codelineno-0-11 href=#__codelineno-0-11></a> <span class=c1># HttpResponse input</span>
<a id=__codelineno-0-12 name=__codelineno-0-12 href=#__codelineno-0-12></a> <span class=n>status</span><span class=o>=</span><span class=mi>201</span><span class=p>,</span>
<a id=__codelineno-0-13 name=__codelineno-0-13 href=#__codelineno-0-13></a> <span class=n>headers</span><span class=o>=</span><span class=p>{</span><span class=o>...</span><span class=p>},</span>
<a id=__codelineno-0-14 name=__codelineno-0-14 href=#__codelineno-0-14></a><span class=p>)</span>
<a id=__codelineno-0-15 name=__codelineno-0-15 href=#__codelineno-0-15></a><span class=c1># HttpResponse(content=..., status=201, headers=...)</span>
</code></pre></div></p> <details class=quote> <summary>Source code in <code>src/django_components/component.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-479>479</a></span>
<span class=normal><a href=#__codelineno-0-480>480</a></span>
<span class=normal><a href=#__codelineno-0-481>481</a></span>
<span class=normal><a href=#__codelineno-0-482>482</a></span>
<span class=normal><a href=#__codelineno-0-483>483</a></span>
<span class=normal><a href=#__codelineno-0-484>484</a></span>
<span class=normal><a href=#__codelineno-0-485>485</a></span>
<span class=normal><a href=#__codelineno-0-486>486</a></span>
<span class=normal><a href=#__codelineno-0-487>487</a></span>
<span class=normal><a href=#__codelineno-0-488>488</a></span>
<span class=normal><a href=#__codelineno-0-489>489</a></span>
<span class=normal><a href=#__codelineno-0-490>490</a></span>
<span class=normal><a href=#__codelineno-0-491>491</a></span>
<span class=normal><a href=#__codelineno-0-492>492</a></span>
<span class=normal><a href=#__codelineno-0-493>493</a></span>
<span class=normal><a href=#__codelineno-0-494>494</a></span>
<span class=normal><a href=#__codelineno-0-495>495</a></span>
<span class=normal><a href=#__codelineno-0-496>496</a></span>
<span class=normal><a href=#__codelineno-0-497>497</a></span>
<span class=normal><a href=#__codelineno-0-498>498</a></span>
<span class=normal><a href=#__codelineno-0-499>499</a></span>
<span class=normal><a href=#__codelineno-0-500>500</a></span>
<span class=normal><a href=#__codelineno-0-501>501</a></span>
<span class=normal><a href=#__codelineno-0-502>502</a></span>
<span class=normal><a href=#__codelineno-0-503>503</a></span>
<span class=normal><a href=#__codelineno-0-504>504</a></span>
<span class=normal><a href=#__codelineno-0-505>505</a></span>
<span class=normal><a href=#__codelineno-0-506>506</a></span>
<span class=normal><a href=#__codelineno-0-507>507</a></span>
<span class=normal><a href=#__codelineno-0-508>508</a></span>
<span class=normal><a href=#__codelineno-0-509>509</a></span>
<span class=normal><a href=#__codelineno-0-510>510</a></span>
<span class=normal><a href=#__codelineno-0-511>511</a></span>
<span class=normal><a href=#__codelineno-0-512>512</a></span>
<span class=normal><a href=#__codelineno-0-513>513</a></span>
<span class=normal><a href=#__codelineno-0-514>514</a></span>
<span class=normal><a href=#__codelineno-0-515>515</a></span>
<span class=normal><a href=#__codelineno-0-516>516</a></span>
<span class=normal><a href=#__codelineno-0-517>517</a></span>
<span class=normal><a href=#__codelineno-0-518>518</a></span>
<span class=normal><a href=#__codelineno-0-519>519</a></span>
<span class=normal><a href=#__codelineno-0-520>520</a></span>
<span class=normal><a href=#__codelineno-0-521>521</a></span>
<span class=normal><a href=#__codelineno-0-522>522</a></span>
<span class=normal><a href=#__codelineno-0-523>523</a></span>
<span class=normal><a href=#__codelineno-0-524>524</a></span>
<span class=normal><a href=#__codelineno-0-525>525</a></span>
<span class=normal><a href=#__codelineno-0-526>526</a></span>
<span class=normal><a href=#__codelineno-0-527>527</a></span>
<span class=normal><a href=#__codelineno-0-528>528</a></span>
<span class=normal><a href=#__codelineno-0-529>529</a></span>
<span class=normal><a href=#__codelineno-0-530>530</a></span>
<span class=normal><a href=#__codelineno-0-531>531</a></span>
<span class=normal><a href=#__codelineno-0-532>532</a></span>
<span class=normal><a href=#__codelineno-0-533>533</a></span>
<span class=normal><a href=#__codelineno-0-534>534</a></span>
<span class=normal><a href=#__codelineno-0-535>535</a></span>
<span class=normal><a href=#__codelineno-0-536>536</a></span>
<span class=normal><a href=#__codelineno-0-537>537</a></span>
<span class=normal><a href=#__codelineno-0-538>538</a></span>
<span class=normal><a href=#__codelineno-0-539>539</a></span>
<span class=normal><a href=#__codelineno-0-540>540</a></span>
<span class=normal><a href=#__codelineno-0-541>541</a></span>
<span class=normal><a href=#__codelineno-0-542>542</a></span>
<span class=normal><a href=#__codelineno-0-543>543</a></span>
<span class=normal><a href=#__codelineno-0-544>544</a></span>
<span class=normal><a href=#__codelineno-0-545>545</a></span>
<span class=normal><a href=#__codelineno-0-546>546</a></span>
<span class=normal><a href=#__codelineno-0-547>547</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-479 name=__codelineno-0-479></a><span class=nd>@classmethod</span>
<a id=__codelineno-0-480 name=__codelineno-0-480></a><span class=k>def</span> <span class=nf>render_to_response</span><span class=p>(</span>
<a id=__codelineno-0-481 name=__codelineno-0-481></a> <span class=bp>cls</span><span class=p>,</span>
<a id=__codelineno-0-482 name=__codelineno-0-482></a> <span class=n>context</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>Union</span><span class=p>[</span><span class=n>Dict</span><span class=p>[</span><span class=nb>str</span><span class=p>,</span> <span class=n>Any</span><span class=p>],</span> <span class=n>Context</span><span class=p>]]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-483 name=__codelineno-0-483></a> <span class=n>slots</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>SlotsType</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-484 name=__codelineno-0-484></a> <span class=n>escape_slots_content</span><span class=p>:</span> <span class=nb>bool</span> <span class=o>=</span> <span class=kc>True</span><span class=p>,</span>
<a id=__codelineno-0-485 name=__codelineno-0-485></a> <span class=n>args</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>ArgsType</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-486 name=__codelineno-0-486></a> <span class=n>kwargs</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>KwargsType</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-487 name=__codelineno-0-487></a> <span class=nb>type</span><span class=p>:</span> <span class=n>RenderType</span> <span class=o>=</span> <span class=s2>&quot;document&quot;</span><span class=p>,</span>
<a id=__codelineno-0-488 name=__codelineno-0-488></a> <span class=o>*</span><span class=n>response_args</span><span class=p>:</span> <span class=n>Any</span><span class=p>,</span>
<a id=__codelineno-0-489 name=__codelineno-0-489></a> <span class=o>**</span><span class=n>response_kwargs</span><span class=p>:</span> <span class=n>Any</span><span class=p>,</span>
<a id=__codelineno-0-490 name=__codelineno-0-490></a><span class=p>)</span> <span class=o>-&gt;</span> <span class=n>HttpResponse</span><span class=p>:</span>
<a id=__codelineno-0-491 name=__codelineno-0-491></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-492 name=__codelineno-0-492></a><span class=sd> Render the component and wrap the content in the response class.</span>
<a id=__codelineno-0-493 name=__codelineno-0-493></a>
<a id=__codelineno-0-494 name=__codelineno-0-494></a><span class=sd> The response class is taken from `Component.response_class`. Defaults to `django.http.HttpResponse`.</span>
<a id=__codelineno-0-495 name=__codelineno-0-495></a>
<a id=__codelineno-0-496 name=__codelineno-0-496></a><span class=sd> This is the interface for the `django.views.View` class which allows us to</span>
<a id=__codelineno-0-497 name=__codelineno-0-497></a><span class=sd> use components as Django views with `component.as_view()`.</span>
<a id=__codelineno-0-498 name=__codelineno-0-498></a>
<a id=__codelineno-0-499 name=__codelineno-0-499></a><span class=sd> Inputs:</span>
<a id=__codelineno-0-500 name=__codelineno-0-500></a><span class=sd> - `args` - Positional args for the component. This is the same as calling the component</span>
<a id=__codelineno-0-501 name=__codelineno-0-501></a><span class=sd> as `{% component &quot;my_comp&quot; arg1 arg2 ... %}`</span>
<a id=__codelineno-0-502 name=__codelineno-0-502></a><span class=sd> - `kwargs` - Kwargs for the component. This is the same as calling the component</span>
<a id=__codelineno-0-503 name=__codelineno-0-503></a><span class=sd> as `{% component &quot;my_comp&quot; key1=val1 key2=val2 ... %}`</span>
<a id=__codelineno-0-504 name=__codelineno-0-504></a><span class=sd> - `slots` - Component slot fills. This is the same as pasing `{% fill %}` tags to the component.</span>
<a id=__codelineno-0-505 name=__codelineno-0-505></a><span class=sd> Accepts a dictionary of `{ slot_name: slot_content }` where `slot_content` can be a string</span>
<a id=__codelineno-0-506 name=__codelineno-0-506></a><span class=sd> or render function.</span>
<a id=__codelineno-0-507 name=__codelineno-0-507></a><span class=sd> - `escape_slots_content` - Whether the content from `slots` should be escaped.</span>
<a id=__codelineno-0-508 name=__codelineno-0-508></a><span class=sd> - `context` - A context (dictionary or Django&#39;s Context) within which the component</span>
<a id=__codelineno-0-509 name=__codelineno-0-509></a><span class=sd> is rendered. The keys on the context can be accessed from within the template.</span>
<a id=__codelineno-0-510 name=__codelineno-0-510></a><span class=sd> - NOTE: In &quot;isolated&quot; mode, context is NOT accessible, and data MUST be passed via</span>
<a id=__codelineno-0-511 name=__codelineno-0-511></a><span class=sd> component&#39;s args and kwargs.</span>
<a id=__codelineno-0-512 name=__codelineno-0-512></a><span class=sd> - `type` - Configure how to handle JS and CSS dependencies.</span>
<a id=__codelineno-0-513 name=__codelineno-0-513></a><span class=sd> - `&quot;document&quot;` (default) - JS dependencies are inserted into `{% component_js_dependencies %}`,</span>
<a id=__codelineno-0-514 name=__codelineno-0-514></a><span class=sd> or to the end of the `&lt;body&gt;` tag. CSS dependencies are inserted into</span>
<a id=__codelineno-0-515 name=__codelineno-0-515></a><span class=sd> `{% component_css_dependencies %}`, or the end of the `&lt;head&gt;` tag.</span>
<a id=__codelineno-0-516 name=__codelineno-0-516></a>
<a id=__codelineno-0-517 name=__codelineno-0-517></a><span class=sd> Any additional args and kwargs are passed to the `response_class`.</span>
<a id=__codelineno-0-518 name=__codelineno-0-518></a>
<a id=__codelineno-0-519 name=__codelineno-0-519></a><span class=sd> Example:</span>
<a id=__codelineno-0-520 name=__codelineno-0-520></a><span class=sd> ```py</span>
<a id=__codelineno-0-521 name=__codelineno-0-521></a><span class=sd> MyComponent.render_to_response(</span>
<a id=__codelineno-0-522 name=__codelineno-0-522></a><span class=sd> args=[1, &quot;two&quot;, {}],</span>
<a id=__codelineno-0-523 name=__codelineno-0-523></a><span class=sd> kwargs={</span>
<a id=__codelineno-0-524 name=__codelineno-0-524></a><span class=sd> &quot;key&quot;: 123,</span>
<a id=__codelineno-0-525 name=__codelineno-0-525></a><span class=sd> },</span>
<a id=__codelineno-0-526 name=__codelineno-0-526></a><span class=sd> slots={</span>
<a id=__codelineno-0-527 name=__codelineno-0-527></a><span class=sd> &quot;header&quot;: &#39;STATIC TEXT HERE&#39;,</span>
<a id=__codelineno-0-528 name=__codelineno-0-528></a><span class=sd> &quot;footer&quot;: lambda ctx, slot_kwargs, slot_ref: f&#39;CTX: {ctx[&#39;hello&#39;]} SLOT_DATA: {slot_kwargs[&#39;abc&#39;]}&#39;,</span>
<a id=__codelineno-0-529 name=__codelineno-0-529></a><span class=sd> },</span>
<a id=__codelineno-0-530 name=__codelineno-0-530></a><span class=sd> escape_slots_content=False,</span>
<a id=__codelineno-0-531 name=__codelineno-0-531></a><span class=sd> # HttpResponse input</span>
<a id=__codelineno-0-532 name=__codelineno-0-532></a><span class=sd> status=201,</span>
<a id=__codelineno-0-533 name=__codelineno-0-533></a><span class=sd> headers={...},</span>
<a id=__codelineno-0-534 name=__codelineno-0-534></a><span class=sd> )</span>
<a id=__codelineno-0-535 name=__codelineno-0-535></a><span class=sd> # HttpResponse(content=..., status=201, headers=...)</span>
<a id=__codelineno-0-536 name=__codelineno-0-536></a><span class=sd> ```</span>
<a id=__codelineno-0-537 name=__codelineno-0-537></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-538 name=__codelineno-0-538></a> <span class=n>content</span> <span class=o>=</span> <span class=bp>cls</span><span class=o>.</span><span class=n>render</span><span class=p>(</span>
<a id=__codelineno-0-539 name=__codelineno-0-539></a> <span class=n>args</span><span class=o>=</span><span class=n>args</span><span class=p>,</span>
<a id=__codelineno-0-540 name=__codelineno-0-540></a> <span class=n>kwargs</span><span class=o>=</span><span class=n>kwargs</span><span class=p>,</span>
<a id=__codelineno-0-541 name=__codelineno-0-541></a> <span class=n>context</span><span class=o>=</span><span class=n>context</span><span class=p>,</span>
<a id=__codelineno-0-542 name=__codelineno-0-542></a> <span class=n>slots</span><span class=o>=</span><span class=n>slots</span><span class=p>,</span>
<a id=__codelineno-0-543 name=__codelineno-0-543></a> <span class=n>escape_slots_content</span><span class=o>=</span><span class=n>escape_slots_content</span><span class=p>,</span>
<a id=__codelineno-0-544 name=__codelineno-0-544></a> <span class=nb>type</span><span class=o>=</span><span class=nb>type</span><span class=p>,</span>
<a id=__codelineno-0-545 name=__codelineno-0-545></a> <span class=n>render_dependencies</span><span class=o>=</span><span class=kc>True</span><span class=p>,</span>
<a id=__codelineno-0-546 name=__codelineno-0-546></a> <span class=p>)</span>
<a id=__codelineno-0-547 name=__codelineno-0-547></a> <span class=k>return</span> <span class=bp>cls</span><span class=o>.</span><span class=n>response_class</span><span class=p>(</span><span class=n>content</span><span class=p>,</span> <span class=o>*</span><span class=n>response_args</span><span class=p>,</span> <span class=o>**</span><span class=n>response_kwargs</span><span class=p>)</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> </div> </div> </div> <div class="doc doc-object doc-class"> <h2 id=django_components.ComponentFileEntry class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-class"></code> <span class="doc doc-object-name doc-class-name">ComponentFileEntry</span> <a href=#django_components.ComponentFileEntry class=headerlink title="Permanent link">¤</a></h2> <div class="doc doc-contents "> <p class="doc doc-class-bases"> Bases: <code><a class="autorefs autorefs-external" title=typing.NamedTuple href=https://docs.python.org/3.12/library/typing.html#typing.NamedTuple>NamedTuple</a></code></p> <p>Result returned by <a href=../api#django_components.get_component_files><code>get_component_files()</code></a>.</p> <p><span class=doc-section-title>Attributes:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.ComponentFileEntry.dot_path href=#django_components.ComponentFileEntry.dot_path>dot_path</a></code></b> (<code><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></code>) <div class=doc-md-description> <p>The python import path for the module. E.g. <code>app.components.mycomp</code></p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.ComponentFileEntry.filepath href=#django_components.ComponentFileEntry.filepath>filepath</a></code></b> (<code><a class="autorefs autorefs-external" title=pathlib.Path href=https://docs.python.org/3.12/library/pathlib.html#pathlib.Path>Path</a></code>) <div class=doc-md-description> <p>The filesystem path to the module. E.g. <code>/path/to/project/app/components/mycomp.py</code></p> </div> </li> </ul> <div class="doc doc-children"> <div class="doc doc-object doc-attribute"> <h3 id=django_components.ComponentFileEntry.dot_path class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">dot_path</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.ComponentFileEntry.dot_path class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>dot_path</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span>
</code></pre></div> <div class="doc doc-contents "> <p>The python import path for the module. E.g. <code>app.components.mycomp</code></p> </div> </div> <div class="doc doc-object doc-attribute"> <h3 id=django_components.ComponentFileEntry.filepath class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">filepath</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.ComponentFileEntry.filepath class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>filepath</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=pathlib.Path href=https://docs.python.org/3.12/library/pathlib.html#pathlib.Path>Path</a></span>
</code></pre></div> <div class="doc doc-contents "> <p>The filesystem path to the module. E.g. <code>/path/to/project/app/components/mycomp.py</code></p> </div> </div> </div> </div> </div> <div class="doc doc-object doc-class"> <h2 id=django_components.ComponentFormatter class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-class"></code> <span class="doc doc-object-name doc-class-name">ComponentFormatter</span> <a href=#django_components.ComponentFormatter class=headerlink title="Permanent link">¤</a></h2> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>ComponentFormatter</span><span class=p>(</span><span class=n>tag</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>)</span>
</code></pre></div> <div class="doc doc-contents "> <p class="doc doc-class-bases"> Bases: <code><a class="autorefs autorefs-internal" title=django_components.tag_formatter.TagFormatterABC href=#django_components.tag_formatter.TagFormatterABC>TagFormatterABC</a></code></p> <p>The original django_component's component tag formatter, it uses the <code>{% component %}</code> and <code>{% endcomponent %}</code> tags, and the component name is given as the first positional arg.</p> <p>Example as block: <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=cp>{%</span> <span class=k>component</span> <span class=s2>&quot;mycomp&quot;</span> <span class=nv>abc</span><span class=o>=</span><span class=m>123</span> <span class=cp>%}</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a><span class=x> </span><span class=cp>{%</span> <span class=k>fill</span> <span class=s2>&quot;myfill&quot;</span> <span class=cp>%}</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=x> ...</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a><span class=x> </span><span class=cp>{%</span> <span class=k>endfill</span> <span class=cp>%}</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a><span class=cp>{%</span> <span class=k>endcomponent</span> <span class=cp>%}</span>
</code></pre></div></p> <p>Example as inlined tag: <div class=highlight><pre><span></span><code><a id=__codelineno-1-1 name=__codelineno-1-1 href=#__codelineno-1-1></a><span class=cp>{%</span> <span class=k>component</span> <span class=s2>&quot;mycomp&quot;</span> <span class=nv>abc</span><span class=o>=</span><span class=m>123</span> <span class=o>/</span> <span class=cp>%}</span>
</code></pre></div></p> <details class=quote> <summary>Source code in <code>src/django_components/tag_formatter.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-228>228</a></span>
<span class=normal><a href=#__codelineno-0-229>229</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-228 name=__codelineno-0-228></a><span class=k>def</span> <span class=fm>__init__</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>tag</span><span class=p>:</span> <span class=nb>str</span><span class=p>):</span>
<a id=__codelineno-0-229 name=__codelineno-0-229></a> <span class=bp>self</span><span class=o>.</span><span class=n>tag</span> <span class=o>=</span> <span class=n>tag</span>
</code></pre></div></td></tr></table></div> </details> <div class="doc doc-children"> </div> </div> </div> <div class="doc doc-object doc-class"> <h2 id=django_components.ComponentRegistry class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-class"></code> <span class="doc doc-object-name doc-class-name">ComponentRegistry</span> <a href=#django_components.ComponentRegistry class=headerlink title="Permanent link">¤</a></h2> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>ComponentRegistry</span><span class=p>(</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a> <span class=n>library</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><span title=django.template.Library>Library</span></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span> <span class=n>settings</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Union href=https://docs.python.org/3.12/library/typing.html#typing.Union>Union</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-internal" title=django_components.component_registry.RegistrySettings href=#django_components.component_registry.RegistrySettings>RegistrySettings</a></span><span class=p>,</span> <span class=n><a class="autorefs autorefs-external" title=typing.Callable href=https://docs.python.org/3.12/library/typing.html#typing.Callable>Callable</a></span><span class=p>[[</span><span class=n><a class="autorefs autorefs-internal" title=django_components.component_registry.ComponentRegistry href=#django_components.component_registry.ComponentRegistry>ComponentRegistry</a></span><span class=p>],</span> <span class=n><a class="autorefs autorefs-internal" title=django_components.component_registry.RegistrySettings href=#django_components.component_registry.RegistrySettings>RegistrySettings</a></span><span class=p>]]]</span> <span class=o>=</span> <span class=kc>None</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=p>)</span>
</code></pre></div> <div class="doc doc-contents "> <p>Manages <a href=../api#django_components.Component>components</a> and makes them available in the template, by default as <a href=../template_tags#component><code>{% component %}</code></a> tags.</p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=cp>{%</span> <span class=k>component</span> <span class=s2>&quot;my_comp&quot;</span> <span class=nv>key</span><span class=o>=</span><span class=nv>value</span> <span class=cp>%}</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a><span class=cp>{%</span> <span class=k>endcomponent</span> <span class=cp>%}</span>
</code></pre></div> <p>To enable a component to be used in a template, the component must be registered with a component registry.</p> <p>When you register a component to a registry, behind the scenes the registry automatically adds the component's template tag (e.g. <code>{% component %}</code> to the <a href=https://docs.djangoproject.com/en/5.1/howto/custom-template-tags/#code-layout><code>Library</code></a>. And the opposite happens when you unregister a component - the tag is removed.</p> <p>See <a href=../../concepts/advanced/component_registry>Registering components</a>.</p> <p><span class=doc-section-title>Parameters:</span></p> <ul> <li class="doc-section-item field-body"> <b><code>library</code></b> (<code><span title=django.template.Library>Library</span></code>, default: <code>None</code> ) <div class=doc-md-description> <p>Django <a href=https://docs.djangoproject.com/en/5.1/howto/custom-template-tags/#code-layout><code>Library</code></a> associated with this registry. If omitted, the default Library instance from django_components is used.</p> </div> </li> <li class="doc-section-item field-body"> <b><code>settings</code></b> (<code><a class="autorefs autorefs-external" title=typing.Union href=https://docs.python.org/3.12/library/typing.html#typing.Union>Union</a>[<a class="autorefs autorefs-internal" title=django_components.component_registry.RegistrySettings href=#django_components.component_registry.RegistrySettings>RegistrySettings</a>, <a class="autorefs autorefs-external" title=typing.Callable href=https://docs.python.org/3.12/library/typing.html#typing.Callable>Callable</a>[[<a class="autorefs autorefs-internal" title=django_components.component_registry.ComponentRegistry href=#django_components.component_registry.ComponentRegistry>ComponentRegistry</a>], <a class="autorefs autorefs-internal" title=django_components.component_registry.RegistrySettings href=#django_components.component_registry.RegistrySettings>RegistrySettings</a>]]</code>, default: <code>None</code> ) <div class=doc-md-description> <p>Configure how the components registered with this registry will behave when rendered. See <a href=../api#django_components.RegistrySettings><code>RegistrySettings</code></a>. Can be either a static value or a callable that returns the settings. If omitted, the settings from <a href=../settings#django_components.app_settings.ComponentsSettings><code>COMPONENTS</code></a> are used.</p> </div> </li> </ul> <p><strong>Notes:</strong></p> <ul> <li>The default registry is available as <a href=../api#django_components.registry><code>django_components.registry</code></a>.</li> <li>The default registry is used when registering components with <a href=../api#django_components.register><code>@register</code></a> decorator.</li> </ul> <p><strong>Example:</strong></p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=c1># Use with default Library</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a><span class=n>registry</span> <span class=o>=</span> <span class=n>ComponentRegistry</span><span class=p>()</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a><span class=c1># Or a custom one</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a><span class=n>my_lib</span> <span class=o>=</span> <span class=n>Library</span><span class=p>()</span>
<a id=__codelineno-0-6 name=__codelineno-0-6 href=#__codelineno-0-6></a><span class=n>registry</span> <span class=o>=</span> <span class=n>ComponentRegistry</span><span class=p>(</span><span class=n>library</span><span class=o>=</span><span class=n>my_lib</span><span class=p>)</span>
<a id=__codelineno-0-7 name=__codelineno-0-7 href=#__codelineno-0-7></a>
<a id=__codelineno-0-8 name=__codelineno-0-8 href=#__codelineno-0-8></a><span class=c1># Usage</span>
<a id=__codelineno-0-9 name=__codelineno-0-9 href=#__codelineno-0-9></a><span class=n>registry</span><span class=o>.</span><span class=n>register</span><span class=p>(</span><span class=s2>&quot;button&quot;</span><span class=p>,</span> <span class=n>ButtonComponent</span><span class=p>)</span>
<a id=__codelineno-0-10 name=__codelineno-0-10 href=#__codelineno-0-10></a><span class=n>registry</span><span class=o>.</span><span class=n>register</span><span class=p>(</span><span class=s2>&quot;card&quot;</span><span class=p>,</span> <span class=n>CardComponent</span><span class=p>)</span>
<a id=__codelineno-0-11 name=__codelineno-0-11 href=#__codelineno-0-11></a><span class=n>registry</span><span class=o>.</span><span class=n>all</span><span class=p>()</span>
<a id=__codelineno-0-12 name=__codelineno-0-12 href=#__codelineno-0-12></a><span class=n>registry</span><span class=o>.</span><span class=n>clear</span><span class=p>()</span>
<a id=__codelineno-0-13 name=__codelineno-0-13 href=#__codelineno-0-13></a><span class=n>registry</span><span class=o>.</span><span class=n>get</span><span class=p>()</span>
</code></pre></div> <h3 id=django_components.ComponentRegistry--using-registry-to-share-components>Using registry to share components<a class=headerlink href=#django_components.ComponentRegistry--using-registry-to-share-components title="Permanent link">¤</a></h3> <p>You can use component registry for isolating or "packaging" components:</p> <ol> <li> <p>Create new instance of <code>ComponentRegistry</code> and Library: <div class=highlight><pre><span></span><code><a id=__codelineno-1-1 name=__codelineno-1-1 href=#__codelineno-1-1></a><span class=x>my_comps = Library()</span>
<a id=__codelineno-1-2 name=__codelineno-1-2 href=#__codelineno-1-2></a><span class=x>my_comps_reg = ComponentRegistry(library=my_comps)</span>
</code></pre></div></p> </li> <li> <p>Register components to the registry: <div class=highlight><pre><span></span><code><a id=__codelineno-2-1 name=__codelineno-2-1 href=#__codelineno-2-1></a><span class=x>my_comps_reg.register(&quot;my_button&quot;, ButtonComponent)</span>
<a id=__codelineno-2-2 name=__codelineno-2-2 href=#__codelineno-2-2></a><span class=x>my_comps_reg.register(&quot;my_card&quot;, CardComponent)</span>
</code></pre></div></p> </li> <li> <p>In your target project, load the Library associated with the registry: <div class=highlight><pre><span></span><code><a id=__codelineno-3-1 name=__codelineno-3-1 href=#__codelineno-3-1></a><span class=cp>{%</span> <span class=k>load</span> <span class=nv>my_comps</span> <span class=cp>%}</span>
</code></pre></div></p> </li> <li> <p>Use the registered components in your templates: <div class=highlight><pre><span></span><code><a id=__codelineno-4-1 name=__codelineno-4-1 href=#__codelineno-4-1></a><span class=cp>{%</span> <span class=k>component</span> <span class=s2>&quot;button&quot;</span> <span class=cp>%}</span>
<a id=__codelineno-4-2 name=__codelineno-4-2 href=#__codelineno-4-2></a><span class=cp>{%</span> <span class=k>endcomponent</span> <span class=cp>%}</span>
</code></pre></div></p> </li> </ol> <p><span class=doc-section-title>Methods:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.ComponentRegistry.all href=#django_components.ComponentRegistry.all>all</a></code></b> <div class=doc-md-description> <p>Retrieve all registered <a href=../api#django_components.Component><code>Component</code></a> classes.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.ComponentRegistry.clear href=#django_components.ComponentRegistry.clear>clear</a></code></b> <div class=doc-md-description> <p>Clears the registry, unregistering all components.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.ComponentRegistry.get href=#django_components.ComponentRegistry.get>get</a></code></b> <div class=doc-md-description> <p>Retrieve a <a href=../api#django_components.Component><code>Component</code></a></p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.ComponentRegistry.register href=#django_components.ComponentRegistry.register>register</a></code></b> <div class=doc-md-description> <p>Register a <a href=../api#django_components.Component><code>Component</code></a> class</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.ComponentRegistry.unregister href=#django_components.ComponentRegistry.unregister>unregister</a></code></b> <div class=doc-md-description> <p>Unregister the <a href=../api#django_components.Component><code>Component</code></a> class</p> </div> </li> </ul> <p><span class=doc-section-title>Attributes:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.ComponentRegistry.library href=#django_components.ComponentRegistry.library>library</a></code></b> (<code><span title=django.template.Library>Library</span></code>) <div class=doc-md-description> <p>The template tag <a href=https://docs.djangoproject.com/en/5.1/howto/custom-template-tags/#code-layout><code>Library</code></a></p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.ComponentRegistry.settings href=#django_components.ComponentRegistry.settings>settings</a></code></b> (<code><span title=django_components.component_registry.InternalRegistrySettings>InternalRegistrySettings</span></code>) <div class=doc-md-description> <p><a href=../api#django_components.RegistrySettings>Registry settings</a> configured for this registry.</p> </div> </li> </ul> <details class=quote> <summary>Source code in <code>src/django_components/component_registry.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-217>217</a></span>
<span class=normal><a href=#__codelineno-0-218>218</a></span>
<span class=normal><a href=#__codelineno-0-219>219</a></span>
<span class=normal><a href=#__codelineno-0-220>220</a></span>
<span class=normal><a href=#__codelineno-0-221>221</a></span>
<span class=normal><a href=#__codelineno-0-222>222</a></span>
<span class=normal><a href=#__codelineno-0-223>223</a></span>
<span class=normal><a href=#__codelineno-0-224>224</a></span>
<span class=normal><a href=#__codelineno-0-225>225</a></span>
<span class=normal><a href=#__codelineno-0-226>226</a></span>
<span class=normal><a href=#__codelineno-0-227>227</a></span>
<span class=normal><a href=#__codelineno-0-228>228</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-217 name=__codelineno-0-217></a><span class=k>def</span> <span class=fm>__init__</span><span class=p>(</span>
<a id=__codelineno-0-218 name=__codelineno-0-218></a> <span class=bp>self</span><span class=p>,</span>
<a id=__codelineno-0-219 name=__codelineno-0-219></a> <span class=n>library</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>Library</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-220 name=__codelineno-0-220></a> <span class=n>settings</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>Union</span><span class=p>[</span><span class=n>RegistrySettings</span><span class=p>,</span> <span class=n>Callable</span><span class=p>[[</span><span class=s2>&quot;ComponentRegistry&quot;</span><span class=p>],</span> <span class=n>RegistrySettings</span><span class=p>]]]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-221 name=__codelineno-0-221></a><span class=p>)</span> <span class=o>-&gt;</span> <span class=kc>None</span><span class=p>:</span>
<a id=__codelineno-0-222 name=__codelineno-0-222></a> <span class=bp>self</span><span class=o>.</span><span class=n>_registry</span><span class=p>:</span> <span class=n>Dict</span><span class=p>[</span><span class=nb>str</span><span class=p>,</span> <span class=n>ComponentRegistryEntry</span><span class=p>]</span> <span class=o>=</span> <span class=p>{}</span> <span class=c1># component name -&gt; component_entry mapping</span>
<a id=__codelineno-0-223 name=__codelineno-0-223></a> <span class=bp>self</span><span class=o>.</span><span class=n>_tags</span><span class=p>:</span> <span class=n>Dict</span><span class=p>[</span><span class=nb>str</span><span class=p>,</span> <span class=n>Set</span><span class=p>[</span><span class=nb>str</span><span class=p>]]</span> <span class=o>=</span> <span class=p>{}</span> <span class=c1># tag -&gt; list[component names]</span>
<a id=__codelineno-0-224 name=__codelineno-0-224></a> <span class=bp>self</span><span class=o>.</span><span class=n>_library</span> <span class=o>=</span> <span class=n>library</span>
<a id=__codelineno-0-225 name=__codelineno-0-225></a> <span class=bp>self</span><span class=o>.</span><span class=n>_settings_input</span> <span class=o>=</span> <span class=n>settings</span>
<a id=__codelineno-0-226 name=__codelineno-0-226></a> <span class=bp>self</span><span class=o>.</span><span class=n>_settings</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>Callable</span><span class=p>[[],</span> <span class=n>InternalRegistrySettings</span><span class=p>]]</span> <span class=o>=</span> <span class=kc>None</span>
<a id=__codelineno-0-227 name=__codelineno-0-227></a>
<a id=__codelineno-0-228 name=__codelineno-0-228></a> <span class=n>all_registries</span><span class=o>.</span><span class=n>append</span><span class=p>(</span><span class=bp>self</span><span class=p>)</span>
</code></pre></div></td></tr></table></div> </details> <div class="doc doc-children"> <div class="doc doc-object doc-attribute"> <h3 id=django_components.ComponentRegistry.library class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">library</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-property"><code>property</code></small> </span> <a href=#django_components.ComponentRegistry.library class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>library</span><span class=p>:</span> <span class=n><span title=django.template.Library>Library</span></span>
</code></pre></div> <div class="doc doc-contents "> <p>The template tag <a href=https://docs.djangoproject.com/en/5.1/howto/custom-template-tags/#code-layout><code>Library</code></a> that is associated with the registry.</p> </div> </div> <div class="doc doc-object doc-attribute"> <h3 id=django_components.ComponentRegistry.settings class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">settings</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-property"><code>property</code></small> </span> <a href=#django_components.ComponentRegistry.settings class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>settings</span><span class=p>:</span> <span class=n><span title=django_components.component_registry.InternalRegistrySettings>InternalRegistrySettings</span></span>
</code></pre></div> <div class="doc doc-contents "> <p><a href=../api#django_components.RegistrySettings>Registry settings</a> configured for this registry.</p> </div> </div> <div class="doc doc-object doc-function"> <h3 id=django_components.ComponentRegistry.all class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">all</span> <a href=#django_components.ComponentRegistry.all class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nb>all</span><span class=p>()</span> <span class=o>-&gt;</span> <span class=nf><a class="autorefs autorefs-external" title=typing.Dict href=https://docs.python.org/3.12/library/typing.html#typing.Dict>Dict</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span> <span class=n><a class="autorefs autorefs-external" title=typing.Type href=https://docs.python.org/3.12/library/typing.html#typing.Type>Type</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-internal" title=django_components.component.Component href=#django_components.component.Component>Component</a></span><span class=p>]]</span>
</code></pre></div> <div class="doc doc-contents "> <p>Retrieve all registered <a href=../api#django_components.Component><code>Component</code></a> classes.</p> <p><span class=doc-section-title>Returns:</span></p> <ul> <li class="doc-section-item field-body"> <code><a class="autorefs autorefs-external" title=typing.Dict href=https://docs.python.org/3.12/library/typing.html#typing.Dict>Dict</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>, <a class="autorefs autorefs-external" title=typing.Type href=https://docs.python.org/3.12/library/typing.html#typing.Type>Type</a>[<a class="autorefs autorefs-internal" title=django_components.component.Component href=#django_components.component.Component>Component</a>]]</code> <div class=doc-md-description> <p>Dict[str, Type[Component]]: A dictionary of component names to component classes</p> </div> </li> </ul> <p><strong>Example:</strong></p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=c1># First register components</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a><span class=n>registry</span><span class=o>.</span><span class=n>register</span><span class=p>(</span><span class=s2>&quot;button&quot;</span><span class=p>,</span> <span class=n>ButtonComponent</span><span class=p>)</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=n>registry</span><span class=o>.</span><span class=n>register</span><span class=p>(</span><span class=s2>&quot;card&quot;</span><span class=p>,</span> <span class=n>CardComponent</span><span class=p>)</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a><span class=c1># Then get all</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a><span class=n>registry</span><span class=o>.</span><span class=n>all</span><span class=p>()</span>
<a id=__codelineno-0-6 name=__codelineno-0-6 href=#__codelineno-0-6></a><span class=c1># &gt; {</span>
<a id=__codelineno-0-7 name=__codelineno-0-7 href=#__codelineno-0-7></a><span class=c1># &gt; &quot;button&quot;: ButtonComponent,</span>
<a id=__codelineno-0-8 name=__codelineno-0-8 href=#__codelineno-0-8></a><span class=c1># &gt; &quot;card&quot;: CardComponent,</span>
<a id=__codelineno-0-9 name=__codelineno-0-9 href=#__codelineno-0-9></a><span class=c1># &gt; }</span>
</code></pre></div> <details class=quote> <summary>Source code in <code>src/django_components/component_registry.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-411>411</a></span>
<span class=normal><a href=#__codelineno-0-412>412</a></span>
<span class=normal><a href=#__codelineno-0-413>413</a></span>
<span class=normal><a href=#__codelineno-0-414>414</a></span>
<span class=normal><a href=#__codelineno-0-415>415</a></span>
<span class=normal><a href=#__codelineno-0-416>416</a></span>
<span class=normal><a href=#__codelineno-0-417>417</a></span>
<span class=normal><a href=#__codelineno-0-418>418</a></span>
<span class=normal><a href=#__codelineno-0-419>419</a></span>
<span class=normal><a href=#__codelineno-0-420>420</a></span>
<span class=normal><a href=#__codelineno-0-421>421</a></span>
<span class=normal><a href=#__codelineno-0-422>422</a></span>
<span class=normal><a href=#__codelineno-0-423>423</a></span>
<span class=normal><a href=#__codelineno-0-424>424</a></span>
<span class=normal><a href=#__codelineno-0-425>425</a></span>
<span class=normal><a href=#__codelineno-0-426>426</a></span>
<span class=normal><a href=#__codelineno-0-427>427</a></span>
<span class=normal><a href=#__codelineno-0-428>428</a></span>
<span class=normal><a href=#__codelineno-0-429>429</a></span>
<span class=normal><a href=#__codelineno-0-430>430</a></span>
<span class=normal><a href=#__codelineno-0-431>431</a></span>
<span class=normal><a href=#__codelineno-0-432>432</a></span>
<span class=normal><a href=#__codelineno-0-433>433</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-411 name=__codelineno-0-411></a><span class=k>def</span> <span class=nf>all</span><span class=p>(</span><span class=bp>self</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n>Dict</span><span class=p>[</span><span class=nb>str</span><span class=p>,</span> <span class=n>Type</span><span class=p>[</span><span class=s2>&quot;Component&quot;</span><span class=p>]]:</span>
<a id=__codelineno-0-412 name=__codelineno-0-412></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-413 name=__codelineno-0-413></a><span class=sd> Retrieve all registered [`Component`](../api#django_components.Component) classes.</span>
<a id=__codelineno-0-414 name=__codelineno-0-414></a>
<a id=__codelineno-0-415 name=__codelineno-0-415></a><span class=sd> Returns:</span>
<a id=__codelineno-0-416 name=__codelineno-0-416></a><span class=sd> Dict[str, Type[Component]]: A dictionary of component names to component classes</span>
<a id=__codelineno-0-417 name=__codelineno-0-417></a>
<a id=__codelineno-0-418 name=__codelineno-0-418></a><span class=sd> **Example:**</span>
<a id=__codelineno-0-419 name=__codelineno-0-419></a>
<a id=__codelineno-0-420 name=__codelineno-0-420></a><span class=sd> ```python</span>
<a id=__codelineno-0-421 name=__codelineno-0-421></a><span class=sd> # First register components</span>
<a id=__codelineno-0-422 name=__codelineno-0-422></a><span class=sd> registry.register(&quot;button&quot;, ButtonComponent)</span>
<a id=__codelineno-0-423 name=__codelineno-0-423></a><span class=sd> registry.register(&quot;card&quot;, CardComponent)</span>
<a id=__codelineno-0-424 name=__codelineno-0-424></a><span class=sd> # Then get all</span>
<a id=__codelineno-0-425 name=__codelineno-0-425></a><span class=sd> registry.all()</span>
<a id=__codelineno-0-426 name=__codelineno-0-426></a><span class=sd> # &gt; {</span>
<a id=__codelineno-0-427 name=__codelineno-0-427></a><span class=sd> # &gt; &quot;button&quot;: ButtonComponent,</span>
<a id=__codelineno-0-428 name=__codelineno-0-428></a><span class=sd> # &gt; &quot;card&quot;: CardComponent,</span>
<a id=__codelineno-0-429 name=__codelineno-0-429></a><span class=sd> # &gt; }</span>
<a id=__codelineno-0-430 name=__codelineno-0-430></a><span class=sd> ```</span>
<a id=__codelineno-0-431 name=__codelineno-0-431></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-432 name=__codelineno-0-432></a> <span class=n>comps</span> <span class=o>=</span> <span class=p>{</span><span class=n>key</span><span class=p>:</span> <span class=n>entry</span><span class=o>.</span><span class=n>cls</span> <span class=k>for</span> <span class=n>key</span><span class=p>,</span> <span class=n>entry</span> <span class=ow>in</span> <span class=bp>self</span><span class=o>.</span><span class=n>_registry</span><span class=o>.</span><span class=n>items</span><span class=p>()}</span>
<a id=__codelineno-0-433 name=__codelineno-0-433></a> <span class=k>return</span> <span class=n>comps</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h3 id=django_components.ComponentRegistry.clear class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">clear</span> <a href=#django_components.ComponentRegistry.clear class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>clear</span><span class=p>()</span> <span class=o>-&gt;</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>Clears the registry, unregistering all components.</p> <p>Example:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=c1># First register components</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a><span class=n>registry</span><span class=o>.</span><span class=n>register</span><span class=p>(</span><span class=s2>&quot;button&quot;</span><span class=p>,</span> <span class=n>ButtonComponent</span><span class=p>)</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=n>registry</span><span class=o>.</span><span class=n>register</span><span class=p>(</span><span class=s2>&quot;card&quot;</span><span class=p>,</span> <span class=n>CardComponent</span><span class=p>)</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a><span class=c1># Then clear</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a><span class=n>registry</span><span class=o>.</span><span class=n>clear</span><span class=p>()</span>
<a id=__codelineno-0-6 name=__codelineno-0-6 href=#__codelineno-0-6></a><span class=c1># Then get all</span>
<a id=__codelineno-0-7 name=__codelineno-0-7 href=#__codelineno-0-7></a><span class=n>registry</span><span class=o>.</span><span class=n>all</span><span class=p>()</span>
<a id=__codelineno-0-8 name=__codelineno-0-8 href=#__codelineno-0-8></a><span class=c1># &gt; {}</span>
</code></pre></div> <details class=quote> <summary>Source code in <code>src/django_components/component_registry.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-435>435</a></span>
<span class=normal><a href=#__codelineno-0-436>436</a></span>
<span class=normal><a href=#__codelineno-0-437>437</a></span>
<span class=normal><a href=#__codelineno-0-438>438</a></span>
<span class=normal><a href=#__codelineno-0-439>439</a></span>
<span class=normal><a href=#__codelineno-0-440>440</a></span>
<span class=normal><a href=#__codelineno-0-441>441</a></span>
<span class=normal><a href=#__codelineno-0-442>442</a></span>
<span class=normal><a href=#__codelineno-0-443>443</a></span>
<span class=normal><a href=#__codelineno-0-444>444</a></span>
<span class=normal><a href=#__codelineno-0-445>445</a></span>
<span class=normal><a href=#__codelineno-0-446>446</a></span>
<span class=normal><a href=#__codelineno-0-447>447</a></span>
<span class=normal><a href=#__codelineno-0-448>448</a></span>
<span class=normal><a href=#__codelineno-0-449>449</a></span>
<span class=normal><a href=#__codelineno-0-450>450</a></span>
<span class=normal><a href=#__codelineno-0-451>451</a></span>
<span class=normal><a href=#__codelineno-0-452>452</a></span>
<span class=normal><a href=#__codelineno-0-453>453</a></span>
<span class=normal><a href=#__codelineno-0-454>454</a></span>
<span class=normal><a href=#__codelineno-0-455>455</a></span>
<span class=normal><a href=#__codelineno-0-456>456</a></span>
<span class=normal><a href=#__codelineno-0-457>457</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-435 name=__codelineno-0-435></a><span class=k>def</span> <span class=nf>clear</span><span class=p>(</span><span class=bp>self</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=kc>None</span><span class=p>:</span>
<a id=__codelineno-0-436 name=__codelineno-0-436></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-437 name=__codelineno-0-437></a><span class=sd> Clears the registry, unregistering all components.</span>
<a id=__codelineno-0-438 name=__codelineno-0-438></a>
<a id=__codelineno-0-439 name=__codelineno-0-439></a><span class=sd> Example:</span>
<a id=__codelineno-0-440 name=__codelineno-0-440></a>
<a id=__codelineno-0-441 name=__codelineno-0-441></a><span class=sd> ```python</span>
<a id=__codelineno-0-442 name=__codelineno-0-442></a><span class=sd> # First register components</span>
<a id=__codelineno-0-443 name=__codelineno-0-443></a><span class=sd> registry.register(&quot;button&quot;, ButtonComponent)</span>
<a id=__codelineno-0-444 name=__codelineno-0-444></a><span class=sd> registry.register(&quot;card&quot;, CardComponent)</span>
<a id=__codelineno-0-445 name=__codelineno-0-445></a><span class=sd> # Then clear</span>
<a id=__codelineno-0-446 name=__codelineno-0-446></a><span class=sd> registry.clear()</span>
<a id=__codelineno-0-447 name=__codelineno-0-447></a><span class=sd> # Then get all</span>
<a id=__codelineno-0-448 name=__codelineno-0-448></a><span class=sd> registry.all()</span>
<a id=__codelineno-0-449 name=__codelineno-0-449></a><span class=sd> # &gt; {}</span>
<a id=__codelineno-0-450 name=__codelineno-0-450></a><span class=sd> ```</span>
<a id=__codelineno-0-451 name=__codelineno-0-451></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-452 name=__codelineno-0-452></a> <span class=n>all_comp_names</span> <span class=o>=</span> <span class=nb>list</span><span class=p>(</span><span class=bp>self</span><span class=o>.</span><span class=n>_registry</span><span class=o>.</span><span class=n>keys</span><span class=p>())</span>
<a id=__codelineno-0-453 name=__codelineno-0-453></a> <span class=k>for</span> <span class=n>comp_name</span> <span class=ow>in</span> <span class=n>all_comp_names</span><span class=p>:</span>
<a id=__codelineno-0-454 name=__codelineno-0-454></a> <span class=bp>self</span><span class=o>.</span><span class=n>unregister</span><span class=p>(</span><span class=n>comp_name</span><span class=p>)</span>
<a id=__codelineno-0-455 name=__codelineno-0-455></a>
<a id=__codelineno-0-456 name=__codelineno-0-456></a> <span class=bp>self</span><span class=o>.</span><span class=n>_registry</span> <span class=o>=</span> <span class=p>{}</span>
<a id=__codelineno-0-457 name=__codelineno-0-457></a> <span class=bp>self</span><span class=o>.</span><span class=n>_tags</span> <span class=o>=</span> <span class=p>{}</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h3 id=django_components.ComponentRegistry.get class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">get</span> <a href=#django_components.ComponentRegistry.get class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>get</span><span class=p>(</span><span class=n>name</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-external" title=typing.Type href=https://docs.python.org/3.12/library/typing.html#typing.Type>Type</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-internal" title=django_components.component.Component href=#django_components.component.Component>Component</a></span><span class=p>]</span>
</code></pre></div> <div class="doc doc-contents "> <p>Retrieve a <a href=../api#django_components.Component><code>Component</code></a> class registered under the given name.</p> <p><span class=doc-section-title>Parameters:</span></p> <ul> <li class="doc-section-item field-body"> <b><code>name</code></b> (<code><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></code>) <div class=doc-md-description> <p>The name under which the component was registered. Required.</p> </div> </li> </ul> <p><span class=doc-section-title>Returns:</span></p> <ul> <li class="doc-section-item field-body"> <code><a class="autorefs autorefs-external" title=typing.Type href=https://docs.python.org/3.12/library/typing.html#typing.Type>Type</a>[<a class="autorefs autorefs-internal" title=django_components.component.Component href=#django_components.component.Component>Component</a>]</code> <div class=doc-md-description> <p>Type[Component]: The component class registered under the given name.</p> </div> </li> </ul> <p><strong>Raises:</strong></p> <ul> <li><a href=../exceptions#django_components.NotRegistered><code>NotRegistered</code></a> if the given name is not registered.</li> </ul> <p><strong>Example:</strong></p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=c1># First register component</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a><span class=n>registry</span><span class=o>.</span><span class=n>register</span><span class=p>(</span><span class=s2>&quot;button&quot;</span><span class=p>,</span> <span class=n>ButtonComponent</span><span class=p>)</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=c1># Then get</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a><span class=n>registry</span><span class=o>.</span><span class=n>get</span><span class=p>(</span><span class=s2>&quot;button&quot;</span><span class=p>)</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a><span class=c1># &gt; ButtonComponent</span>
</code></pre></div> <details class=quote> <summary>Source code in <code>src/django_components/component_registry.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-380>380</a></span>
<span class=normal><a href=#__codelineno-0-381>381</a></span>
<span class=normal><a href=#__codelineno-0-382>382</a></span>
<span class=normal><a href=#__codelineno-0-383>383</a></span>
<span class=normal><a href=#__codelineno-0-384>384</a></span>
<span class=normal><a href=#__codelineno-0-385>385</a></span>
<span class=normal><a href=#__codelineno-0-386>386</a></span>
<span class=normal><a href=#__codelineno-0-387>387</a></span>
<span class=normal><a href=#__codelineno-0-388>388</a></span>
<span class=normal><a href=#__codelineno-0-389>389</a></span>
<span class=normal><a href=#__codelineno-0-390>390</a></span>
<span class=normal><a href=#__codelineno-0-391>391</a></span>
<span class=normal><a href=#__codelineno-0-392>392</a></span>
<span class=normal><a href=#__codelineno-0-393>393</a></span>
<span class=normal><a href=#__codelineno-0-394>394</a></span>
<span class=normal><a href=#__codelineno-0-395>395</a></span>
<span class=normal><a href=#__codelineno-0-396>396</a></span>
<span class=normal><a href=#__codelineno-0-397>397</a></span>
<span class=normal><a href=#__codelineno-0-398>398</a></span>
<span class=normal><a href=#__codelineno-0-399>399</a></span>
<span class=normal><a href=#__codelineno-0-400>400</a></span>
<span class=normal><a href=#__codelineno-0-401>401</a></span>
<span class=normal><a href=#__codelineno-0-402>402</a></span>
<span class=normal><a href=#__codelineno-0-403>403</a></span>
<span class=normal><a href=#__codelineno-0-404>404</a></span>
<span class=normal><a href=#__codelineno-0-405>405</a></span>
<span class=normal><a href=#__codelineno-0-406>406</a></span>
<span class=normal><a href=#__codelineno-0-407>407</a></span>
<span class=normal><a href=#__codelineno-0-408>408</a></span>
<span class=normal><a href=#__codelineno-0-409>409</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-380 name=__codelineno-0-380></a><span class=k>def</span> <span class=nf>get</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>name</span><span class=p>:</span> <span class=nb>str</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n>Type</span><span class=p>[</span><span class=s2>&quot;Component&quot;</span><span class=p>]:</span>
<a id=__codelineno-0-381 name=__codelineno-0-381></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-382 name=__codelineno-0-382></a><span class=sd> Retrieve a [`Component`](../api#django_components.Component)</span>
<a id=__codelineno-0-383 name=__codelineno-0-383></a><span class=sd> class registered under the given name.</span>
<a id=__codelineno-0-384 name=__codelineno-0-384></a>
<a id=__codelineno-0-385 name=__codelineno-0-385></a><span class=sd> Args:</span>
<a id=__codelineno-0-386 name=__codelineno-0-386></a><span class=sd> name (str): The name under which the component was registered. Required.</span>
<a id=__codelineno-0-387 name=__codelineno-0-387></a>
<a id=__codelineno-0-388 name=__codelineno-0-388></a><span class=sd> Returns:</span>
<a id=__codelineno-0-389 name=__codelineno-0-389></a><span class=sd> Type[Component]: The component class registered under the given name.</span>
<a id=__codelineno-0-390 name=__codelineno-0-390></a>
<a id=__codelineno-0-391 name=__codelineno-0-391></a><span class=sd> **Raises:**</span>
<a id=__codelineno-0-392 name=__codelineno-0-392></a>
<a id=__codelineno-0-393 name=__codelineno-0-393></a><span class=sd> - [`NotRegistered`](../exceptions#django_components.NotRegistered)</span>
<a id=__codelineno-0-394 name=__codelineno-0-394></a><span class=sd> if the given name is not registered.</span>
<a id=__codelineno-0-395 name=__codelineno-0-395></a>
<a id=__codelineno-0-396 name=__codelineno-0-396></a><span class=sd> **Example:**</span>
<a id=__codelineno-0-397 name=__codelineno-0-397></a>
<a id=__codelineno-0-398 name=__codelineno-0-398></a><span class=sd> ```python</span>
<a id=__codelineno-0-399 name=__codelineno-0-399></a><span class=sd> # First register component</span>
<a id=__codelineno-0-400 name=__codelineno-0-400></a><span class=sd> registry.register(&quot;button&quot;, ButtonComponent)</span>
<a id=__codelineno-0-401 name=__codelineno-0-401></a><span class=sd> # Then get</span>
<a id=__codelineno-0-402 name=__codelineno-0-402></a><span class=sd> registry.get(&quot;button&quot;)</span>
<a id=__codelineno-0-403 name=__codelineno-0-403></a><span class=sd> # &gt; ButtonComponent</span>
<a id=__codelineno-0-404 name=__codelineno-0-404></a><span class=sd> ```</span>
<a id=__codelineno-0-405 name=__codelineno-0-405></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-406 name=__codelineno-0-406></a> <span class=k>if</span> <span class=n>name</span> <span class=ow>not</span> <span class=ow>in</span> <span class=bp>self</span><span class=o>.</span><span class=n>_registry</span><span class=p>:</span>
<a id=__codelineno-0-407 name=__codelineno-0-407></a> <span class=k>raise</span> <span class=n>NotRegistered</span><span class=p>(</span><span class=s1>&#39;The component &quot;</span><span class=si>%s</span><span class=s1>&quot; is not registered&#39;</span> <span class=o>%</span> <span class=n>name</span><span class=p>)</span>
<a id=__codelineno-0-408 name=__codelineno-0-408></a>
<a id=__codelineno-0-409 name=__codelineno-0-409></a> <span class=k>return</span> <span class=bp>self</span><span class=o>.</span><span class=n>_registry</span><span class=p>[</span><span class=n>name</span><span class=p>]</span><span class=o>.</span><span class=n>cls</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h3 id=django_components.ComponentRegistry.register class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">register</span> <a href=#django_components.ComponentRegistry.register class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>register</span><span class=p>(</span><span class=n>name</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span> <span class=n>component</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Type href=https://docs.python.org/3.12/library/typing.html#typing.Type>Type</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-internal" title=django_components.component.Component href=#django_components.component.Component>Component</a></span><span class=p>])</span> <span class=o>-&gt;</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>Register a <a href=../api#django_components.Component><code>Component</code></a> class with this registry under the given name.</p> <p>A component MUST be registered before it can be used in a template such as: <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=cp>{%</span> <span class=k>component</span> <span class=s2>&quot;my_comp&quot;</span> <span class=cp>%}</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a><span class=cp>{%</span> <span class=k>endcomponent</span> <span class=cp>%}</span>
</code></pre></div></p> <p><span class=doc-section-title>Parameters:</span></p> <ul> <li class="doc-section-item field-body"> <b><code>name</code></b> (<code><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></code>) <div class=doc-md-description> <p>The name under which the component will be registered. Required.</p> </div> </li> <li class="doc-section-item field-body"> <b><code>component</code></b> (<code><a class="autorefs autorefs-external" title=typing.Type href=https://docs.python.org/3.12/library/typing.html#typing.Type>Type</a>[<a class="autorefs autorefs-internal" title=django_components.component.Component href=#django_components.component.Component>Component</a>]</code>) <div class=doc-md-description> <p>The component class to register. Required.</p> </div> </li> </ul> <p><strong>Raises:</strong></p> <ul> <li><a href=../exceptions#django_components.AlreadyRegistered><code>AlreadyRegistered</code></a> if a different component was already registered under the same name.</li> </ul> <p><strong>Example:</strong></p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>registry</span><span class=o>.</span><span class=n>register</span><span class=p>(</span><span class=s2>&quot;button&quot;</span><span class=p>,</span> <span class=n>ButtonComponent</span><span class=p>)</span>
</code></pre></div> <details class=quote> <summary>Source code in <code>src/django_components/component_registry.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-291>291</a></span>
<span class=normal><a href=#__codelineno-0-292>292</a></span>
<span class=normal><a href=#__codelineno-0-293>293</a></span>
<span class=normal><a href=#__codelineno-0-294>294</a></span>
<span class=normal><a href=#__codelineno-0-295>295</a></span>
<span class=normal><a href=#__codelineno-0-296>296</a></span>
<span class=normal><a href=#__codelineno-0-297>297</a></span>
<span class=normal><a href=#__codelineno-0-298>298</a></span>
<span class=normal><a href=#__codelineno-0-299>299</a></span>
<span class=normal><a href=#__codelineno-0-300>300</a></span>
<span class=normal><a href=#__codelineno-0-301>301</a></span>
<span class=normal><a href=#__codelineno-0-302>302</a></span>
<span class=normal><a href=#__codelineno-0-303>303</a></span>
<span class=normal><a href=#__codelineno-0-304>304</a></span>
<span class=normal><a href=#__codelineno-0-305>305</a></span>
<span class=normal><a href=#__codelineno-0-306>306</a></span>
<span class=normal><a href=#__codelineno-0-307>307</a></span>
<span class=normal><a href=#__codelineno-0-308>308</a></span>
<span class=normal><a href=#__codelineno-0-309>309</a></span>
<span class=normal><a href=#__codelineno-0-310>310</a></span>
<span class=normal><a href=#__codelineno-0-311>311</a></span>
<span class=normal><a href=#__codelineno-0-312>312</a></span>
<span class=normal><a href=#__codelineno-0-313>313</a></span>
<span class=normal><a href=#__codelineno-0-314>314</a></span>
<span class=normal><a href=#__codelineno-0-315>315</a></span>
<span class=normal><a href=#__codelineno-0-316>316</a></span>
<span class=normal><a href=#__codelineno-0-317>317</a></span>
<span class=normal><a href=#__codelineno-0-318>318</a></span>
<span class=normal><a href=#__codelineno-0-319>319</a></span>
<span class=normal><a href=#__codelineno-0-320>320</a></span>
<span class=normal><a href=#__codelineno-0-321>321</a></span>
<span class=normal><a href=#__codelineno-0-322>322</a></span>
<span class=normal><a href=#__codelineno-0-323>323</a></span>
<span class=normal><a href=#__codelineno-0-324>324</a></span>
<span class=normal><a href=#__codelineno-0-325>325</a></span>
<span class=normal><a href=#__codelineno-0-326>326</a></span>
<span class=normal><a href=#__codelineno-0-327>327</a></span>
<span class=normal><a href=#__codelineno-0-328>328</a></span>
<span class=normal><a href=#__codelineno-0-329>329</a></span>
<span class=normal><a href=#__codelineno-0-330>330</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-291 name=__codelineno-0-291></a><span class=k>def</span> <span class=nf>register</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>name</span><span class=p>:</span> <span class=nb>str</span><span class=p>,</span> <span class=n>component</span><span class=p>:</span> <span class=n>Type</span><span class=p>[</span><span class=s2>&quot;Component&quot;</span><span class=p>])</span> <span class=o>-&gt;</span> <span class=kc>None</span><span class=p>:</span>
<a id=__codelineno-0-292 name=__codelineno-0-292></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-293 name=__codelineno-0-293></a><span class=sd> Register a [`Component`](../api#django_components.Component) class</span>
<a id=__codelineno-0-294 name=__codelineno-0-294></a><span class=sd> with this registry under the given name.</span>
<a id=__codelineno-0-295 name=__codelineno-0-295></a>
<a id=__codelineno-0-296 name=__codelineno-0-296></a><span class=sd> A component MUST be registered before it can be used in a template such as:</span>
<a id=__codelineno-0-297 name=__codelineno-0-297></a><span class=sd> ```django</span>
<a id=__codelineno-0-298 name=__codelineno-0-298></a><span class=sd> {% component &quot;my_comp&quot; %}</span>
<a id=__codelineno-0-299 name=__codelineno-0-299></a><span class=sd> {% endcomponent %}</span>
<a id=__codelineno-0-300 name=__codelineno-0-300></a><span class=sd> ```</span>
<a id=__codelineno-0-301 name=__codelineno-0-301></a>
<a id=__codelineno-0-302 name=__codelineno-0-302></a><span class=sd> Args:</span>
<a id=__codelineno-0-303 name=__codelineno-0-303></a><span class=sd> name (str): The name under which the component will be registered. Required.</span>
<a id=__codelineno-0-304 name=__codelineno-0-304></a><span class=sd> component (Type[Component]): The component class to register. Required.</span>
<a id=__codelineno-0-305 name=__codelineno-0-305></a>
<a id=__codelineno-0-306 name=__codelineno-0-306></a><span class=sd> **Raises:**</span>
<a id=__codelineno-0-307 name=__codelineno-0-307></a>
<a id=__codelineno-0-308 name=__codelineno-0-308></a><span class=sd> - [`AlreadyRegistered`](../exceptions#django_components.AlreadyRegistered)</span>
<a id=__codelineno-0-309 name=__codelineno-0-309></a><span class=sd> if a different component was already registered under the same name.</span>
<a id=__codelineno-0-310 name=__codelineno-0-310></a>
<a id=__codelineno-0-311 name=__codelineno-0-311></a><span class=sd> **Example:**</span>
<a id=__codelineno-0-312 name=__codelineno-0-312></a>
<a id=__codelineno-0-313 name=__codelineno-0-313></a><span class=sd> ```python</span>
<a id=__codelineno-0-314 name=__codelineno-0-314></a><span class=sd> registry.register(&quot;button&quot;, ButtonComponent)</span>
<a id=__codelineno-0-315 name=__codelineno-0-315></a><span class=sd> ```</span>
<a id=__codelineno-0-316 name=__codelineno-0-316></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-317 name=__codelineno-0-317></a> <span class=n>existing_component</span> <span class=o>=</span> <span class=bp>self</span><span class=o>.</span><span class=n>_registry</span><span class=o>.</span><span class=n>get</span><span class=p>(</span><span class=n>name</span><span class=p>)</span>
<a id=__codelineno-0-318 name=__codelineno-0-318></a> <span class=k>if</span> <span class=n>existing_component</span> <span class=ow>and</span> <span class=n>existing_component</span><span class=o>.</span><span class=n>cls</span><span class=o>.</span><span class=n>_class_hash</span> <span class=o>!=</span> <span class=n>component</span><span class=o>.</span><span class=n>_class_hash</span><span class=p>:</span>
<a id=__codelineno-0-319 name=__codelineno-0-319></a> <span class=k>raise</span> <span class=n>AlreadyRegistered</span><span class=p>(</span><span class=s1>&#39;The component &quot;</span><span class=si>%s</span><span class=s1>&quot; has already been registered&#39;</span> <span class=o>%</span> <span class=n>name</span><span class=p>)</span>
<a id=__codelineno-0-320 name=__codelineno-0-320></a>
<a id=__codelineno-0-321 name=__codelineno-0-321></a> <span class=n>entry</span> <span class=o>=</span> <span class=bp>self</span><span class=o>.</span><span class=n>_register_to_library</span><span class=p>(</span><span class=n>name</span><span class=p>,</span> <span class=n>component</span><span class=p>)</span>
<a id=__codelineno-0-322 name=__codelineno-0-322></a>
<a id=__codelineno-0-323 name=__codelineno-0-323></a> <span class=c1># Keep track of which components use which tags, because multiple components may</span>
<a id=__codelineno-0-324 name=__codelineno-0-324></a> <span class=c1># use the same tag.</span>
<a id=__codelineno-0-325 name=__codelineno-0-325></a> <span class=n>tag</span> <span class=o>=</span> <span class=n>entry</span><span class=o>.</span><span class=n>tag</span>
<a id=__codelineno-0-326 name=__codelineno-0-326></a> <span class=k>if</span> <span class=n>tag</span> <span class=ow>not</span> <span class=ow>in</span> <span class=bp>self</span><span class=o>.</span><span class=n>_tags</span><span class=p>:</span>
<a id=__codelineno-0-327 name=__codelineno-0-327></a> <span class=bp>self</span><span class=o>.</span><span class=n>_tags</span><span class=p>[</span><span class=n>tag</span><span class=p>]</span> <span class=o>=</span> <span class=nb>set</span><span class=p>()</span>
<a id=__codelineno-0-328 name=__codelineno-0-328></a> <span class=bp>self</span><span class=o>.</span><span class=n>_tags</span><span class=p>[</span><span class=n>tag</span><span class=p>]</span><span class=o>.</span><span class=n>add</span><span class=p>(</span><span class=n>name</span><span class=p>)</span>
<a id=__codelineno-0-329 name=__codelineno-0-329></a>
<a id=__codelineno-0-330 name=__codelineno-0-330></a> <span class=bp>self</span><span class=o>.</span><span class=n>_registry</span><span class=p>[</span><span class=n>name</span><span class=p>]</span> <span class=o>=</span> <span class=n>entry</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h3 id=django_components.ComponentRegistry.unregister class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">unregister</span> <a href=#django_components.ComponentRegistry.unregister class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>unregister</span><span class=p>(</span><span class=n>name</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>)</span> <span class=o>-&gt;</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>Unregister the <a href=../api#django_components.Component><code>Component</code></a> class that was registered under the given name.</p> <p>Once a component is unregistered, it is no longer available in the templates.</p> <p><span class=doc-section-title>Parameters:</span></p> <ul> <li class="doc-section-item field-body"> <b><code>name</code></b> (<code><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></code>) <div class=doc-md-description> <p>The name under which the component is registered. Required.</p> </div> </li> </ul> <p><strong>Raises:</strong></p> <ul> <li><a href=../exceptions#django_components.NotRegistered><code>NotRegistered</code></a> if the given name is not registered.</li> </ul> <p><strong>Example:</strong></p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=c1># First register component</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a><span class=n>registry</span><span class=o>.</span><span class=n>register</span><span class=p>(</span><span class=s2>&quot;button&quot;</span><span class=p>,</span> <span class=n>ButtonComponent</span><span class=p>)</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=c1># Then unregister</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a><span class=n>registry</span><span class=o>.</span><span class=n>unregister</span><span class=p>(</span><span class=s2>&quot;button&quot;</span><span class=p>)</span>
</code></pre></div> <details class=quote> <summary>Source code in <code>src/django_components/component_registry.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-332>332</a></span>
<span class=normal><a href=#__codelineno-0-333>333</a></span>
<span class=normal><a href=#__codelineno-0-334>334</a></span>
<span class=normal><a href=#__codelineno-0-335>335</a></span>
<span class=normal><a href=#__codelineno-0-336>336</a></span>
<span class=normal><a href=#__codelineno-0-337>337</a></span>
<span class=normal><a href=#__codelineno-0-338>338</a></span>
<span class=normal><a href=#__codelineno-0-339>339</a></span>
<span class=normal><a href=#__codelineno-0-340>340</a></span>
<span class=normal><a href=#__codelineno-0-341>341</a></span>
<span class=normal><a href=#__codelineno-0-342>342</a></span>
<span class=normal><a href=#__codelineno-0-343>343</a></span>
<span class=normal><a href=#__codelineno-0-344>344</a></span>
<span class=normal><a href=#__codelineno-0-345>345</a></span>
<span class=normal><a href=#__codelineno-0-346>346</a></span>
<span class=normal><a href=#__codelineno-0-347>347</a></span>
<span class=normal><a href=#__codelineno-0-348>348</a></span>
<span class=normal><a href=#__codelineno-0-349>349</a></span>
<span class=normal><a href=#__codelineno-0-350>350</a></span>
<span class=normal><a href=#__codelineno-0-351>351</a></span>
<span class=normal><a href=#__codelineno-0-352>352</a></span>
<span class=normal><a href=#__codelineno-0-353>353</a></span>
<span class=normal><a href=#__codelineno-0-354>354</a></span>
<span class=normal><a href=#__codelineno-0-355>355</a></span>
<span class=normal><a href=#__codelineno-0-356>356</a></span>
<span class=normal><a href=#__codelineno-0-357>357</a></span>
<span class=normal><a href=#__codelineno-0-358>358</a></span>
<span class=normal><a href=#__codelineno-0-359>359</a></span>
<span class=normal><a href=#__codelineno-0-360>360</a></span>
<span class=normal><a href=#__codelineno-0-361>361</a></span>
<span class=normal><a href=#__codelineno-0-362>362</a></span>
<span class=normal><a href=#__codelineno-0-363>363</a></span>
<span class=normal><a href=#__codelineno-0-364>364</a></span>
<span class=normal><a href=#__codelineno-0-365>365</a></span>
<span class=normal><a href=#__codelineno-0-366>366</a></span>
<span class=normal><a href=#__codelineno-0-367>367</a></span>
<span class=normal><a href=#__codelineno-0-368>368</a></span>
<span class=normal><a href=#__codelineno-0-369>369</a></span>
<span class=normal><a href=#__codelineno-0-370>370</a></span>
<span class=normal><a href=#__codelineno-0-371>371</a></span>
<span class=normal><a href=#__codelineno-0-372>372</a></span>
<span class=normal><a href=#__codelineno-0-373>373</a></span>
<span class=normal><a href=#__codelineno-0-374>374</a></span>
<span class=normal><a href=#__codelineno-0-375>375</a></span>
<span class=normal><a href=#__codelineno-0-376>376</a></span>
<span class=normal><a href=#__codelineno-0-377>377</a></span>
<span class=normal><a href=#__codelineno-0-378>378</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-332 name=__codelineno-0-332></a><span class=k>def</span> <span class=nf>unregister</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>name</span><span class=p>:</span> <span class=nb>str</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=kc>None</span><span class=p>:</span>
<a id=__codelineno-0-333 name=__codelineno-0-333></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-334 name=__codelineno-0-334></a><span class=sd> Unregister the [`Component`](../api#django_components.Component) class</span>
<a id=__codelineno-0-335 name=__codelineno-0-335></a><span class=sd> that was registered under the given name.</span>
<a id=__codelineno-0-336 name=__codelineno-0-336></a>
<a id=__codelineno-0-337 name=__codelineno-0-337></a><span class=sd> Once a component is unregistered, it is no longer available in the templates.</span>
<a id=__codelineno-0-338 name=__codelineno-0-338></a>
<a id=__codelineno-0-339 name=__codelineno-0-339></a><span class=sd> Args:</span>
<a id=__codelineno-0-340 name=__codelineno-0-340></a><span class=sd> name (str): The name under which the component is registered. Required.</span>
<a id=__codelineno-0-341 name=__codelineno-0-341></a>
<a id=__codelineno-0-342 name=__codelineno-0-342></a><span class=sd> **Raises:**</span>
<a id=__codelineno-0-343 name=__codelineno-0-343></a>
<a id=__codelineno-0-344 name=__codelineno-0-344></a><span class=sd> - [`NotRegistered`](../exceptions#django_components.NotRegistered)</span>
<a id=__codelineno-0-345 name=__codelineno-0-345></a><span class=sd> if the given name is not registered.</span>
<a id=__codelineno-0-346 name=__codelineno-0-346></a>
<a id=__codelineno-0-347 name=__codelineno-0-347></a><span class=sd> **Example:**</span>
<a id=__codelineno-0-348 name=__codelineno-0-348></a>
<a id=__codelineno-0-349 name=__codelineno-0-349></a><span class=sd> ```python</span>
<a id=__codelineno-0-350 name=__codelineno-0-350></a><span class=sd> # First register component</span>
<a id=__codelineno-0-351 name=__codelineno-0-351></a><span class=sd> registry.register(&quot;button&quot;, ButtonComponent)</span>
<a id=__codelineno-0-352 name=__codelineno-0-352></a><span class=sd> # Then unregister</span>
<a id=__codelineno-0-353 name=__codelineno-0-353></a><span class=sd> registry.unregister(&quot;button&quot;)</span>
<a id=__codelineno-0-354 name=__codelineno-0-354></a><span class=sd> ```</span>
<a id=__codelineno-0-355 name=__codelineno-0-355></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-356 name=__codelineno-0-356></a> <span class=c1># Validate</span>
<a id=__codelineno-0-357 name=__codelineno-0-357></a> <span class=bp>self</span><span class=o>.</span><span class=n>get</span><span class=p>(</span><span class=n>name</span><span class=p>)</span>
<a id=__codelineno-0-358 name=__codelineno-0-358></a>
<a id=__codelineno-0-359 name=__codelineno-0-359></a> <span class=n>entry</span> <span class=o>=</span> <span class=bp>self</span><span class=o>.</span><span class=n>_registry</span><span class=p>[</span><span class=n>name</span><span class=p>]</span>
<a id=__codelineno-0-360 name=__codelineno-0-360></a> <span class=n>tag</span> <span class=o>=</span> <span class=n>entry</span><span class=o>.</span><span class=n>tag</span>
<a id=__codelineno-0-361 name=__codelineno-0-361></a>
<a id=__codelineno-0-362 name=__codelineno-0-362></a> <span class=c1># Unregister the tag from library if this was the last component using this tag</span>
<a id=__codelineno-0-363 name=__codelineno-0-363></a> <span class=c1># Unlink component from tag</span>
<a id=__codelineno-0-364 name=__codelineno-0-364></a> <span class=bp>self</span><span class=o>.</span><span class=n>_tags</span><span class=p>[</span><span class=n>tag</span><span class=p>]</span><span class=o>.</span><span class=n>remove</span><span class=p>(</span><span class=n>name</span><span class=p>)</span>
<a id=__codelineno-0-365 name=__codelineno-0-365></a>
<a id=__codelineno-0-366 name=__codelineno-0-366></a> <span class=c1># Cleanup</span>
<a id=__codelineno-0-367 name=__codelineno-0-367></a> <span class=n>is_tag_empty</span> <span class=o>=</span> <span class=ow>not</span> <span class=nb>len</span><span class=p>(</span><span class=bp>self</span><span class=o>.</span><span class=n>_tags</span><span class=p>[</span><span class=n>tag</span><span class=p>])</span>
<a id=__codelineno-0-368 name=__codelineno-0-368></a> <span class=k>if</span> <span class=n>is_tag_empty</span><span class=p>:</span>
<a id=__codelineno-0-369 name=__codelineno-0-369></a> <span class=k>del</span> <span class=bp>self</span><span class=o>.</span><span class=n>_tags</span><span class=p>[</span><span class=n>tag</span><span class=p>]</span>
<a id=__codelineno-0-370 name=__codelineno-0-370></a>
<a id=__codelineno-0-371 name=__codelineno-0-371></a> <span class=c1># Only unregister a tag if it&#39;s NOT protected</span>
<a id=__codelineno-0-372 name=__codelineno-0-372></a> <span class=n>is_protected</span> <span class=o>=</span> <span class=n>is_tag_protected</span><span class=p>(</span><span class=bp>self</span><span class=o>.</span><span class=n>library</span><span class=p>,</span> <span class=n>tag</span><span class=p>)</span>
<a id=__codelineno-0-373 name=__codelineno-0-373></a> <span class=k>if</span> <span class=ow>not</span> <span class=n>is_protected</span><span class=p>:</span>
<a id=__codelineno-0-374 name=__codelineno-0-374></a> <span class=c1># Unregister the tag from library if this was the last component using this tag</span>
<a id=__codelineno-0-375 name=__codelineno-0-375></a> <span class=k>if</span> <span class=n>is_tag_empty</span> <span class=ow>and</span> <span class=n>tag</span> <span class=ow>in</span> <span class=bp>self</span><span class=o>.</span><span class=n>library</span><span class=o>.</span><span class=n>tags</span><span class=p>:</span>
<a id=__codelineno-0-376 name=__codelineno-0-376></a> <span class=k>del</span> <span class=bp>self</span><span class=o>.</span><span class=n>library</span><span class=o>.</span><span class=n>tags</span><span class=p>[</span><span class=n>tag</span><span class=p>]</span>
<a id=__codelineno-0-377 name=__codelineno-0-377></a>
<a id=__codelineno-0-378 name=__codelineno-0-378></a> <span class=k>del</span> <span class=bp>self</span><span class=o>.</span><span class=n>_registry</span><span class=p>[</span><span class=n>name</span><span class=p>]</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> </div> </div> </div> <div class="doc doc-object doc-class"> <h2 id=django_components.ComponentVars class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-class"></code> <span class="doc doc-object-name doc-class-name">ComponentVars</span> <a href=#django_components.ComponentVars class=headerlink title="Permanent link">¤</a></h2> <div class="doc doc-contents "> <p class="doc doc-class-bases"> Bases: <code><a class="autorefs autorefs-external" title=typing.NamedTuple href=https://docs.python.org/3.12/library/typing.html#typing.NamedTuple>NamedTuple</a></code></p> <p>Type for the variables available inside the component templates.</p> <p>All variables here are scoped under <code>component_vars.</code>, so e.g. attribute <code>is_filled</code> on this class is accessible inside the template as:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=cp>{{</span> <span class=nv>component_vars.is_filled</span> <span class=cp>}}</span>
</code></pre></div> <p><span class=doc-section-title>Attributes:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.ComponentVars.is_filled href=#django_components.ComponentVars.is_filled>is_filled</a></code></b> (<code><a class="autorefs autorefs-external" title=typing.Dict href=https://docs.python.org/3.12/library/typing.html#typing.Dict>Dict</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>, <a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/functions.html#bool>bool</a>]</code>) <div class=doc-md-description> <p>Dictonary describing which component slots are filled (<code>True</code>) or are not (<code>False</code>).</p> </div> </li> </ul> <div class="doc doc-children"> <div class="doc doc-object doc-attribute"> <h3 id=django_components.ComponentVars.is_filled class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">is_filled</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.ComponentVars.is_filled class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>is_filled</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Dict href=https://docs.python.org/3.12/library/typing.html#typing.Dict>Dict</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/functions.html#bool>bool</a></span><span class=p>]</span>
</code></pre></div> <div class="doc doc-contents "> <p>Dictonary describing which component slots are filled (<code>True</code>) or are not (<code>False</code>).</p> <p><i>New in version 0.70</i></p> <p>Use as <code>{{ component_vars.is_filled }}</code></p> <p>Example:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=c>{# Render wrapping HTML only if the slot is defined #}</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a><span class=cp>{%</span> <span class=k>if</span> <span class=nv>component_vars.is_filled.my_slot</span> <span class=cp>%}</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=x> &lt;div class=&quot;slot-wrapper&quot;&gt;</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a><span class=x> </span><span class=cp>{%</span> <span class=k>slot</span> <span class=s2>&quot;my_slot&quot;</span> <span class=o>/</span> <span class=cp>%}</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a><span class=x> &lt;/div&gt;</span>
<a id=__codelineno-0-6 name=__codelineno-0-6 href=#__codelineno-0-6></a><span class=cp>{%</span> <span class=k>endif</span> <span class=cp>%}</span>
</code></pre></div> </div> </div> </div> </div> </div> <div class="doc doc-object doc-class"> <h2 id=django_components.ComponentView class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-class"></code> <span class="doc doc-object-name doc-class-name">ComponentView</span> <a href=#django_components.ComponentView class=headerlink title="Permanent link">¤</a></h2> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>ComponentView</span><span class=p>(</span><span class=n>component</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-internal" title=django_components.component.Component href=#django_components.component.Component>Component</a></span><span class=p>,</span> <span class=o>**</span><span class=n>kwargs</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Any href=https://docs.python.org/3.12/library/typing.html#typing.Any>Any</a></span><span class=p>)</span>
</code></pre></div> <div class="doc doc-contents "> <p class="doc doc-class-bases"> Bases: <code><span title=django.views.View>View</span></code></p> <p>Subclass of <code>django.views.View</code> where the <code>Component</code> instance is available via <code>self.component</code>.</p> <details class=quote> <summary>Source code in <code>src/django_components/component.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-186>186</a></span>
<span class=normal><a href=#__codelineno-0-187>187</a></span>
<span class=normal><a href=#__codelineno-0-188>188</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-186 name=__codelineno-0-186></a><span class=k>def</span> <span class=fm>__init__</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>component</span><span class=p>:</span> <span class=s2>&quot;Component&quot;</span><span class=p>,</span> <span class=o>**</span><span class=n>kwargs</span><span class=p>:</span> <span class=n>Any</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=kc>None</span><span class=p>:</span>
<a id=__codelineno-0-187 name=__codelineno-0-187></a> <span class=nb>super</span><span class=p>()</span><span class=o>.</span><span class=fm>__init__</span><span class=p>(</span><span class=o>**</span><span class=n>kwargs</span><span class=p>)</span>
<a id=__codelineno-0-188 name=__codelineno-0-188></a> <span class=bp>self</span><span class=o>.</span><span class=n>component</span> <span class=o>=</span> <span class=n>component</span>
</code></pre></div></td></tr></table></div> </details> <div class="doc doc-children"> </div> </div> </div> <div class="doc doc-object doc-class"> <h2 id=django_components.ComponentsSettings class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-class"></code> <span class="doc doc-object-name doc-class-name">ComponentsSettings</span> <a href=#django_components.ComponentsSettings class=headerlink title="Permanent link">¤</a></h2> <div class="doc doc-contents "> <p class="doc doc-class-bases"> Bases: <code><a class="autorefs autorefs-external" title=typing.NamedTuple href=https://docs.python.org/3.12/library/typing.html#typing.NamedTuple>NamedTuple</a></code></p> <p>Settings available for django_components.</p> <p><strong>Example:</strong></p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>COMPONENTS</span> <span class=o>=</span> <span class=n>ComponentsSettings</span><span class=p>(</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a> <span class=n>autodiscover</span><span class=o>=</span><span class=kc>False</span><span class=p>,</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a> <span class=n>dirs</span> <span class=o>=</span> <span class=p>[</span><span class=n>BASE_DIR</span> <span class=o>/</span> <span class=s2>&quot;components&quot;</span><span class=p>],</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a><span class=p>)</span>
</code></pre></div> <p><span class=doc-section-title>Attributes:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.ComponentsSettings.app_dirs href=#django_components.ComponentsSettings.app_dirs>app_dirs</a></code></b> (<code><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a>[<a class="autorefs autorefs-external" title=typing.Sequence href=https://docs.python.org/3.12/library/typing.html#typing.Sequence>Sequence</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>]]</code>) <div class=doc-md-description> <p>Specify the app-level directories that contain your components.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.ComponentsSettings.autodiscover href=#django_components.ComponentsSettings.autodiscover>autodiscover</a></code></b> (<code><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/functions.html#bool>bool</a>]</code>) <div class=doc-md-description> <p>Toggle whether to run <a href=../../concepts/fundamentals/autodiscovery>autodiscovery</a> at the Django server startup.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.ComponentsSettings.context_behavior href=#django_components.ComponentsSettings.context_behavior>context_behavior</a></code></b> (<code><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a>[<span title=django_components.app_settings.ContextBehaviorType>ContextBehaviorType</span>]</code>) <div class=doc-md-description> <p>Configure whether, inside a component template, you can use variables from the outside</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.ComponentsSettings.dirs href=#django_components.ComponentsSettings.dirs>dirs</a></code></b> (<code><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a>[<a class="autorefs autorefs-external" title=typing.Sequence href=https://docs.python.org/3.12/library/typing.html#typing.Sequence>Sequence</a>[<a class="autorefs autorefs-external" title=typing.Union href=https://docs.python.org/3.12/library/typing.html#typing.Union>Union</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>, <a class="autorefs autorefs-external" title=os.PathLike href=https://docs.python.org/3.12/library/os.html#os.PathLike>PathLike</a>, <a class="autorefs autorefs-external" title=typing.Tuple href=https://docs.python.org/3.12/library/typing.html#typing.Tuple>Tuple</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>, <a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>], <a class="autorefs autorefs-external" title=typing.Tuple href=https://docs.python.org/3.12/library/typing.html#typing.Tuple>Tuple</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>, <a class="autorefs autorefs-external" title=os.PathLike href=https://docs.python.org/3.12/library/os.html#os.PathLike>PathLike</a>]]]]</code>) <div class=doc-md-description> <p>Specify the directories that contain your components.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.ComponentsSettings.dynamic_component_name href=#django_components.ComponentsSettings.dynamic_component_name>dynamic_component_name</a></code></b> (<code><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>]</code>) <div class=doc-md-description> <p>By default, the <a href=../components#django_components.components.dynamic.DynamicComponent>dynamic component</a></p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.ComponentsSettings.forbidden_static_files href=#django_components.ComponentsSettings.forbidden_static_files>forbidden_static_files</a></code></b> (<code><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a>[<a class="autorefs autorefs-external" title=typing.List href=https://docs.python.org/3.12/library/typing.html#typing.List>List</a>[<a class="autorefs autorefs-external" title=typing.Union href=https://docs.python.org/3.12/library/typing.html#typing.Union>Union</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>, <a class="autorefs autorefs-external" title=re.Pattern href=https://docs.python.org/3.12/library/re.html#re.Pattern>Pattern</a>]]]</code>) <div class=doc-md-description> <p>Deprecated. Use</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.ComponentsSettings.libraries href=#django_components.ComponentsSettings.libraries>libraries</a></code></b> (<code><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a>[<a class="autorefs autorefs-external" title=typing.List href=https://docs.python.org/3.12/library/typing.html#typing.List>List</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>]]</code>) <div class=doc-md-description> <p>Configure extra python modules that should be loaded.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.ComponentsSettings.multiline_tags href=#django_components.ComponentsSettings.multiline_tags>multiline_tags</a></code></b> (<code><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/functions.html#bool>bool</a>]</code>) <div class=doc-md-description> <p>Enable / disable</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.ComponentsSettings.reload_on_file_change href=#django_components.ComponentsSettings.reload_on_file_change>reload_on_file_change</a></code></b> (<code><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/functions.html#bool>bool</a>]</code>) <div class=doc-md-description> <p>This is relevant if you are using the project structure where</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.ComponentsSettings.reload_on_template_change href=#django_components.ComponentsSettings.reload_on_template_change>reload_on_template_change</a></code></b> (<code><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/functions.html#bool>bool</a>]</code>) <div class=doc-md-description> <p>Deprecated. Use</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.ComponentsSettings.static_files_allowed href=#django_components.ComponentsSettings.static_files_allowed>static_files_allowed</a></code></b> (<code><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a>[<a class="autorefs autorefs-external" title=typing.List href=https://docs.python.org/3.12/library/typing.html#typing.List>List</a>[<a class="autorefs autorefs-external" title=typing.Union href=https://docs.python.org/3.12/library/typing.html#typing.Union>Union</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>, <a class="autorefs autorefs-external" title=re.Pattern href=https://docs.python.org/3.12/library/re.html#re.Pattern>Pattern</a>]]]</code>) <div class=doc-md-description> <p>A list of file extensions (including the leading dot) that define which files within</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.ComponentsSettings.static_files_forbidden href=#django_components.ComponentsSettings.static_files_forbidden>static_files_forbidden</a></code></b> (<code><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a>[<a class="autorefs autorefs-external" title=typing.List href=https://docs.python.org/3.12/library/typing.html#typing.List>List</a>[<a class="autorefs autorefs-external" title=typing.Union href=https://docs.python.org/3.12/library/typing.html#typing.Union>Union</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>, <a class="autorefs autorefs-external" title=re.Pattern href=https://docs.python.org/3.12/library/re.html#re.Pattern>Pattern</a>]]]</code>) <div class=doc-md-description> <p>A list of file extensions (including the leading dot) that define which files within</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.ComponentsSettings.tag_formatter href=#django_components.ComponentsSettings.tag_formatter>tag_formatter</a></code></b> (<code><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a>[<a class="autorefs autorefs-external" title=typing.Union href=https://docs.python.org/3.12/library/typing.html#typing.Union>Union</a>[<a class="autorefs autorefs-internal" title=django_components.tag_formatter.TagFormatterABC href=#django_components.tag_formatter.TagFormatterABC>TagFormatterABC</a>, <a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>]]</code>) <div class=doc-md-description> <p>Configure what syntax is used inside Django templates to render components.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.ComponentsSettings.template_cache_size href=#django_components.ComponentsSettings.template_cache_size>template_cache_size</a></code></b> (<code><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/functions.html#int>int</a>]</code>) <div class=doc-md-description> <p>Configure the maximum amount of Django templates to be cached.</p> </div> </li> </ul> <div class="doc doc-children"> <div class="doc doc-object doc-attribute"> <h3 id=django_components.ComponentsSettings.app_dirs class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">app_dirs</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.ComponentsSettings.app_dirs class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>app_dirs</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Sequence href=https://docs.python.org/3.12/library/typing.html#typing.Sequence>Sequence</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]]</span> <span class=o>=</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>Specify the app-level directories that contain your components.</p> <p>Defaults to <code>["components"]</code>. That is, for each Django app, we search <code>&lt;app&gt;/components/</code> for components.</p> <p>The paths must be relative to app, e.g.:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>COMPONENTS</span> <span class=o>=</span> <span class=n>ComponentsSettings</span><span class=p>(</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a> <span class=n>app_dirs</span><span class=o>=</span><span class=p>[</span><span class=s2>&quot;my_comps&quot;</span><span class=p>],</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=p>)</span>
</code></pre></div> <p>To search for <code>&lt;app&gt;/my_comps/</code>.</p> <p>These locations are searched during <a href=../../concepts/fundamentals/autodiscovery>autodiscovery</a>, or when you <a href=../../concepts/fundamentals/defining_js_css_html_files>define HTML, JS, or CSS as separate files</a>.</p> <p>Set to empty list to disable app-level components:</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>COMPONENTS</span> <span class=o>=</span> <span class=n>ComponentsSettings</span><span class=p>(</span>
<a id=__codelineno-1-2 name=__codelineno-1-2 href=#__codelineno-1-2></a> <span class=n>app_dirs</span><span class=o>=</span><span class=p>[],</span>
<a id=__codelineno-1-3 name=__codelineno-1-3 href=#__codelineno-1-3></a><span class=p>)</span>
</code></pre></div> </div> </div> <div class="doc doc-object doc-attribute"> <h3 id=django_components.ComponentsSettings.autodiscover class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">autodiscover</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.ComponentsSettings.autodiscover class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>autodiscover</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/functions.html#bool>bool</a></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>Toggle whether to run <a href=../../concepts/fundamentals/autodiscovery>autodiscovery</a> at the Django server startup.</p> <p>Defaults to <code>True</code></p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>COMPONENTS</span> <span class=o>=</span> <span class=n>ComponentsSettings</span><span class=p>(</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a> <span class=n>autodiscover</span><span class=o>=</span><span class=kc>False</span><span class=p>,</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=p>)</span>
</code></pre></div> </div> </div> <div class="doc doc-object doc-attribute"> <h3 id=django_components.ComponentsSettings.context_behavior class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">context_behavior</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.ComponentsSettings.context_behavior class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>context_behavior</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><span title=django_components.app_settings.ContextBehaviorType>ContextBehaviorType</span></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>Configure whether, inside a component template, you can use variables from the outside (<a href=../api#django_components.ContextBehavior.DJANGO><code>"django"</code></a>) or not (<a href=../api#django_components.ContextBehavior.ISOLATED><code>"isolated"</code></a>). This also affects what variables are available inside the <a href=../template_tags#fill><code>{% fill %}</code></a> tags.</p> <p>Also see <a href=../../concepts/fundamentals/component_context_scope#context-behavior>Component context and scope</a>.</p> <p>Defaults to <code>"django"</code>.</p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>COMPONENTS</span> <span class=o>=</span> <span class=n>ComponentsSettings</span><span class=p>(</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a> <span class=n>context_behavior</span><span class=o>=</span><span class=s2>&quot;isolated&quot;</span><span class=p>,</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=p>)</span>
</code></pre></div> <blockquote> <p>NOTE: <code>context_behavior</code> and <code>slot_context_behavior</code> options were merged in v0.70.</p> <p>If you are migrating from BEFORE v0.67, set <code>context_behavior</code> to <code>"django"</code>. From v0.67 to v0.78 (incl) the default value was <code>"isolated"</code>.</p> <p>For v0.79 and later, the default is again <code>"django"</code>. See the rationale for change <a href=https://github.com/EmilStenstrom/django-components/issues/498>here</a>.</p> </blockquote> </div> </div> <div class="doc doc-object doc-attribute"> <h3 id=django_components.ComponentsSettings.dirs class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">dirs</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.ComponentsSettings.dirs class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>dirs</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Sequence href=https://docs.python.org/3.12/library/typing.html#typing.Sequence>Sequence</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Union href=https://docs.python.org/3.12/library/typing.html#typing.Union>Union</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span> <span class=n><a class="autorefs autorefs-external" title=os.PathLike href=https://docs.python.org/3.12/library/os.html#os.PathLike>PathLike</a></span><span class=p>,</span> <span class=n><a class="autorefs autorefs-external" title=typing.Tuple href=https://docs.python.org/3.12/library/typing.html#typing.Tuple>Tuple</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>],</span> <span class=n><a class="autorefs autorefs-external" title=typing.Tuple href=https://docs.python.org/3.12/library/typing.html#typing.Tuple>Tuple</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span> <span class=n><a class="autorefs autorefs-external" title=os.PathLike href=https://docs.python.org/3.12/library/os.html#os.PathLike>PathLike</a></span><span class=p>]]]]</span> <span class=o>=</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>Specify the directories that contain your components.</p> <p>Defaults to <code>[Path(settings.BASE_DIR) / "components"]</code>. That is, the root <code>components/</code> app.</p> <p>Directories must be full paths, same as with <a href=https://docs.djangoproject.com/en/5.1/ref/settings/#std-setting-STATICFILES_DIRS>STATICFILES_DIRS</a>.</p> <p>These locations are searched during <a href=../../concepts/fundamentals/autodiscovery>autodiscovery</a>, or when you <a href=../../concepts/fundamentals/defining_js_css_html_files>define HTML, JS, or CSS as separate files</a>.</p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>COMPONENTS</span> <span class=o>=</span> <span class=n>ComponentsSettings</span><span class=p>(</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a> <span class=n>dirs</span><span class=o>=</span><span class=p>[</span><span class=n>BASE_DIR</span> <span class=o>/</span> <span class=s2>&quot;components&quot;</span><span class=p>],</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=p>)</span>
</code></pre></div> <p>Set to empty list to disable global components directories:</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>COMPONENTS</span> <span class=o>=</span> <span class=n>ComponentsSettings</span><span class=p>(</span>
<a id=__codelineno-1-2 name=__codelineno-1-2 href=#__codelineno-1-2></a> <span class=n>dirs</span><span class=o>=</span><span class=p>[],</span>
<a id=__codelineno-1-3 name=__codelineno-1-3 href=#__codelineno-1-3></a><span class=p>)</span>
</code></pre></div> </div> </div> <div class="doc doc-object doc-attribute"> <h3 id=django_components.ComponentsSettings.dynamic_component_name class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">dynamic_component_name</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.ComponentsSettings.dynamic_component_name class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>dynamic_component_name</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>By default, the <a href=../components#django_components.components.dynamic.DynamicComponent>dynamic component</a> is registered under the name <code>"dynamic"</code>.</p> <p>In case of a conflict, you can use this setting to change the component name used for the dynamic components.</p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=c1># settings.py</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a><span class=n>COMPONENTS</span> <span class=o>=</span> <span class=n>ComponentsSettings</span><span class=p>(</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a> <span class=n>dynamic_component_name</span><span class=o>=</span><span class=s2>&quot;my_dynamic&quot;</span><span class=p>,</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a><span class=p>)</span>
</code></pre></div> <p>After which you will be able to use the dynamic component with the new name:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-1-1 name=__codelineno-1-1 href=#__codelineno-1-1></a><span class=cp>{%</span> <span class=k>component</span> <span class=s2>&quot;my_dynamic&quot;</span> <span class=k>is</span><span class=o>=</span><span class=nv>table_comp</span> <span class=nv>data</span><span class=o>=</span><span class=nv>table_data</span> <span class=nv>headers</span><span class=o>=</span><span class=nv>table_headers</span> <span class=cp>%}</span>
<a id=__codelineno-1-2 name=__codelineno-1-2 href=#__codelineno-1-2></a><span class=x> </span><span class=cp>{%</span> <span class=k>fill</span> <span class=s2>&quot;pagination&quot;</span> <span class=cp>%}</span>
<a id=__codelineno-1-3 name=__codelineno-1-3 href=#__codelineno-1-3></a><span class=x> </span><span class=cp>{%</span> <span class=k>component</span> <span class=s2>&quot;pagination&quot;</span> <span class=o>/</span> <span class=cp>%}</span>
<a id=__codelineno-1-4 name=__codelineno-1-4 href=#__codelineno-1-4></a><span class=x> </span><span class=cp>{%</span> <span class=k>endfill</span> <span class=cp>%}</span>
<a id=__codelineno-1-5 name=__codelineno-1-5 href=#__codelineno-1-5></a><span class=cp>{%</span> <span class=k>endcomponent</span> <span class=cp>%}</span>
</code></pre></div> </div> </div> <div class="doc doc-object doc-attribute"> <h3 id=django_components.ComponentsSettings.forbidden_static_files class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">forbidden_static_files</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.ComponentsSettings.forbidden_static_files class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>forbidden_static_files</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.List href=https://docs.python.org/3.12/library/typing.html#typing.List>List</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Union href=https://docs.python.org/3.12/library/typing.html#typing.Union>Union</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span> <span class=n><a class="autorefs autorefs-external" title=re.Pattern href=https://docs.python.org/3.12/library/re.html#re.Pattern>Pattern</a></span><span class=p>]]]</span> <span class=o>=</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>Deprecated. Use <a href=../settings/#django_components.app_settings.ComponentsSettings.static_files_forbidden><code>COMPONENTS.static_files_forbidden</code></a> instead.</p> </div> </div> <div class="doc doc-object doc-attribute"> <h3 id=django_components.ComponentsSettings.libraries class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">libraries</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.ComponentsSettings.libraries class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>libraries</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.List href=https://docs.python.org/3.12/library/typing.html#typing.List>List</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]]</span> <span class=o>=</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>Configure extra python modules that should be loaded.</p> <p>This may be useful if you are not using the <a href=../../concepts/fundamentals/autodiscovery>autodiscovery feature</a>, or you need to load components from non-standard locations. Thus you can have a structure of components that is independent from your apps.</p> <p>Expects a list of python module paths. Defaults to empty list.</p> <p><strong>Example:</strong></p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>COMPONENTS</span> <span class=o>=</span> <span class=n>ComponentsSettings</span><span class=p>(</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a> <span class=n>libraries</span><span class=o>=</span><span class=p>[</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a> <span class=s2>&quot;mysite.components.forms&quot;</span><span class=p>,</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a> <span class=s2>&quot;mysite.components.buttons&quot;</span><span class=p>,</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a> <span class=s2>&quot;mysite.components.cards&quot;</span><span class=p>,</span>
<a id=__codelineno-0-6 name=__codelineno-0-6 href=#__codelineno-0-6></a> <span class=p>],</span>
<a id=__codelineno-0-7 name=__codelineno-0-7 href=#__codelineno-0-7></a><span class=p>)</span>
</code></pre></div> <p>This would be the equivalent of importing these modules from within Django's <a href=https://docs.djangoproject.com/en/5.1/ref/applications/#django.apps.AppConfig.ready><code>AppConfig.ready()</code></a>:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-1-1 name=__codelineno-1-1 href=#__codelineno-1-1></a><span class=k>class</span> <span class=nc>MyAppConfig</span><span class=p>(</span><span class=n>AppConfig</span><span class=p>):</span>
<a id=__codelineno-1-2 name=__codelineno-1-2 href=#__codelineno-1-2></a> <span class=k>def</span> <span class=nf>ready</span><span class=p>(</span><span class=bp>self</span><span class=p>):</span>
<a id=__codelineno-1-3 name=__codelineno-1-3 href=#__codelineno-1-3></a> <span class=kn>import</span> <span class=s2>&quot;mysite.components.forms&quot;</span>
<a id=__codelineno-1-4 name=__codelineno-1-4 href=#__codelineno-1-4></a> <span class=kn>import</span> <span class=s2>&quot;mysite.components.buttons&quot;</span>
<a id=__codelineno-1-5 name=__codelineno-1-5 href=#__codelineno-1-5></a> <span class=kn>import</span> <span class=s2>&quot;mysite.components.cards&quot;</span>
</code></pre></div> <h4 id=django_components.ComponentsSettings.libraries--manually-loading-libraries>Manually loading libraries<a class=headerlink href=#django_components.ComponentsSettings.libraries--manually-loading-libraries title="Permanent link">¤</a></h4> <p>In the rare case that you need to manually trigger the import of libraries, you can use the <a href=../api/#django_components.import_libraries><code>import_libraries()</code></a> function:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-2-1 name=__codelineno-2-1 href=#__codelineno-2-1></a><span class=kn>from</span> <span class=nn>django_components</span> <span class=kn>import</span> <span class=n>import_libraries</span>
<a id=__codelineno-2-2 name=__codelineno-2-2 href=#__codelineno-2-2></a>
<a id=__codelineno-2-3 name=__codelineno-2-3 href=#__codelineno-2-3></a><span class=n>import_libraries</span><span class=p>()</span>
</code></pre></div> </div> </div> <div class="doc doc-object doc-attribute"> <h3 id=django_components.ComponentsSettings.multiline_tags class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">multiline_tags</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.ComponentsSettings.multiline_tags class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>multiline_tags</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/functions.html#bool>bool</a></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>Enable / disable <a href=../../concepts/fundamentals/template_tag_syntax#multiline-tags>multiline support for template tags</a>. If <code>True</code>, template tags like <code>{% component %}</code> or <code>{{ my_var }}</code> can span multiple lines.</p> <p>Defaults to <code>True</code>.</p> <p>Disable this setting if you are making custom modifications to Django's regular expression for parsing templates at <code>django.template.base.tag_re</code>.</p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>COMPONENTS</span> <span class=o>=</span> <span class=n>ComponentsSettings</span><span class=p>(</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a> <span class=n>multiline_tags</span><span class=o>=</span><span class=kc>False</span><span class=p>,</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=p>)</span>
</code></pre></div> </div> </div> <div class="doc doc-object doc-attribute"> <h3 id=django_components.ComponentsSettings.reload_on_file_change class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">reload_on_file_change</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.ComponentsSettings.reload_on_file_change class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>reload_on_file_change</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/functions.html#bool>bool</a></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>This is relevant if you are using the project structure where HTML, JS, CSS and Python are in separate files and nested in a directory.</p> <p>In this case you may notice that when you are running a development server, the server sometimes does not reload when you change component files.</p> <p>Django's native <a href=https://stackoverflow.com/a/66023029/9788634>live reload</a> logic handles only Python files and HTML template files. It does NOT reload when other file types change or when template files are nested more than one level deep.</p> <p>The setting <code>reload_on_file_change</code> fixes this, reloading the dev server even when your component's HTML, JS, or CSS changes.</p> <p>If <code>True</code>, django_components configures Django to reload when files inside <a href=../settings/#django_components.app_settings.ComponentsSettings.dirs><code>COMPONENTS.dirs</code></a> or <a href=../settings/#django_components.app_settings.ComponentsSettings.app_dirs><code>COMPONENTS.app_dirs</code></a> change.</p> <p>See <a href=../../guides/setup/dev_server_setup/#reload-dev-server-on-component-file-changes>Reload dev server on component file changes</a>.</p> <p>Defaults to <code>False</code>.</p> <div class="admonition warning"> <p class=admonition-title>Warning</p> <p>This setting should be enabled only for the dev environment!</p> </div> </div> </div> <div class="doc doc-object doc-attribute"> <h3 id=django_components.ComponentsSettings.reload_on_template_change class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">reload_on_template_change</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.ComponentsSettings.reload_on_template_change class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>reload_on_template_change</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/functions.html#bool>bool</a></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>Deprecated. Use <a href=../settings/#django_components.app_settings.ComponentsSettings.reload_on_file_change><code>COMPONENTS.reload_on_file_change</code></a> instead.</p> </div> </div> <div class="doc doc-object doc-attribute"> <h3 id=django_components.ComponentsSettings.static_files_allowed class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">static_files_allowed</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.ComponentsSettings.static_files_allowed class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>static_files_allowed</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.List href=https://docs.python.org/3.12/library/typing.html#typing.List>List</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Union href=https://docs.python.org/3.12/library/typing.html#typing.Union>Union</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span> <span class=n><a class="autorefs autorefs-external" title=re.Pattern href=https://docs.python.org/3.12/library/re.html#re.Pattern>Pattern</a></span><span class=p>]]]</span> <span class=o>=</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>A list of file extensions (including the leading dot) that define which files within <a href=../settings/#django_components.app_settings.ComponentsSettings.dirs><code>COMPONENTS.dirs</code></a> or <a href=../settings/#django_components.app_settings.ComponentsSettings.app_dirs><code>COMPONENTS.app_dirs</code></a> are treated as <a href=https://docs.djangoproject.com/en/5.1/howto/static-files/ >static files</a>.</p> <p>If a file is matched against any of the patterns, it's considered a static file. Such files are collected when running <a href=https://docs.djangoproject.com/en/5.1/ref/contrib/staticfiles/#collectstatic><code>collectstatic</code></a>, and can be accessed under the <a href=https://docs.djangoproject.com/en/5.1/ref/settings/#static-url>static file endpoint</a>.</p> <p>You can also pass in compiled regexes (<a href=https://docs.python.org/3/library/re.html#re.Pattern><code>re.Pattern</code></a>) for more advanced patterns.</p> <p>By default, JS, CSS, and common image and font file formats are considered static files:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>COMPONENTS</span> <span class=o>=</span> <span class=n>ComponentsSettings</span><span class=p>(</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a> <span class=n>static_files_allowed</span><span class=o>=</span><span class=p>[</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a> <span class=s2>&quot;.css&quot;</span><span class=p>,</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a> <span class=s2>&quot;.js&quot;</span><span class=p>,</span> <span class=s2>&quot;.jsx&quot;</span><span class=p>,</span> <span class=s2>&quot;.ts&quot;</span><span class=p>,</span> <span class=s2>&quot;.tsx&quot;</span><span class=p>,</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a> <span class=c1># Images</span>
<a id=__codelineno-0-6 name=__codelineno-0-6 href=#__codelineno-0-6></a> <span class=s2>&quot;.apng&quot;</span><span class=p>,</span> <span class=s2>&quot;.png&quot;</span><span class=p>,</span> <span class=s2>&quot;.avif&quot;</span><span class=p>,</span> <span class=s2>&quot;.gif&quot;</span><span class=p>,</span> <span class=s2>&quot;.jpg&quot;</span><span class=p>,</span>
<a id=__codelineno-0-7 name=__codelineno-0-7 href=#__codelineno-0-7></a> <span class=s2>&quot;.jpeg&quot;</span><span class=p>,</span> <span class=s2>&quot;.jfif&quot;</span><span class=p>,</span> <span class=s2>&quot;.pjpeg&quot;</span><span class=p>,</span> <span class=s2>&quot;.pjp&quot;</span><span class=p>,</span> <span class=s2>&quot;.svg&quot;</span><span class=p>,</span>
<a id=__codelineno-0-8 name=__codelineno-0-8 href=#__codelineno-0-8></a> <span class=s2>&quot;.webp&quot;</span><span class=p>,</span> <span class=s2>&quot;.bmp&quot;</span><span class=p>,</span> <span class=s2>&quot;.ico&quot;</span><span class=p>,</span> <span class=s2>&quot;.cur&quot;</span><span class=p>,</span> <span class=s2>&quot;.tif&quot;</span><span class=p>,</span> <span class=s2>&quot;.tiff&quot;</span><span class=p>,</span>
<a id=__codelineno-0-9 name=__codelineno-0-9 href=#__codelineno-0-9></a> <span class=c1># Fonts</span>
<a id=__codelineno-0-10 name=__codelineno-0-10 href=#__codelineno-0-10></a> <span class=s2>&quot;.eot&quot;</span><span class=p>,</span> <span class=s2>&quot;.ttf&quot;</span><span class=p>,</span> <span class=s2>&quot;.woff&quot;</span><span class=p>,</span> <span class=s2>&quot;.otf&quot;</span><span class=p>,</span> <span class=s2>&quot;.svg&quot;</span><span class=p>,</span>
<a id=__codelineno-0-11 name=__codelineno-0-11 href=#__codelineno-0-11></a> <span class=p>],</span>
<a id=__codelineno-0-12 name=__codelineno-0-12 href=#__codelineno-0-12></a><span class=p>)</span>
</code></pre></div> <div class="admonition warning"> <p class=admonition-title>Warning</p> <p>Exposing your Python files can be a security vulnerability. See <a href=../../overview/security_notes>Security notes</a>.</p> </div> </div> </div> <div class="doc doc-object doc-attribute"> <h3 id=django_components.ComponentsSettings.static_files_forbidden class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">static_files_forbidden</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.ComponentsSettings.static_files_forbidden class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>static_files_forbidden</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.List href=https://docs.python.org/3.12/library/typing.html#typing.List>List</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Union href=https://docs.python.org/3.12/library/typing.html#typing.Union>Union</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span> <span class=n><a class="autorefs autorefs-external" title=re.Pattern href=https://docs.python.org/3.12/library/re.html#re.Pattern>Pattern</a></span><span class=p>]]]</span> <span class=o>=</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>A list of file extensions (including the leading dot) that define which files within <a href=../settings/#django_components.app_settings.ComponentsSettings.dirs><code>COMPONENTS.dirs</code></a> or <a href=../settings/#django_components.app_settings.ComponentsSettings.app_dirs><code>COMPONENTS.app_dirs</code></a> will NEVER be treated as <a href=https://docs.djangoproject.com/en/5.1/howto/static-files/ >static files</a>.</p> <p>If a file is matched against any of the patterns, it will never be considered a static file, even if the file matches a pattern in <a href=../settings/#django_components.app_settings.ComponentsSettings.static_files_allowed><code>static_files_allowed</code></a>.</p> <p>Use this setting together with <a href=../settings/#django_components.app_settings.ComponentsSettings.static_files_allowed><code>static_files_allowed</code></a> for a fine control over what file types will be exposed.</p> <p>You can also pass in compiled regexes (<a href=https://docs.python.org/3/library/re.html#re.Pattern><code>re.Pattern</code></a>) for more advanced patterns.</p> <p>By default, any HTML and Python are considered NOT static files:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>COMPONENTS</span> <span class=o>=</span> <span class=n>ComponentsSettings</span><span class=p>(</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a> <span class=n>static_files_forbidden</span><span class=o>=</span><span class=p>[</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a> <span class=s2>&quot;.html&quot;</span><span class=p>,</span> <span class=s2>&quot;.django&quot;</span><span class=p>,</span> <span class=s2>&quot;.dj&quot;</span><span class=p>,</span> <span class=s2>&quot;.tpl&quot;</span><span class=p>,</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a> <span class=c1># Python files</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a> <span class=s2>&quot;.py&quot;</span><span class=p>,</span> <span class=s2>&quot;.pyc&quot;</span><span class=p>,</span>
<a id=__codelineno-0-6 name=__codelineno-0-6 href=#__codelineno-0-6></a> <span class=p>],</span>
<a id=__codelineno-0-7 name=__codelineno-0-7 href=#__codelineno-0-7></a><span class=p>)</span>
</code></pre></div> <div class="admonition warning"> <p class=admonition-title>Warning</p> <p>Exposing your Python files can be a security vulnerability. See <a href=../../overview/security_notes>Security notes</a>.</p> </div> </div> </div> <div class="doc doc-object doc-attribute"> <h3 id=django_components.ComponentsSettings.tag_formatter class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">tag_formatter</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.ComponentsSettings.tag_formatter class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>tag_formatter</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Union href=https://docs.python.org/3.12/library/typing.html#typing.Union>Union</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-internal" title=django_components.tag_formatter.TagFormatterABC href=#django_components.tag_formatter.TagFormatterABC>TagFormatterABC</a></span><span class=p>,</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]]</span> <span class=o>=</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>Configure what syntax is used inside Django templates to render components. See the <a href=../tag_formatters>available tag formatters</a>.</p> <p>Defaults to <code>"django_components.component_formatter"</code>.</p> <p>Learn more about <a href=../../concepts/advanced/tag_formatter>Customizing component tags with TagFormatter</a>.</p> <p>Can be set either as direct reference:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=kn>from</span> <span class=nn>django_components</span> <span class=kn>import</span> <span class=n>component_formatter</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=n>COMPONENTS</span> <span class=o>=</span> <span class=n>ComponentsSettings</span><span class=p>(</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a> <span class=s2>&quot;tag_formatter&quot;</span><span class=p>:</span> <span class=n>component_formatter</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a><span class=p>)</span>
</code></pre></div> <p>Or as an import string;</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>COMPONENTS</span> <span class=o>=</span> <span class=n>ComponentsSettings</span><span class=p>(</span>
<a id=__codelineno-1-2 name=__codelineno-1-2 href=#__codelineno-1-2></a> <span class=s2>&quot;tag_formatter&quot;</span><span class=p>:</span> <span class=s2>&quot;django_components.component_formatter&quot;</span>
<a id=__codelineno-1-3 name=__codelineno-1-3 href=#__codelineno-1-3></a><span class=p>)</span>
</code></pre></div> <p><strong>Examples:</strong></p> <ul> <li> <p><code>"django_components.component_formatter"</code></p> <p>Set</p> <div class=highlight><pre><span></span><code><a id=__codelineno-2-1 name=__codelineno-2-1 href=#__codelineno-2-1></a><span class=n>COMPONENTS</span> <span class=o>=</span> <span class=n>ComponentsSettings</span><span class=p>(</span>
<a id=__codelineno-2-2 name=__codelineno-2-2 href=#__codelineno-2-2></a> <span class=s2>&quot;tag_formatter&quot;</span><span class=p>:</span> <span class=s2>&quot;django_components.component_formatter&quot;</span>
<a id=__codelineno-2-3 name=__codelineno-2-3 href=#__codelineno-2-3></a><span class=p>)</span>
</code></pre></div> <p>To write components like this:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-3-1 name=__codelineno-3-1 href=#__codelineno-3-1></a><span class=cp>{%</span> <span class=k>component</span> <span class=s2>&quot;button&quot;</span> <span class=nv>href</span><span class=o>=</span><span class=s2>&quot;...&quot;</span> <span class=cp>%}</span>
<a id=__codelineno-3-2 name=__codelineno-3-2 href=#__codelineno-3-2></a><span class=x> Click me!</span>
<a id=__codelineno-3-3 name=__codelineno-3-3 href=#__codelineno-3-3></a><span class=cp>{%</span> <span class=k>endcomponent</span> <span class=cp>%}</span>
</code></pre></div> </li> <li> <p><code>django_components.component_shorthand_formatter</code></p> <p>Set</p> <div class=highlight><pre><span></span><code><a id=__codelineno-4-1 name=__codelineno-4-1 href=#__codelineno-4-1></a><span class=n>COMPONENTS</span> <span class=o>=</span> <span class=n>ComponentsSettings</span><span class=p>(</span>
<a id=__codelineno-4-2 name=__codelineno-4-2 href=#__codelineno-4-2></a> <span class=s2>&quot;tag_formatter&quot;</span><span class=p>:</span> <span class=s2>&quot;django_components.component_shorthand_formatter&quot;</span>
<a id=__codelineno-4-3 name=__codelineno-4-3 href=#__codelineno-4-3></a><span class=p>)</span>
</code></pre></div> <p>To write components like this:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-5-1 name=__codelineno-5-1 href=#__codelineno-5-1></a><span class=cp>{%</span> <span class=k>button</span> <span class=nv>href</span><span class=o>=</span><span class=s2>&quot;...&quot;</span> <span class=cp>%}</span>
<a id=__codelineno-5-2 name=__codelineno-5-2 href=#__codelineno-5-2></a><span class=x> Click me!</span>
<a id=__codelineno-5-3 name=__codelineno-5-3 href=#__codelineno-5-3></a><span class=cp>{%</span> <span class=k>endbutton</span> <span class=cp>%}</span>
</code></pre></div> </li> </ul> </div> </div> <div class="doc doc-object doc-attribute"> <h3 id=django_components.ComponentsSettings.template_cache_size class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">template_cache_size</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.ComponentsSettings.template_cache_size class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>template_cache_size</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/functions.html#int>int</a></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>Configure the maximum amount of Django templates to be cached.</p> <p>Defaults to <code>128</code>.</p> <p>Each time a <a href=https://docs.djangoproject.com/en/5.1/ref/templates/api/#django.template.Template>Django template</a> is rendered, it is cached to a global in-memory cache (using Python's <a href=https://docs.python.org/3/library/functools.html#functools.lru_cache><code>lru_cache</code></a> decorator). This speeds up the next render of the component. As the same component is often used many times on the same page, these savings add up.</p> <p>By default the cache holds 128 component templates in memory, which should be enough for most sites. But if you have a lot of components, or if you are overriding <a href=../api#django_components.Component.get_template><code>Component.get_template()</code></a> to render many dynamic templates, you can increase this number.</p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>COMPONENTS</span> <span class=o>=</span> <span class=n>ComponentsSettings</span><span class=p>(</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a> <span class=n>template_cache_size</span><span class=o>=</span><span class=mi>256</span><span class=p>,</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=p>)</span>
</code></pre></div> <p>To remove the cache limit altogether and cache everything, set <code>template_cache_size</code> to <code>None</code>.</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>COMPONENTS</span> <span class=o>=</span> <span class=n>ComponentsSettings</span><span class=p>(</span>
<a id=__codelineno-1-2 name=__codelineno-1-2 href=#__codelineno-1-2></a> <span class=n>template_cache_size</span><span class=o>=</span><span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-1-3 name=__codelineno-1-3 href=#__codelineno-1-3></a><span class=p>)</span>
</code></pre></div> <p>If you want to add templates to the cache yourself, you can use <a href=../api/#django_components.cached_template><code>cached_template()</code></a>:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-2-1 name=__codelineno-2-1 href=#__codelineno-2-1></a><span class=kn>from</span> <span class=nn>django_components</span> <span class=kn>import</span> <span class=n>cached_template</span>
<a id=__codelineno-2-2 name=__codelineno-2-2 href=#__codelineno-2-2></a>
<a id=__codelineno-2-3 name=__codelineno-2-3 href=#__codelineno-2-3></a><span class=n>cached_template</span><span class=p>(</span><span class=s2>&quot;Variable: {{ variable }}&quot;</span><span class=p>)</span>
<a id=__codelineno-2-4 name=__codelineno-2-4 href=#__codelineno-2-4></a>
<a id=__codelineno-2-5 name=__codelineno-2-5 href=#__codelineno-2-5></a><span class=c1># You can optionally specify Template class, and other Template inputs:</span>
<a id=__codelineno-2-6 name=__codelineno-2-6 href=#__codelineno-2-6></a><span class=k>class</span> <span class=nc>MyTemplate</span><span class=p>(</span><span class=n>Template</span><span class=p>):</span>
<a id=__codelineno-2-7 name=__codelineno-2-7 href=#__codelineno-2-7></a> <span class=k>pass</span>
<a id=__codelineno-2-8 name=__codelineno-2-8 href=#__codelineno-2-8></a>
<a id=__codelineno-2-9 name=__codelineno-2-9 href=#__codelineno-2-9></a><span class=n>cached_template</span><span class=p>(</span>
<a id=__codelineno-2-10 name=__codelineno-2-10 href=#__codelineno-2-10></a> <span class=s2>&quot;Variable: {{ variable }}&quot;</span><span class=p>,</span>
<a id=__codelineno-2-11 name=__codelineno-2-11 href=#__codelineno-2-11></a> <span class=n>template_cls</span><span class=o>=</span><span class=n>MyTemplate</span><span class=p>,</span>
<a id=__codelineno-2-12 name=__codelineno-2-12 href=#__codelineno-2-12></a> <span class=n>name</span><span class=o>=...</span>
<a id=__codelineno-2-13 name=__codelineno-2-13 href=#__codelineno-2-13></a> <span class=n>origin</span><span class=o>=...</span>
<a id=__codelineno-2-14 name=__codelineno-2-14 href=#__codelineno-2-14></a> <span class=n>engine</span><span class=o>=...</span>
<a id=__codelineno-2-15 name=__codelineno-2-15 href=#__codelineno-2-15></a><span class=p>)</span>
</code></pre></div> </div> </div> </div> </div> </div> <div class="doc doc-object doc-class"> <h2 id=django_components.ContextBehavior class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-class"></code> <span class="doc doc-object-name doc-class-name">ContextBehavior</span> <a href=#django_components.ContextBehavior class=headerlink title="Permanent link">¤</a></h2> <div class="doc doc-contents "> <p class="doc doc-class-bases"> Bases: <code><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></code>, <code><a class="autorefs autorefs-external" title=enum.Enum href=https://docs.python.org/3.12/library/enum.html#enum.Enum>Enum</a></code></p> <p>Configure how (and whether) the context is passed to the component fills and what variables are available inside the <a href=../template_tags#fill><code>{% fill %}</code></a> tags.</p> <p>Also see <a href=../../concepts/fundamentals/component_context_scope#context-behavior>Component context and scope</a>.</p> <p><strong>Options:</strong></p> <ul> <li><code>django</code>: With this setting, component fills behave as usual Django tags.</li> <li><code>isolated</code>: This setting makes the component fills behave similar to Vue or React.</li> </ul> <p><span class=doc-section-title>Attributes:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.ContextBehavior.DJANGO href=#django_components.ContextBehavior.DJANGO>DJANGO</a></code></b> <div class=doc-md-description> <p>With this setting, component fills behave as usual Django tags.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.ContextBehavior.ISOLATED href=#django_components.ContextBehavior.ISOLATED>ISOLATED</a></code></b> <div class=doc-md-description> <p>This setting makes the component fills behave similar to Vue or React, where</p> </div> </li> </ul> <div class="doc doc-children"> <div class="doc doc-object doc-attribute"> <h3 id=django_components.ContextBehavior.DJANGO class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">DJANGO</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.ContextBehavior.DJANGO class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>DJANGO</span> <span class=o>=</span> <span class=s1>&#39;django&#39;</span>
</code></pre></div> <div class="doc doc-contents "> <p>With this setting, component fills behave as usual Django tags. That is, they enrich the context, and pass it along.</p> <ol> <li>Component fills use the context of the component they are within.</li> <li>Variables from <a href=../api#django_components.Component.get_context_data><code>Component.get_context_data()</code></a> are available to the component fill.</li> </ol> <p><strong>Example:</strong></p> <p>Given this template <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=cp>{%</span> <span class=k>with</span> <span class=nv>cheese</span><span class=o>=</span><span class=s2>&quot;feta&quot;</span> <span class=cp>%}</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a><span class=x> </span><span class=cp>{%</span> <span class=k>component</span> <span class=s1>&#39;my_comp&#39;</span> <span class=cp>%}</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=x> </span><span class=cp>{{</span> <span class=nv>my_var</span> <span class=cp>}}</span><span class=x> # my_var</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a><span class=x> </span><span class=cp>{{</span> <span class=nv>cheese</span> <span class=cp>}}</span><span class=x> # cheese</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a><span class=x> </span><span class=cp>{%</span> <span class=k>endcomponent</span> <span class=cp>%}</span>
<a id=__codelineno-0-6 name=__codelineno-0-6 href=#__codelineno-0-6></a><span class=cp>{%</span> <span class=k>endwith</span> <span class=cp>%}</span>
</code></pre></div></p> <p>and this context returned from the <code>Component.get_context_data()</code> method <div class=highlight><pre><span></span><code><a id=__codelineno-1-1 name=__codelineno-1-1 href=#__codelineno-1-1></a><span class=p>{</span> <span class=s2>&quot;my_var&quot;</span><span class=p>:</span> <span class=mi>123</span> <span class=p>}</span>
</code></pre></div></p> <p>Then if component "my_comp" defines context <div class=highlight><pre><span></span><code><a id=__codelineno-2-1 name=__codelineno-2-1 href=#__codelineno-2-1></a><span class=p>{</span> <span class=s2>&quot;my_var&quot;</span><span class=p>:</span> <span class=mi>456</span> <span class=p>}</span>
</code></pre></div></p> <p>Then this will render: <div class=highlight><pre><span></span><code><a id=__codelineno-3-1 name=__codelineno-3-1 href=#__codelineno-3-1></a><span class=x>456 # my_var</span>
<a id=__codelineno-3-2 name=__codelineno-3-2 href=#__codelineno-3-2></a><span class=x>feta # cheese</span>
</code></pre></div></p> <p>Because "my_comp" overrides the variable "my_var", so <code>{{ my_var }}</code> equals <code>456</code>.</p> <p>And variable "cheese" will equal <code>feta</code>, because the fill CAN access the current context.</p> </div> </div> <div class="doc doc-object doc-attribute"> <h3 id=django_components.ContextBehavior.ISOLATED class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">ISOLATED</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.ContextBehavior.ISOLATED class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>ISOLATED</span> <span class=o>=</span> <span class=s1>&#39;isolated&#39;</span>
</code></pre></div> <div class="doc doc-contents "> <p>This setting makes the component fills behave similar to Vue or React, where the fills use EXCLUSIVELY the context variables defined in <a href=../api#django_components.Component.get_context_data><code>Component.get_context_data()</code></a>.</p> <p><strong>Example:</strong></p> <p>Given this template <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=cp>{%</span> <span class=k>with</span> <span class=nv>cheese</span><span class=o>=</span><span class=s2>&quot;feta&quot;</span> <span class=cp>%}</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a><span class=x> </span><span class=cp>{%</span> <span class=k>component</span> <span class=s1>&#39;my_comp&#39;</span> <span class=cp>%}</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=x> </span><span class=cp>{{</span> <span class=nv>my_var</span> <span class=cp>}}</span><span class=x> # my_var</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a><span class=x> </span><span class=cp>{{</span> <span class=nv>cheese</span> <span class=cp>}}</span><span class=x> # cheese</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a><span class=x> </span><span class=cp>{%</span> <span class=k>endcomponent</span> <span class=cp>%}</span>
<a id=__codelineno-0-6 name=__codelineno-0-6 href=#__codelineno-0-6></a><span class=cp>{%</span> <span class=k>endwith</span> <span class=cp>%}</span>
</code></pre></div></p> <p>and this context returned from the <code>get_context_data()</code> method <div class=highlight><pre><span></span><code><a id=__codelineno-1-1 name=__codelineno-1-1 href=#__codelineno-1-1></a><span class=p>{</span> <span class=s2>&quot;my_var&quot;</span><span class=p>:</span> <span class=mi>123</span> <span class=p>}</span>
</code></pre></div></p> <p>Then if component "my_comp" defines context <div class=highlight><pre><span></span><code><a id=__codelineno-2-1 name=__codelineno-2-1 href=#__codelineno-2-1></a><span class=p>{</span> <span class=s2>&quot;my_var&quot;</span><span class=p>:</span> <span class=mi>456</span> <span class=p>}</span>
</code></pre></div></p> <p>Then this will render: <div class=highlight><pre><span></span><code><a id=__codelineno-3-1 name=__codelineno-3-1 href=#__codelineno-3-1></a><span class=x>123 # my_var</span>
<a id=__codelineno-3-2 name=__codelineno-3-2 href=#__codelineno-3-2></a><span class=x> # cheese</span>
</code></pre></div></p> <p>Because both variables "my_var" and "cheese" are taken from the root context. Since "cheese" is not defined in root context, it's empty.</p> </div> </div> </div> </div> </div> <div class="doc doc-object doc-class"> <h2 id=django_components.DynamicComponent class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-class"></code> <span class="doc doc-object-name doc-class-name">DynamicComponent</span> <a href=#django_components.DynamicComponent class=headerlink title="Permanent link">¤</a></h2> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>DynamicComponent</span><span class=p>(</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a> <span class=n>registered_name</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a> <span class=n>component_id</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a> <span class=n>outer_context</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><span title=django.template.context.Context>Context</span></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a> <span class=n>registry</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-internal" title=django_components.component_registry.ComponentRegistry href=#django_components.component_registry.ComponentRegistry>ComponentRegistry</a></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-6 name=__codelineno-0-6 href=#__codelineno-0-6></a><span class=p>)</span>
</code></pre></div> <div class="doc doc-contents "> <p class="doc doc-class-bases"> Bases: <code><a class="autorefs autorefs-internal" title=django_components.Component href=#django_components.Component>Component</a></code></p> <p>This component is given a registered name or a reference to another component, and behaves as if the other component was in its place.</p> <p>The args, kwargs, and slot fills are all passed down to the underlying component.</p> <p><span class=doc-section-title>Parameters:</span></p> <ul> <li class="doc-section-item field-body"> <b><code>is</code></b> (<code><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a> | <a class="autorefs autorefs-external" title=typing.Type href=https://docs.python.org/3.12/library/typing.html#typing.Type>Type</a>[<a class="autorefs autorefs-internal" title=django_components.Component href=#django_components.Component>Component</a>]</code>) <div class=doc-md-description> <p>Component that should be rendered. Either a registered name of a component, or a <a href=../api#django_components.Component>Component</a> class directly. Required.</p> </div> </li> <li class="doc-section-item field-body"> <b><code>registry</code></b> (<code><a class="autorefs autorefs-internal" title=django_components.ComponentRegistry href=#django_components.ComponentRegistry>ComponentRegistry</a></code>, default: <code>None</code> ) <div class=doc-md-description> <p>Specify the <a href=../api#django_components.ComponentRegistry>registry</a> to search for the registered name. If omitted, all registries are searched until the first match.</p> </div> </li> <li class="doc-section-item field-body"> <b><code>*args</code></b> <div class=doc-md-description> <p>Additional data passed to the component.</p> </div> </li> <li class="doc-section-item field-body"> <b><code>**kwargs</code></b> <div class=doc-md-description> <p>Additional data passed to the component.</p> </div> </li> </ul> <p><strong>Slots:</strong></p> <ul> <li>Any slots, depending on the actual component.</li> </ul> <p><strong>Examples:</strong></p> <p>Django <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=cp>{%</span> <span class=k>component</span> <span class=s2>&quot;dynamic&quot;</span> <span class=k>is</span><span class=o>=</span><span class=nv>table_comp</span> <span class=nv>data</span><span class=o>=</span><span class=nv>table_data</span> <span class=nv>headers</span><span class=o>=</span><span class=nv>table_headers</span> <span class=cp>%}</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a><span class=x> </span><span class=cp>{%</span> <span class=k>fill</span> <span class=s2>&quot;pagination&quot;</span> <span class=cp>%}</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=x> </span><span class=cp>{%</span> <span class=k>component</span> <span class=s2>&quot;pagination&quot;</span> <span class=o>/</span> <span class=cp>%}</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a><span class=x> </span><span class=cp>{%</span> <span class=k>endfill</span> <span class=cp>%}</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a><span class=cp>{%</span> <span class=k>endcomponent</span> <span class=cp>%}</span>
</code></pre></div></p> <p>Python <div class=highlight><pre><span></span><code><a id=__codelineno-1-1 name=__codelineno-1-1 href=#__codelineno-1-1></a><span class=kn>from</span> <span class=nn>django_components</span> <span class=kn>import</span> <span class=n>DynamicComponent</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=n>DynamicComponent</span><span class=o>.</span><span class=n>render</span><span class=p>(</span>
<a id=__codelineno-1-4 name=__codelineno-1-4 href=#__codelineno-1-4></a> <span class=n>kwargs</span><span class=o>=</span><span class=p>{</span>
<a id=__codelineno-1-5 name=__codelineno-1-5 href=#__codelineno-1-5></a> <span class=s2>&quot;is&quot;</span><span class=p>:</span> <span class=n>table_comp</span><span class=p>,</span>
<a id=__codelineno-1-6 name=__codelineno-1-6 href=#__codelineno-1-6></a> <span class=s2>&quot;data&quot;</span><span class=p>:</span> <span class=n>table_data</span><span class=p>,</span>
<a id=__codelineno-1-7 name=__codelineno-1-7 href=#__codelineno-1-7></a> <span class=s2>&quot;headers&quot;</span><span class=p>:</span> <span class=n>table_headers</span><span class=p>,</span>
<a id=__codelineno-1-8 name=__codelineno-1-8 href=#__codelineno-1-8></a> <span class=p>},</span>
<a id=__codelineno-1-9 name=__codelineno-1-9 href=#__codelineno-1-9></a> <span class=n>slots</span><span class=o>=</span><span class=p>{</span>
<a id=__codelineno-1-10 name=__codelineno-1-10 href=#__codelineno-1-10></a> <span class=s2>&quot;pagination&quot;</span><span class=p>:</span> <span class=n>PaginationComponent</span><span class=o>.</span><span class=n>render</span><span class=p>(</span>
<a id=__codelineno-1-11 name=__codelineno-1-11 href=#__codelineno-1-11></a> <span class=n>render_dependencies</span><span class=o>=</span><span class=kc>False</span><span class=p>,</span>
<a id=__codelineno-1-12 name=__codelineno-1-12 href=#__codelineno-1-12></a> <span class=p>),</span>
<a id=__codelineno-1-13 name=__codelineno-1-13 href=#__codelineno-1-13></a> <span class=p>},</span>
<a id=__codelineno-1-14 name=__codelineno-1-14 href=#__codelineno-1-14></a><span class=p>)</span>
</code></pre></div></p> <h3 id=django_components.DynamicComponent--use-cases>Use cases<a class=headerlink href=#django_components.DynamicComponent--use-cases title="Permanent link">¤</a></h3> <p>Dynamic components are suitable if you are writing something like a form component. You may design it such that users give you a list of input types, and you render components depending on the input types.</p> <p>While you could handle this with a series of if / else statements, that's not an extensible approach. Instead, you can use the dynamic component in place of normal components.</p> <h3 id=django_components.DynamicComponent--component-name>Component name<a class=headerlink href=#django_components.DynamicComponent--component-name title="Permanent link">¤</a></h3> <p>By default, the dynamic component is registered under the name <code>"dynamic"</code>. In case of a conflict, you can set the <a href=../settings#django_components.app_settings.ComponentsSettings.dynamic_component_name><code>COMPONENTS.dynamic_component_name</code></a> setting to change the name used for the dynamic components.</p> <div class=highlight><pre><span></span><code><a id=__codelineno-2-1 name=__codelineno-2-1 href=#__codelineno-2-1></a><span class=c1># settings.py</span>
<a id=__codelineno-2-2 name=__codelineno-2-2 href=#__codelineno-2-2></a><span class=n>COMPONENTS</span> <span class=o>=</span> <span class=n>ComponentsSettings</span><span class=p>(</span>
<a id=__codelineno-2-3 name=__codelineno-2-3 href=#__codelineno-2-3></a> <span class=n>dynamic_component_name</span><span class=o>=</span><span class=s2>&quot;my_dynamic&quot;</span><span class=p>,</span>
<a id=__codelineno-2-4 name=__codelineno-2-4 href=#__codelineno-2-4></a><span class=p>)</span>
</code></pre></div> <p>After which you will be able to use the dynamic component with the new name: <div class=highlight><pre><span></span><code><a id=__codelineno-3-1 name=__codelineno-3-1 href=#__codelineno-3-1></a><span class=cp>{%</span> <span class=k>component</span> <span class=s2>&quot;my_dynamic&quot;</span> <span class=k>is</span><span class=o>=</span><span class=nv>table_comp</span> <span class=nv>data</span><span class=o>=</span><span class=nv>table_data</span> <span class=nv>headers</span><span class=o>=</span><span class=nv>table_headers</span> <span class=cp>%}</span>
<a id=__codelineno-3-2 name=__codelineno-3-2 href=#__codelineno-3-2></a><span class=x> </span><span class=cp>{%</span> <span class=k>fill</span> <span class=s2>&quot;pagination&quot;</span> <span class=cp>%}</span>
<a id=__codelineno-3-3 name=__codelineno-3-3 href=#__codelineno-3-3></a><span class=x> </span><span class=cp>{%</span> <span class=k>component</span> <span class=s2>&quot;pagination&quot;</span> <span class=o>/</span> <span class=cp>%}</span>
<a id=__codelineno-3-4 name=__codelineno-3-4 href=#__codelineno-3-4></a><span class=x> </span><span class=cp>{%</span> <span class=k>endfill</span> <span class=cp>%}</span>
<a id=__codelineno-3-5 name=__codelineno-3-5 href=#__codelineno-3-5></a><span class=cp>{%</span> <span class=k>endcomponent</span> <span class=cp>%}</span>
</code></pre></div></p> <p><span class=doc-section-title>Methods:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.DynamicComponent.as_view href=#django_components.DynamicComponent.as_view>as_view</a></code></b> <div class=doc-md-description> <p>Shortcut for calling <code>Component.View.as_view</code> and passing component instance to it.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.DynamicComponent.get_template href=#django_components.DynamicComponent.get_template>get_template</a></code></b> <div class=doc-md-description> <p>Inlined Django template associated with this component. Can be a plain string or a Template instance.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.DynamicComponent.get_template_name href=#django_components.DynamicComponent.get_template_name>get_template_name</a></code></b> <div class=doc-md-description> <p>Filepath to the Django template associated with this component.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.DynamicComponent.inject href=#django_components.DynamicComponent.inject>inject</a></code></b> <div class=doc-md-description> <p>Use this method to retrieve the data that was passed to a <code>{% provide %}</code> tag</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.DynamicComponent.on_render_after href=#django_components.DynamicComponent.on_render_after>on_render_after</a></code></b> <div class=doc-md-description> <p>Hook that runs just after the component's template was rendered.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.DynamicComponent.on_render_before href=#django_components.DynamicComponent.on_render_before>on_render_before</a></code></b> <div class=doc-md-description> <p>Hook that runs just before the component's template is rendered.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.DynamicComponent.render href=#django_components.DynamicComponent.render>render</a></code></b> <div class=doc-md-description> <p>Render the component into a string.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.DynamicComponent.render_to_response href=#django_components.DynamicComponent.render_to_response>render_to_response</a></code></b> <div class=doc-md-description> <p>Render the component and wrap the content in the response class.</p> </div> </li> </ul> <p><span class=doc-section-title>Attributes:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.DynamicComponent.Media href=#django_components.DynamicComponent.Media>Media</a></code></b> <div class=doc-md-description> <p>Defines JS and CSS media files associated with this component.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.DynamicComponent.css href=#django_components.DynamicComponent.css>css</a></code></b> (<code><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>]</code>) <div class=doc-md-description> <p>Inlined CSS associated with this component.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.DynamicComponent.input href=#django_components.DynamicComponent.input>input</a></code></b> (<code><span title=django_components.component.RenderInput>RenderInput</span>[<span title=django_components.component.ArgsType>ArgsType</span>, <span title=django_components.component.KwargsType>KwargsType</span>, <span title=django_components.component.SlotsType>SlotsType</span>]</code>) <div class=doc-md-description> <p>Input holds the data (like arg, kwargs, slots) that were passsed to</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.DynamicComponent.is_filled href=#django_components.DynamicComponent.is_filled>is_filled</a></code></b> (<code><a class="autorefs autorefs-internal" title=django_components.slots.SlotIsFilled href=#django_components.slots.SlotIsFilled>SlotIsFilled</a></code>) <div class=doc-md-description> <p>Dictionary describing which slots have or have not been filled.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.DynamicComponent.js href=#django_components.DynamicComponent.js>js</a></code></b> (<code><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>]</code>) <div class=doc-md-description> <p>Inlined JS associated with this component.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.DynamicComponent.media href=#django_components.DynamicComponent.media>media</a></code></b> (<code><a class="autorefs autorefs-internal" title=django_components.component.Component.Media href=#django_components.component.Component.Media>Media</a></code>) <div class=doc-md-description> <p>Normalized definition of JS and CSS media files associated with this component.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.DynamicComponent.response_class href=#django_components.DynamicComponent.response_class>response_class</a></code></b> <div class=doc-md-description> <p>This allows to configure what class is used to generate response from <code>render_to_response</code></p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.DynamicComponent.template_name href=#django_components.DynamicComponent.template_name>template_name</a></code></b> (<code><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>]</code>) <div class=doc-md-description> <p>Filepath to the Django template associated with this component.</p> </div> </li> </ul> <details class=quote> <summary>Source code in <code>src/django_components/component.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-287>287</a></span>
<span class=normal><a href=#__codelineno-0-288>288</a></span>
<span class=normal><a href=#__codelineno-0-289>289</a></span>
<span class=normal><a href=#__codelineno-0-290>290</a></span>
<span class=normal><a href=#__codelineno-0-291>291</a></span>
<span class=normal><a href=#__codelineno-0-292>292</a></span>
<span class=normal><a href=#__codelineno-0-293>293</a></span>
<span class=normal><a href=#__codelineno-0-294>294</a></span>
<span class=normal><a href=#__codelineno-0-295>295</a></span>
<span class=normal><a href=#__codelineno-0-296>296</a></span>
<span class=normal><a href=#__codelineno-0-297>297</a></span>
<span class=normal><a href=#__codelineno-0-298>298</a></span>
<span class=normal><a href=#__codelineno-0-299>299</a></span>
<span class=normal><a href=#__codelineno-0-300>300</a></span>
<span class=normal><a href=#__codelineno-0-301>301</a></span>
<span class=normal><a href=#__codelineno-0-302>302</a></span>
<span class=normal><a href=#__codelineno-0-303>303</a></span>
<span class=normal><a href=#__codelineno-0-304>304</a></span>
<span class=normal><a href=#__codelineno-0-305>305</a></span>
<span class=normal><a href=#__codelineno-0-306>306</a></span>
<span class=normal><a href=#__codelineno-0-307>307</a></span>
<span class=normal><a href=#__codelineno-0-308>308</a></span>
<span class=normal><a href=#__codelineno-0-309>309</a></span>
<span class=normal><a href=#__codelineno-0-310>310</a></span>
<span class=normal><a href=#__codelineno-0-311>311</a></span>
<span class=normal><a href=#__codelineno-0-312>312</a></span>
<span class=normal><a href=#__codelineno-0-313>313</a></span>
<span class=normal><a href=#__codelineno-0-314>314</a></span>
<span class=normal><a href=#__codelineno-0-315>315</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-287 name=__codelineno-0-287></a><span class=k>def</span> <span class=fm>__init__</span><span class=p>(</span>
<a id=__codelineno-0-288 name=__codelineno-0-288></a> <span class=bp>self</span><span class=p>,</span>
<a id=__codelineno-0-289 name=__codelineno-0-289></a> <span class=n>registered_name</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=nb>str</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-290 name=__codelineno-0-290></a> <span class=n>component_id</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=nb>str</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-291 name=__codelineno-0-291></a> <span class=n>outer_context</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>Context</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-292 name=__codelineno-0-292></a> <span class=n>registry</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>ComponentRegistry</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span> <span class=c1># noqa F811</span>
<a id=__codelineno-0-293 name=__codelineno-0-293></a><span class=p>):</span>
<a id=__codelineno-0-294 name=__codelineno-0-294></a> <span class=c1># When user first instantiates the component class before calling</span>
<a id=__codelineno-0-295 name=__codelineno-0-295></a> <span class=c1># `render` or `render_to_response`, then we want to allow the render</span>
<a id=__codelineno-0-296 name=__codelineno-0-296></a> <span class=c1># function to make use of the instantiated object.</span>
<a id=__codelineno-0-297 name=__codelineno-0-297></a> <span class=c1>#</span>
<a id=__codelineno-0-298 name=__codelineno-0-298></a> <span class=c1># So while `MyComp.render()` creates a new instance of MyComp internally,</span>
<a id=__codelineno-0-299 name=__codelineno-0-299></a> <span class=c1># if we do `MyComp(registered_name=&quot;abc&quot;).render()`, then we use the</span>
<a id=__codelineno-0-300 name=__codelineno-0-300></a> <span class=c1># already-instantiated object.</span>
<a id=__codelineno-0-301 name=__codelineno-0-301></a> <span class=c1>#</span>
<a id=__codelineno-0-302 name=__codelineno-0-302></a> <span class=c1># To achieve that, we want to re-assign the class methods as instance methods.</span>
<a id=__codelineno-0-303 name=__codelineno-0-303></a> <span class=c1># For that we have to &quot;unwrap&quot; the class methods via __func__.</span>
<a id=__codelineno-0-304 name=__codelineno-0-304></a> <span class=c1># See https://stackoverflow.com/a/76706399/9788634</span>
<a id=__codelineno-0-305 name=__codelineno-0-305></a> <span class=bp>self</span><span class=o>.</span><span class=n>render_to_response</span> <span class=o>=</span> <span class=n>types</span><span class=o>.</span><span class=n>MethodType</span><span class=p>(</span><span class=bp>self</span><span class=o>.</span><span class=vm>__class__</span><span class=o>.</span><span class=n>render_to_response</span><span class=o>.</span><span class=vm>__func__</span><span class=p>,</span> <span class=bp>self</span><span class=p>)</span> <span class=c1># type: ignore</span>
<a id=__codelineno-0-306 name=__codelineno-0-306></a> <span class=bp>self</span><span class=o>.</span><span class=n>render</span> <span class=o>=</span> <span class=n>types</span><span class=o>.</span><span class=n>MethodType</span><span class=p>(</span><span class=bp>self</span><span class=o>.</span><span class=vm>__class__</span><span class=o>.</span><span class=n>render</span><span class=o>.</span><span class=vm>__func__</span><span class=p>,</span> <span class=bp>self</span><span class=p>)</span> <span class=c1># type: ignore</span>
<a id=__codelineno-0-307 name=__codelineno-0-307></a> <span class=bp>self</span><span class=o>.</span><span class=n>as_view</span> <span class=o>=</span> <span class=n>types</span><span class=o>.</span><span class=n>MethodType</span><span class=p>(</span><span class=bp>self</span><span class=o>.</span><span class=vm>__class__</span><span class=o>.</span><span class=n>as_view</span><span class=o>.</span><span class=vm>__func__</span><span class=p>,</span> <span class=bp>self</span><span class=p>)</span> <span class=c1># type: ignore</span>
<a id=__codelineno-0-308 name=__codelineno-0-308></a>
<a id=__codelineno-0-309 name=__codelineno-0-309></a> <span class=bp>self</span><span class=o>.</span><span class=n>registered_name</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=nb>str</span><span class=p>]</span> <span class=o>=</span> <span class=n>registered_name</span>
<a id=__codelineno-0-310 name=__codelineno-0-310></a> <span class=bp>self</span><span class=o>.</span><span class=n>outer_context</span><span class=p>:</span> <span class=n>Context</span> <span class=o>=</span> <span class=n>outer_context</span> <span class=ow>or</span> <span class=n>Context</span><span class=p>()</span>
<a id=__codelineno-0-311 name=__codelineno-0-311></a> <span class=bp>self</span><span class=o>.</span><span class=n>component_id</span> <span class=o>=</span> <span class=n>component_id</span> <span class=ow>or</span> <span class=n>gen_id</span><span class=p>()</span>
<a id=__codelineno-0-312 name=__codelineno-0-312></a> <span class=bp>self</span><span class=o>.</span><span class=n>registry</span> <span class=o>=</span> <span class=n>registry</span> <span class=ow>or</span> <span class=n>registry_</span>
<a id=__codelineno-0-313 name=__codelineno-0-313></a> <span class=bp>self</span><span class=o>.</span><span class=n>_render_stack</span><span class=p>:</span> <span class=n>Deque</span><span class=p>[</span><span class=n>RenderStackItem</span><span class=p>[</span><span class=n>ArgsType</span><span class=p>,</span> <span class=n>KwargsType</span><span class=p>,</span> <span class=n>SlotsType</span><span class=p>]]</span> <span class=o>=</span> <span class=n>deque</span><span class=p>()</span>
<a id=__codelineno-0-314 name=__codelineno-0-314></a> <span class=c1># None == uninitialized, False == No types, Tuple == types</span>
<a id=__codelineno-0-315 name=__codelineno-0-315></a> <span class=bp>self</span><span class=o>.</span><span class=n>_types</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>Union</span><span class=p>[</span><span class=n>Tuple</span><span class=p>[</span><span class=n>Any</span><span class=p>,</span> <span class=n>Any</span><span class=p>,</span> <span class=n>Any</span><span class=p>,</span> <span class=n>Any</span><span class=p>,</span> <span class=n>Any</span><span class=p>,</span> <span class=n>Any</span><span class=p>],</span> <span class=n>Literal</span><span class=p>[</span><span class=kc>False</span><span class=p>]]]</span> <span class=o>=</span> <span class=kc>None</span>
</code></pre></div></td></tr></table></div> </details> <div class="doc doc-children"> <div class="doc doc-object doc-attribute"> <h3 id=django_components.DynamicComponent.Media class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">Media</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.DynamicComponent.Media class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>Media</span> <span class=o>=</span> <span class=n><a class="autorefs autorefs-internal" title=django_components.component_media.ComponentMediaInput href=#django_components.component_media.ComponentMediaInput>ComponentMediaInput</a></span>
</code></pre></div> <div class="doc doc-contents "> <p>Defines JS and CSS media files associated with this component.</p> </div> </div> <div class="doc doc-object doc-attribute"> <h3 id=django_components.DynamicComponent.css class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">css</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.DynamicComponent.css class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>css</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>Inlined CSS associated with this component.</p> </div> </div> <div class="doc doc-object doc-attribute"> <h3 id=django_components.DynamicComponent.input class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">input</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-property"><code>property</code></small> </span> <a href=#django_components.DynamicComponent.input class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nb>input</span><span class=p>:</span> <span class=n><span title=django_components.component.RenderInput>RenderInput</span></span><span class=p>[</span><span class=n><span title=django_components.component.ArgsType>ArgsType</span></span><span class=p>,</span> <span class=n><span title=django_components.component.KwargsType>KwargsType</span></span><span class=p>,</span> <span class=n><span title=django_components.component.SlotsType>SlotsType</span></span><span class=p>]</span>
</code></pre></div> <div class="doc doc-contents "> <p>Input holds the data (like arg, kwargs, slots) that were passsed to the current execution of the <code>render</code> method.</p> </div> </div> <div class="doc doc-object doc-attribute"> <h3 id=django_components.DynamicComponent.is_filled class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">is_filled</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-property"><code>property</code></small> </span> <a href=#django_components.DynamicComponent.is_filled class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>is_filled</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-internal" title=django_components.slots.SlotIsFilled href=#django_components.slots.SlotIsFilled>SlotIsFilled</a></span>
</code></pre></div> <div class="doc doc-contents "> <p>Dictionary describing which slots have or have not been filled.</p> <p>This attribute is available for use only within the template as <code>{{ component_vars.is_filled.slot_name }}</code>, and within <code>on_render_before</code> and <code>on_render_after</code> hooks.</p> </div> </div> <div class="doc doc-object doc-attribute"> <h3 id=django_components.DynamicComponent.js class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">js</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.DynamicComponent.js class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>js</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>Inlined JS associated with this component.</p> </div> </div> <div class="doc doc-object doc-attribute"> <h3 id=django_components.DynamicComponent.media class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">media</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.DynamicComponent.media class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>media</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-internal" title=django_components.component.Component.Media href=#django_components.component.Component.Media>Media</a></span>
</code></pre></div> <div class="doc doc-contents "> <p>Normalized definition of JS and CSS media files associated with this component.</p> <p>NOTE: This field is generated from Component.Media class.</p> </div> </div> <div class="doc doc-object doc-attribute"> <h3 id=django_components.DynamicComponent.response_class class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">response_class</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.DynamicComponent.response_class class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>response_class</span> <span class=o>=</span> <span class=n><a class="autorefs autorefs-external" title=django.http.HttpResponse href=https://docs.djangoproject.com/en/5.0/ref/request-response/#django.http.HttpResponse>HttpResponse</a></span>
</code></pre></div> <div class="doc doc-contents "> <p>This allows to configure what class is used to generate response from <code>render_to_response</code></p> </div> </div> <div class="doc doc-object doc-attribute"> <h3 id=django_components.DynamicComponent.template_name class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">template_name</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.DynamicComponent.template_name class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>template_name</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>Filepath to the Django template associated with this component.</p> <p>The filepath must be relative to either the file where the component class was defined, or one of the roots of <code>STATIFILES_DIRS</code>.</p> <p>Only one of <code>template_name</code>, <code>get_template_name</code>, <code>template</code> or <code>get_template</code> must be defined.</p> </div> </div> <div class="doc doc-object doc-function"> <h3 id=django_components.DynamicComponent.as_view class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">as_view</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-classmethod"><code>classmethod</code></small> </span> <a href=#django_components.DynamicComponent.as_view class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>as_view</span><span class=p>(</span><span class=o>**</span><span class=n>initkwargs</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Any href=https://docs.python.org/3.12/library/typing.html#typing.Any>Any</a></span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><span title=django_components.component.ViewFn>ViewFn</span></span>
</code></pre></div> <div class="doc doc-contents "> <p>Shortcut for calling <code>Component.View.as_view</code> and passing component instance to it.</p> <details class=quote> <summary>Source code in <code>src/django_components/component.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-460>460</a></span>
<span class=normal><a href=#__codelineno-0-461>461</a></span>
<span class=normal><a href=#__codelineno-0-462>462</a></span>
<span class=normal><a href=#__codelineno-0-463>463</a></span>
<span class=normal><a href=#__codelineno-0-464>464</a></span>
<span class=normal><a href=#__codelineno-0-465>465</a></span>
<span class=normal><a href=#__codelineno-0-466>466</a></span>
<span class=normal><a href=#__codelineno-0-467>467</a></span>
<span class=normal><a href=#__codelineno-0-468>468</a></span>
<span class=normal><a href=#__codelineno-0-469>469</a></span>
<span class=normal><a href=#__codelineno-0-470>470</a></span>
<span class=normal><a href=#__codelineno-0-471>471</a></span>
<span class=normal><a href=#__codelineno-0-472>472</a></span>
<span class=normal><a href=#__codelineno-0-473>473</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-460 name=__codelineno-0-460></a><span class=nd>@classmethod</span>
<a id=__codelineno-0-461 name=__codelineno-0-461></a><span class=k>def</span> <span class=nf>as_view</span><span class=p>(</span><span class=bp>cls</span><span class=p>,</span> <span class=o>**</span><span class=n>initkwargs</span><span class=p>:</span> <span class=n>Any</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n>ViewFn</span><span class=p>:</span>
<a id=__codelineno-0-462 name=__codelineno-0-462></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-463 name=__codelineno-0-463></a><span class=sd> Shortcut for calling `Component.View.as_view` and passing component instance to it.</span>
<a id=__codelineno-0-464 name=__codelineno-0-464></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-465 name=__codelineno-0-465></a> <span class=c1># This method may be called as class method or as instance method.</span>
<a id=__codelineno-0-466 name=__codelineno-0-466></a> <span class=c1># If called as class method, create a new instance.</span>
<a id=__codelineno-0-467 name=__codelineno-0-467></a> <span class=k>if</span> <span class=nb>isinstance</span><span class=p>(</span><span class=bp>cls</span><span class=p>,</span> <span class=n>Component</span><span class=p>):</span>
<a id=__codelineno-0-468 name=__codelineno-0-468></a> <span class=n>comp</span><span class=p>:</span> <span class=n>Component</span> <span class=o>=</span> <span class=bp>cls</span>
<a id=__codelineno-0-469 name=__codelineno-0-469></a> <span class=k>else</span><span class=p>:</span>
<a id=__codelineno-0-470 name=__codelineno-0-470></a> <span class=n>comp</span> <span class=o>=</span> <span class=bp>cls</span><span class=p>()</span>
<a id=__codelineno-0-471 name=__codelineno-0-471></a>
<a id=__codelineno-0-472 name=__codelineno-0-472></a> <span class=c1># Allow the View class to access this component via `self.component`</span>
<a id=__codelineno-0-473 name=__codelineno-0-473></a> <span class=k>return</span> <span class=n>comp</span><span class=o>.</span><span class=n>View</span><span class=o>.</span><span class=n>as_view</span><span class=p>(</span><span class=o>**</span><span class=n>initkwargs</span><span class=p>,</span> <span class=n>component</span><span class=o>=</span><span class=n>comp</span><span class=p>)</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h3 id=django_components.DynamicComponent.get_template class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">get_template</span> <a href=#django_components.DynamicComponent.get_template class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>get_template</span><span class=p>(</span><span class=n>context</span><span class=p>:</span> <span class=n><span title=django.template.context.Context>Context</span></span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Union href=https://docs.python.org/3.12/library/typing.html#typing.Union>Union</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span> <span class=n><span title=django.template.base.Template>Template</span></span><span class=p>]]</span>
</code></pre></div> <div class="doc doc-contents "> <p>Inlined Django template associated with this component. Can be a plain string or a Template instance.</p> <p>Only one of <code>template_name</code>, <code>get_template_name</code>, <code>template</code> or <code>get_template</code> must be defined.</p> <details class=quote> <summary>Source code in <code>src/django_components/component.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-227>227</a></span>
<span class=normal><a href=#__codelineno-0-228>228</a></span>
<span class=normal><a href=#__codelineno-0-229>229</a></span>
<span class=normal><a href=#__codelineno-0-230>230</a></span>
<span class=normal><a href=#__codelineno-0-231>231</a></span>
<span class=normal><a href=#__codelineno-0-232>232</a></span>
<span class=normal><a href=#__codelineno-0-233>233</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-227 name=__codelineno-0-227></a><span class=k>def</span> <span class=nf>get_template</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>context</span><span class=p>:</span> <span class=n>Context</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n>Optional</span><span class=p>[</span><span class=n>Union</span><span class=p>[</span><span class=nb>str</span><span class=p>,</span> <span class=n>Template</span><span class=p>]]:</span>
<a id=__codelineno-0-228 name=__codelineno-0-228></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-229 name=__codelineno-0-229></a><span class=sd> Inlined Django template associated with this component. Can be a plain string or a Template instance.</span>
<a id=__codelineno-0-230 name=__codelineno-0-230></a>
<a id=__codelineno-0-231 name=__codelineno-0-231></a><span class=sd> Only one of `template_name`, `get_template_name`, `template` or `get_template` must be defined.</span>
<a id=__codelineno-0-232 name=__codelineno-0-232></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-233 name=__codelineno-0-233></a> <span class=k>return</span> <span class=kc>None</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h3 id=django_components.DynamicComponent.get_template_name class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">get_template_name</span> <a href=#django_components.DynamicComponent.get_template_name class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>get_template_name</span><span class=p>(</span><span class=n>context</span><span class=p>:</span> <span class=n><span title=django.template.context.Context>Context</span></span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]</span>
</code></pre></div> <div class="doc doc-contents "> <p>Filepath to the Django template associated with this component.</p> <p>The filepath must be relative to either the file where the component class was defined, or one of the roots of <code>STATIFILES_DIRS</code>.</p> <p>Only one of <code>template_name</code>, <code>get_template_name</code>, <code>template</code> or <code>get_template</code> must be defined.</p> <details class=quote> <summary>Source code in <code>src/django_components/component.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-209>209</a></span>
<span class=normal><a href=#__codelineno-0-210>210</a></span>
<span class=normal><a href=#__codelineno-0-211>211</a></span>
<span class=normal><a href=#__codelineno-0-212>212</a></span>
<span class=normal><a href=#__codelineno-0-213>213</a></span>
<span class=normal><a href=#__codelineno-0-214>214</a></span>
<span class=normal><a href=#__codelineno-0-215>215</a></span>
<span class=normal><a href=#__codelineno-0-216>216</a></span>
<span class=normal><a href=#__codelineno-0-217>217</a></span>
<span class=normal><a href=#__codelineno-0-218>218</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-209 name=__codelineno-0-209></a><span class=k>def</span> <span class=nf>get_template_name</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>context</span><span class=p>:</span> <span class=n>Context</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-0-210 name=__codelineno-0-210></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-211 name=__codelineno-0-211></a><span class=sd> Filepath to the Django template associated with this component.</span>
<a id=__codelineno-0-212 name=__codelineno-0-212></a>
<a id=__codelineno-0-213 name=__codelineno-0-213></a><span class=sd> The filepath must be relative to either the file where the component class was defined,</span>
<a id=__codelineno-0-214 name=__codelineno-0-214></a><span class=sd> or one of the roots of `STATIFILES_DIRS`.</span>
<a id=__codelineno-0-215 name=__codelineno-0-215></a>
<a id=__codelineno-0-216 name=__codelineno-0-216></a><span class=sd> Only one of `template_name`, `get_template_name`, `template` or `get_template` must be defined.</span>
<a id=__codelineno-0-217 name=__codelineno-0-217></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-218 name=__codelineno-0-218></a> <span class=k>return</span> <span class=kc>None</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h3 id=django_components.DynamicComponent.inject class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">inject</span> <a href=#django_components.DynamicComponent.inject class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>inject</span><span class=p>(</span><span class=n>key</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span> <span class=n>default</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Any href=https://docs.python.org/3.12/library/typing.html#typing.Any>Any</a></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-external" title=typing.Any href=https://docs.python.org/3.12/library/typing.html#typing.Any>Any</a></span>
</code></pre></div> <div class="doc doc-contents "> <p>Use this method to retrieve the data that was passed to a <code>{% provide %}</code> tag with the corresponding key.</p> <p>To retrieve the data, <code>inject()</code> must be called inside a component that's inside the <code>{% provide %}</code> tag.</p> <p>You may also pass a default that will be used if the <code>provide</code> tag with given key was NOT found.</p> <p>This method mut be used inside the <code>get_context_data()</code> method and raises an error if called elsewhere.</p> <p>Example:</p> <p>Given this template: <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=cp>{%</span> <span class=k>provide</span> <span class=s2>&quot;provider&quot;</span> <span class=nv>hello</span><span class=o>=</span><span class=s2>&quot;world&quot;</span> <span class=cp>%}</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a><span class=x> </span><span class=cp>{%</span> <span class=k>component</span> <span class=s2>&quot;my_comp&quot;</span> <span class=cp>%}</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=x> </span><span class=cp>{%</span> <span class=k>endcomponent</span> <span class=cp>%}</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a><span class=cp>{%</span> <span class=k>endprovide</span> <span class=cp>%}</span>
</code></pre></div></p> <p>And given this definition of "my_comp" component: <div class=highlight><pre><span></span><code><a id=__codelineno-1-1 name=__codelineno-1-1 href=#__codelineno-1-1></a><span class=kn>from</span> <span class=nn>django_components</span> <span class=kn>import</span> <span class=n>Component</span><span class=p>,</span> <span class=n>register</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=nd>@register</span><span class=p>(</span><span class=s2>&quot;my_comp&quot;</span><span class=p>)</span>
<a id=__codelineno-1-4 name=__codelineno-1-4 href=#__codelineno-1-4></a><span class=k>class</span> <span class=nc>MyComp</span><span class=p>(</span><span class=n>Component</span><span class=p>):</span>
<a id=__codelineno-1-5 name=__codelineno-1-5 href=#__codelineno-1-5></a> <span class=n>template</span> <span class=o>=</span> <span class=s2>&quot;hi {{ data.hello }}!&quot;</span>
<a id=__codelineno-1-6 name=__codelineno-1-6 href=#__codelineno-1-6></a> <span class=k>def</span> <span class=nf>get_context_data</span><span class=p>(</span><span class=bp>self</span><span class=p>):</span>
<a id=__codelineno-1-7 name=__codelineno-1-7 href=#__codelineno-1-7></a> <span class=n>data</span> <span class=o>=</span> <span class=bp>self</span><span class=o>.</span><span class=n>inject</span><span class=p>(</span><span class=s2>&quot;provider&quot;</span><span class=p>)</span>
<a id=__codelineno-1-8 name=__codelineno-1-8 href=#__codelineno-1-8></a> <span class=k>return</span> <span class=p>{</span><span class=s2>&quot;data&quot;</span><span class=p>:</span> <span class=n>data</span><span class=p>}</span>
</code></pre></div></p> <p>This renders into: <div class=highlight><pre><span></span><code><a id=__codelineno-2-1 name=__codelineno-2-1 href=#__codelineno-2-1></a>hi world!
</code></pre></div></p> <p>As the <code>{{ data.hello }}</code> is taken from the "provider".</p> <details class=quote> <summary>Source code in <code>src/django_components/component.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-410>410</a></span>
<span class=normal><a href=#__codelineno-0-411>411</a></span>
<span class=normal><a href=#__codelineno-0-412>412</a></span>
<span class=normal><a href=#__codelineno-0-413>413</a></span>
<span class=normal><a href=#__codelineno-0-414>414</a></span>
<span class=normal><a href=#__codelineno-0-415>415</a></span>
<span class=normal><a href=#__codelineno-0-416>416</a></span>
<span class=normal><a href=#__codelineno-0-417>417</a></span>
<span class=normal><a href=#__codelineno-0-418>418</a></span>
<span class=normal><a href=#__codelineno-0-419>419</a></span>
<span class=normal><a href=#__codelineno-0-420>420</a></span>
<span class=normal><a href=#__codelineno-0-421>421</a></span>
<span class=normal><a href=#__codelineno-0-422>422</a></span>
<span class=normal><a href=#__codelineno-0-423>423</a></span>
<span class=normal><a href=#__codelineno-0-424>424</a></span>
<span class=normal><a href=#__codelineno-0-425>425</a></span>
<span class=normal><a href=#__codelineno-0-426>426</a></span>
<span class=normal><a href=#__codelineno-0-427>427</a></span>
<span class=normal><a href=#__codelineno-0-428>428</a></span>
<span class=normal><a href=#__codelineno-0-429>429</a></span>
<span class=normal><a href=#__codelineno-0-430>430</a></span>
<span class=normal><a href=#__codelineno-0-431>431</a></span>
<span class=normal><a href=#__codelineno-0-432>432</a></span>
<span class=normal><a href=#__codelineno-0-433>433</a></span>
<span class=normal><a href=#__codelineno-0-434>434</a></span>
<span class=normal><a href=#__codelineno-0-435>435</a></span>
<span class=normal><a href=#__codelineno-0-436>436</a></span>
<span class=normal><a href=#__codelineno-0-437>437</a></span>
<span class=normal><a href=#__codelineno-0-438>438</a></span>
<span class=normal><a href=#__codelineno-0-439>439</a></span>
<span class=normal><a href=#__codelineno-0-440>440</a></span>
<span class=normal><a href=#__codelineno-0-441>441</a></span>
<span class=normal><a href=#__codelineno-0-442>442</a></span>
<span class=normal><a href=#__codelineno-0-443>443</a></span>
<span class=normal><a href=#__codelineno-0-444>444</a></span>
<span class=normal><a href=#__codelineno-0-445>445</a></span>
<span class=normal><a href=#__codelineno-0-446>446</a></span>
<span class=normal><a href=#__codelineno-0-447>447</a></span>
<span class=normal><a href=#__codelineno-0-448>448</a></span>
<span class=normal><a href=#__codelineno-0-449>449</a></span>
<span class=normal><a href=#__codelineno-0-450>450</a></span>
<span class=normal><a href=#__codelineno-0-451>451</a></span>
<span class=normal><a href=#__codelineno-0-452>452</a></span>
<span class=normal><a href=#__codelineno-0-453>453</a></span>
<span class=normal><a href=#__codelineno-0-454>454</a></span>
<span class=normal><a href=#__codelineno-0-455>455</a></span>
<span class=normal><a href=#__codelineno-0-456>456</a></span>
<span class=normal><a href=#__codelineno-0-457>457</a></span>
<span class=normal><a href=#__codelineno-0-458>458</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-410 name=__codelineno-0-410></a><span class=k>def</span> <span class=nf>inject</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>key</span><span class=p>:</span> <span class=nb>str</span><span class=p>,</span> <span class=n>default</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>Any</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n>Any</span><span class=p>:</span>
<a id=__codelineno-0-411 name=__codelineno-0-411></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-412 name=__codelineno-0-412></a><span class=sd> Use this method to retrieve the data that was passed to a `{% provide %}` tag</span>
<a id=__codelineno-0-413 name=__codelineno-0-413></a><span class=sd> with the corresponding key.</span>
<a id=__codelineno-0-414 name=__codelineno-0-414></a>
<a id=__codelineno-0-415 name=__codelineno-0-415></a><span class=sd> To retrieve the data, `inject()` must be called inside a component that&#39;s</span>
<a id=__codelineno-0-416 name=__codelineno-0-416></a><span class=sd> inside the `{% provide %}` tag.</span>
<a id=__codelineno-0-417 name=__codelineno-0-417></a>
<a id=__codelineno-0-418 name=__codelineno-0-418></a><span class=sd> You may also pass a default that will be used if the `provide` tag with given</span>
<a id=__codelineno-0-419 name=__codelineno-0-419></a><span class=sd> key was NOT found.</span>
<a id=__codelineno-0-420 name=__codelineno-0-420></a>
<a id=__codelineno-0-421 name=__codelineno-0-421></a><span class=sd> This method mut be used inside the `get_context_data()` method and raises</span>
<a id=__codelineno-0-422 name=__codelineno-0-422></a><span class=sd> an error if called elsewhere.</span>
<a id=__codelineno-0-423 name=__codelineno-0-423></a>
<a id=__codelineno-0-424 name=__codelineno-0-424></a><span class=sd> Example:</span>
<a id=__codelineno-0-425 name=__codelineno-0-425></a>
<a id=__codelineno-0-426 name=__codelineno-0-426></a><span class=sd> Given this template:</span>
<a id=__codelineno-0-427 name=__codelineno-0-427></a><span class=sd> ```django</span>
<a id=__codelineno-0-428 name=__codelineno-0-428></a><span class=sd> {% provide &quot;provider&quot; hello=&quot;world&quot; %}</span>
<a id=__codelineno-0-429 name=__codelineno-0-429></a><span class=sd> {% component &quot;my_comp&quot; %}</span>
<a id=__codelineno-0-430 name=__codelineno-0-430></a><span class=sd> {% endcomponent %}</span>
<a id=__codelineno-0-431 name=__codelineno-0-431></a><span class=sd> {% endprovide %}</span>
<a id=__codelineno-0-432 name=__codelineno-0-432></a><span class=sd> ```</span>
<a id=__codelineno-0-433 name=__codelineno-0-433></a>
<a id=__codelineno-0-434 name=__codelineno-0-434></a><span class=sd> And given this definition of &quot;my_comp&quot; component:</span>
<a id=__codelineno-0-435 name=__codelineno-0-435></a><span class=sd> ```py</span>
<a id=__codelineno-0-436 name=__codelineno-0-436></a><span class=sd> from django_components import Component, register</span>
<a id=__codelineno-0-437 name=__codelineno-0-437></a>
<a id=__codelineno-0-438 name=__codelineno-0-438></a><span class=sd> @register(&quot;my_comp&quot;)</span>
<a id=__codelineno-0-439 name=__codelineno-0-439></a><span class=sd> class MyComp(Component):</span>
<a id=__codelineno-0-440 name=__codelineno-0-440></a><span class=sd> template = &quot;hi {{ data.hello }}!&quot;</span>
<a id=__codelineno-0-441 name=__codelineno-0-441></a><span class=sd> def get_context_data(self):</span>
<a id=__codelineno-0-442 name=__codelineno-0-442></a><span class=sd> data = self.inject(&quot;provider&quot;)</span>
<a id=__codelineno-0-443 name=__codelineno-0-443></a><span class=sd> return {&quot;data&quot;: data}</span>
<a id=__codelineno-0-444 name=__codelineno-0-444></a><span class=sd> ```</span>
<a id=__codelineno-0-445 name=__codelineno-0-445></a>
<a id=__codelineno-0-446 name=__codelineno-0-446></a><span class=sd> This renders into:</span>
<a id=__codelineno-0-447 name=__codelineno-0-447></a><span class=sd> ```</span>
<a id=__codelineno-0-448 name=__codelineno-0-448></a><span class=sd> hi world!</span>
<a id=__codelineno-0-449 name=__codelineno-0-449></a><span class=sd> ```</span>
<a id=__codelineno-0-450 name=__codelineno-0-450></a>
<a id=__codelineno-0-451 name=__codelineno-0-451></a><span class=sd> As the `{{ data.hello }}` is taken from the &quot;provider&quot;.</span>
<a id=__codelineno-0-452 name=__codelineno-0-452></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-453 name=__codelineno-0-453></a> <span class=k>if</span> <span class=bp>self</span><span class=o>.</span><span class=n>input</span> <span class=ow>is</span> <span class=kc>None</span><span class=p>:</span>
<a id=__codelineno-0-454 name=__codelineno-0-454></a> <span class=k>raise</span> <span class=ne>RuntimeError</span><span class=p>(</span>
<a id=__codelineno-0-455 name=__codelineno-0-455></a> <span class=sa>f</span><span class=s2>&quot;Method &#39;inject()&#39; of component &#39;</span><span class=si>{</span><span class=bp>self</span><span class=o>.</span><span class=n>name</span><span class=si>}</span><span class=s2>&#39; was called outside of &#39;get_context_data()&#39;&quot;</span>
<a id=__codelineno-0-456 name=__codelineno-0-456></a> <span class=p>)</span>
<a id=__codelineno-0-457 name=__codelineno-0-457></a>
<a id=__codelineno-0-458 name=__codelineno-0-458></a> <span class=k>return</span> <span class=n>get_injected_context_var</span><span class=p>(</span><span class=bp>self</span><span class=o>.</span><span class=n>name</span><span class=p>,</span> <span class=bp>self</span><span class=o>.</span><span class=n>input</span><span class=o>.</span><span class=n>context</span><span class=p>,</span> <span class=n>key</span><span class=p>,</span> <span class=n>default</span><span class=p>)</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h3 id=django_components.DynamicComponent.on_render_after class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">on_render_after</span> <a href=#django_components.DynamicComponent.on_render_after class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>on_render_after</span><span class=p>(</span><span class=n>context</span><span class=p>:</span> <span class=n><span title=django.template.context.Context>Context</span></span><span class=p>,</span> <span class=n>template</span><span class=p>:</span> <span class=n><span title=django.template.base.Template>Template</span></span><span class=p>,</span> <span class=n>content</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><span title=django_components.slots.SlotResult>SlotResult</span></span><span class=p>]</span>
</code></pre></div> <div class="doc doc-contents "> <p>Hook that runs just after the component's template was rendered. It receives the rendered output as the last argument.</p> <p>You can use this hook to access the context or the template, but modifying them won't have any effect.</p> <p>To override the content that gets rendered, you can return a string or SafeString from this hook.</p> <details class=quote> <summary>Source code in <code>src/django_components/component.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-268>268</a></span>
<span class=normal><a href=#__codelineno-0-269>269</a></span>
<span class=normal><a href=#__codelineno-0-270>270</a></span>
<span class=normal><a href=#__codelineno-0-271>271</a></span>
<span class=normal><a href=#__codelineno-0-272>272</a></span>
<span class=normal><a href=#__codelineno-0-273>273</a></span>
<span class=normal><a href=#__codelineno-0-274>274</a></span>
<span class=normal><a href=#__codelineno-0-275>275</a></span>
<span class=normal><a href=#__codelineno-0-276>276</a></span>
<span class=normal><a href=#__codelineno-0-277>277</a></span>
<span class=normal><a href=#__codelineno-0-278>278</a></span>
<span class=normal><a href=#__codelineno-0-279>279</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-268 name=__codelineno-0-268></a><span class=k>def</span> <span class=nf>on_render_after</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>context</span><span class=p>:</span> <span class=n>Context</span><span class=p>,</span> <span class=n>template</span><span class=p>:</span> <span class=n>Template</span><span class=p>,</span> <span class=n>content</span><span class=p>:</span> <span class=nb>str</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n>Optional</span><span class=p>[</span><span class=n>SlotResult</span><span class=p>]:</span>
<a id=__codelineno-0-269 name=__codelineno-0-269></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-270 name=__codelineno-0-270></a><span class=sd> Hook that runs just after the component&#39;s template was rendered.</span>
<a id=__codelineno-0-271 name=__codelineno-0-271></a><span class=sd> It receives the rendered output as the last argument.</span>
<a id=__codelineno-0-272 name=__codelineno-0-272></a>
<a id=__codelineno-0-273 name=__codelineno-0-273></a><span class=sd> You can use this hook to access the context or the template, but modifying</span>
<a id=__codelineno-0-274 name=__codelineno-0-274></a><span class=sd> them won&#39;t have any effect.</span>
<a id=__codelineno-0-275 name=__codelineno-0-275></a>
<a id=__codelineno-0-276 name=__codelineno-0-276></a><span class=sd> To override the content that gets rendered, you can return a string or SafeString</span>
<a id=__codelineno-0-277 name=__codelineno-0-277></a><span class=sd> from this hook.</span>
<a id=__codelineno-0-278 name=__codelineno-0-278></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-279 name=__codelineno-0-279></a> <span class=k>pass</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h3 id=django_components.DynamicComponent.on_render_before class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">on_render_before</span> <a href=#django_components.DynamicComponent.on_render_before class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>on_render_before</span><span class=p>(</span><span class=n>context</span><span class=p>:</span> <span class=n><span title=django.template.context.Context>Context</span></span><span class=p>,</span> <span class=n>template</span><span class=p>:</span> <span class=n><span title=django.template.base.Template>Template</span></span><span class=p>)</span> <span class=o>-&gt;</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>Hook that runs just before the component's template is rendered.</p> <p>You can use this hook to access or modify the context or the template.</p> <details class=quote> <summary>Source code in <code>src/django_components/component.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-260>260</a></span>
<span class=normal><a href=#__codelineno-0-261>261</a></span>
<span class=normal><a href=#__codelineno-0-262>262</a></span>
<span class=normal><a href=#__codelineno-0-263>263</a></span>
<span class=normal><a href=#__codelineno-0-264>264</a></span>
<span class=normal><a href=#__codelineno-0-265>265</a></span>
<span class=normal><a href=#__codelineno-0-266>266</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-260 name=__codelineno-0-260></a><span class=k>def</span> <span class=nf>on_render_before</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>context</span><span class=p>:</span> <span class=n>Context</span><span class=p>,</span> <span class=n>template</span><span class=p>:</span> <span class=n>Template</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=kc>None</span><span class=p>:</span>
<a id=__codelineno-0-261 name=__codelineno-0-261></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-262 name=__codelineno-0-262></a><span class=sd> Hook that runs just before the component&#39;s template is rendered.</span>
<a id=__codelineno-0-263 name=__codelineno-0-263></a>
<a id=__codelineno-0-264 name=__codelineno-0-264></a><span class=sd> You can use this hook to access or modify the context or the template.</span>
<a id=__codelineno-0-265 name=__codelineno-0-265></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-266 name=__codelineno-0-266></a> <span class=k>pass</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h3 id=django_components.DynamicComponent.render class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">render</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-classmethod"><code>classmethod</code></small> </span> <a href=#django_components.DynamicComponent.render class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>render</span><span class=p>(</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a> <span class=n>context</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Union href=https://docs.python.org/3.12/library/typing.html#typing.Union>Union</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Dict href=https://docs.python.org/3.12/library/typing.html#typing.Dict>Dict</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span> <span class=n><a class="autorefs autorefs-external" title=typing.Any href=https://docs.python.org/3.12/library/typing.html#typing.Any>Any</a></span><span class=p>],</span> <span class=n><span title=django.template.context.Context>Context</span></span><span class=p>]]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a> <span class=n>args</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><span title=django_components.component.ArgsType>ArgsType</span></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a> <span class=n>kwargs</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><span title=django_components.component.KwargsType>KwargsType</span></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a> <span class=n>slots</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><span title=django_components.component.SlotsType>SlotsType</span></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-6 name=__codelineno-0-6 href=#__codelineno-0-6></a> <span class=n>escape_slots_content</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/functions.html#bool>bool</a></span> <span class=o>=</span> <span class=kc>True</span><span class=p>,</span>
<a id=__codelineno-0-7 name=__codelineno-0-7 href=#__codelineno-0-7></a> <span class=nb>type</span><span class=p>:</span> <span class=n><span title=django_components.dependencies.RenderType>RenderType</span></span> <span class=o>=</span> <span class=s2>&quot;document&quot;</span><span class=p>,</span>
<a id=__codelineno-0-8 name=__codelineno-0-8 href=#__codelineno-0-8></a> <span class=n>render_dependencies</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/functions.html#bool>bool</a></span> <span class=o>=</span> <span class=kc>True</span><span class=p>,</span>
<a id=__codelineno-0-9 name=__codelineno-0-9 href=#__codelineno-0-9></a><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span>
</code></pre></div> <div class="doc doc-contents "> <p>Render the component into a string.</p> <p>Inputs: - <code>args</code> - Positional args for the component. This is the same as calling the component as <code>{% component "my_comp" arg1 arg2 ... %}</code> - <code>kwargs</code> - Kwargs for the component. This is the same as calling the component as <code>{% component "my_comp" key1=val1 key2=val2 ... %}</code> - <code>slots</code> - Component slot fills. This is the same as pasing <code>{% fill %}</code> tags to the component. Accepts a dictionary of <code>{ slot_name: slot_content }</code> where <code>slot_content</code> can be a string or render function. - <code>escape_slots_content</code> - Whether the content from <code>slots</code> should be escaped. - <code>context</code> - A context (dictionary or Django's Context) within which the component is rendered. The keys on the context can be accessed from within the template. - NOTE: In "isolated" mode, context is NOT accessible, and data MUST be passed via component's args and kwargs. - <code>type</code> - Configure how to handle JS and CSS dependencies. - <code>"document"</code> (default) - JS dependencies are inserted into <code>{% component_js_dependencies %}</code>, or to the end of the <code>&lt;body&gt;</code> tag. CSS dependencies are inserted into <code>{% component_css_dependencies %}</code>, or the end of the <code>&lt;head&gt;</code> tag. - <code>render_dependencies</code> - Set this to <code>False</code> if you want to insert the resulting HTML into another component.</p> <p>Example: <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>MyComponent</span><span class=o>.</span><span class=n>render</span><span class=p>(</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a> <span class=n>args</span><span class=o>=</span><span class=p>[</span><span class=mi>1</span><span class=p>,</span> <span class=s2>&quot;two&quot;</span><span class=p>,</span> <span class=p>{}],</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a> <span class=n>kwargs</span><span class=o>=</span><span class=p>{</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a> <span class=s2>&quot;key&quot;</span><span class=p>:</span> <span class=mi>123</span><span class=p>,</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a> <span class=p>},</span>
<a id=__codelineno-0-6 name=__codelineno-0-6 href=#__codelineno-0-6></a> <span class=n>slots</span><span class=o>=</span><span class=p>{</span>
<a id=__codelineno-0-7 name=__codelineno-0-7 href=#__codelineno-0-7></a> <span class=s2>&quot;header&quot;</span><span class=p>:</span> <span class=s1>&#39;STATIC TEXT HERE&#39;</span><span class=p>,</span>
<a id=__codelineno-0-8 name=__codelineno-0-8 href=#__codelineno-0-8></a> <span class=s2>&quot;footer&quot;</span><span class=p>:</span> <span class=k>lambda</span> <span class=n>ctx</span><span class=p>,</span> <span class=n>slot_kwargs</span><span class=p>,</span> <span class=n>slot_ref</span><span class=p>:</span> <span class=sa>f</span><span class=s1>&#39;CTX: </span><span class=si>{</span><span class=n>ctx</span><span class=p>[</span><span class=s1>&#39;hello&#39;</span><span class=p>]</span><span class=si>}</span><span class=s1> SLOT_DATA: </span><span class=si>{</span><span class=n>slot_kwargs</span><span class=p>[</span><span class=s1>&#39;abc&#39;</span><span class=p>]</span><span class=si>}</span><span class=s1>&#39;</span><span class=p>,</span>
<a id=__codelineno-0-9 name=__codelineno-0-9 href=#__codelineno-0-9></a> <span class=p>},</span>
<a id=__codelineno-0-10 name=__codelineno-0-10 href=#__codelineno-0-10></a> <span class=n>escape_slots_content</span><span class=o>=</span><span class=kc>False</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> <details class=quote> <summary>Source code in <code>src/django_components/component.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-549>549</a></span>
<span class=normal><a href=#__codelineno-0-550>550</a></span>
<span class=normal><a href=#__codelineno-0-551>551</a></span>
<span class=normal><a href=#__codelineno-0-552>552</a></span>
<span class=normal><a href=#__codelineno-0-553>553</a></span>
<span class=normal><a href=#__codelineno-0-554>554</a></span>
<span class=normal><a href=#__codelineno-0-555>555</a></span>
<span class=normal><a href=#__codelineno-0-556>556</a></span>
<span class=normal><a href=#__codelineno-0-557>557</a></span>
<span class=normal><a href=#__codelineno-0-558>558</a></span>
<span class=normal><a href=#__codelineno-0-559>559</a></span>
<span class=normal><a href=#__codelineno-0-560>560</a></span>
<span class=normal><a href=#__codelineno-0-561>561</a></span>
<span class=normal><a href=#__codelineno-0-562>562</a></span>
<span class=normal><a href=#__codelineno-0-563>563</a></span>
<span class=normal><a href=#__codelineno-0-564>564</a></span>
<span class=normal><a href=#__codelineno-0-565>565</a></span>
<span class=normal><a href=#__codelineno-0-566>566</a></span>
<span class=normal><a href=#__codelineno-0-567>567</a></span>
<span class=normal><a href=#__codelineno-0-568>568</a></span>
<span class=normal><a href=#__codelineno-0-569>569</a></span>
<span class=normal><a href=#__codelineno-0-570>570</a></span>
<span class=normal><a href=#__codelineno-0-571>571</a></span>
<span class=normal><a href=#__codelineno-0-572>572</a></span>
<span class=normal><a href=#__codelineno-0-573>573</a></span>
<span class=normal><a href=#__codelineno-0-574>574</a></span>
<span class=normal><a href=#__codelineno-0-575>575</a></span>
<span class=normal><a href=#__codelineno-0-576>576</a></span>
<span class=normal><a href=#__codelineno-0-577>577</a></span>
<span class=normal><a href=#__codelineno-0-578>578</a></span>
<span class=normal><a href=#__codelineno-0-579>579</a></span>
<span class=normal><a href=#__codelineno-0-580>580</a></span>
<span class=normal><a href=#__codelineno-0-581>581</a></span>
<span class=normal><a href=#__codelineno-0-582>582</a></span>
<span class=normal><a href=#__codelineno-0-583>583</a></span>
<span class=normal><a href=#__codelineno-0-584>584</a></span>
<span class=normal><a href=#__codelineno-0-585>585</a></span>
<span class=normal><a href=#__codelineno-0-586>586</a></span>
<span class=normal><a href=#__codelineno-0-587>587</a></span>
<span class=normal><a href=#__codelineno-0-588>588</a></span>
<span class=normal><a href=#__codelineno-0-589>589</a></span>
<span class=normal><a href=#__codelineno-0-590>590</a></span>
<span class=normal><a href=#__codelineno-0-591>591</a></span>
<span class=normal><a href=#__codelineno-0-592>592</a></span>
<span class=normal><a href=#__codelineno-0-593>593</a></span>
<span class=normal><a href=#__codelineno-0-594>594</a></span>
<span class=normal><a href=#__codelineno-0-595>595</a></span>
<span class=normal><a href=#__codelineno-0-596>596</a></span>
<span class=normal><a href=#__codelineno-0-597>597</a></span>
<span class=normal><a href=#__codelineno-0-598>598</a></span>
<span class=normal><a href=#__codelineno-0-599>599</a></span>
<span class=normal><a href=#__codelineno-0-600>600</a></span>
<span class=normal><a href=#__codelineno-0-601>601</a></span>
<span class=normal><a href=#__codelineno-0-602>602</a></span>
<span class=normal><a href=#__codelineno-0-603>603</a></span>
<span class=normal><a href=#__codelineno-0-604>604</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-549 name=__codelineno-0-549></a><span class=nd>@classmethod</span>
<a id=__codelineno-0-550 name=__codelineno-0-550></a><span class=k>def</span> <span class=nf>render</span><span class=p>(</span>
<a id=__codelineno-0-551 name=__codelineno-0-551></a> <span class=bp>cls</span><span class=p>,</span>
<a id=__codelineno-0-552 name=__codelineno-0-552></a> <span class=n>context</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>Union</span><span class=p>[</span><span class=n>Dict</span><span class=p>[</span><span class=nb>str</span><span class=p>,</span> <span class=n>Any</span><span class=p>],</span> <span class=n>Context</span><span class=p>]]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-553 name=__codelineno-0-553></a> <span class=n>args</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>ArgsType</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-554 name=__codelineno-0-554></a> <span class=n>kwargs</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>KwargsType</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-555 name=__codelineno-0-555></a> <span class=n>slots</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>SlotsType</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-556 name=__codelineno-0-556></a> <span class=n>escape_slots_content</span><span class=p>:</span> <span class=nb>bool</span> <span class=o>=</span> <span class=kc>True</span><span class=p>,</span>
<a id=__codelineno-0-557 name=__codelineno-0-557></a> <span class=nb>type</span><span class=p>:</span> <span class=n>RenderType</span> <span class=o>=</span> <span class=s2>&quot;document&quot;</span><span class=p>,</span>
<a id=__codelineno-0-558 name=__codelineno-0-558></a> <span class=n>render_dependencies</span><span class=p>:</span> <span class=nb>bool</span> <span class=o>=</span> <span class=kc>True</span><span class=p>,</span>
<a id=__codelineno-0-559 name=__codelineno-0-559></a><span class=p>)</span> <span class=o>-&gt;</span> <span class=nb>str</span><span class=p>:</span>
<a id=__codelineno-0-560 name=__codelineno-0-560></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-561 name=__codelineno-0-561></a><span class=sd> Render the component into a string.</span>
<a id=__codelineno-0-562 name=__codelineno-0-562></a>
<a id=__codelineno-0-563 name=__codelineno-0-563></a><span class=sd> Inputs:</span>
<a id=__codelineno-0-564 name=__codelineno-0-564></a><span class=sd> - `args` - Positional args for the component. This is the same as calling the component</span>
<a id=__codelineno-0-565 name=__codelineno-0-565></a><span class=sd> as `{% component &quot;my_comp&quot; arg1 arg2 ... %}`</span>
<a id=__codelineno-0-566 name=__codelineno-0-566></a><span class=sd> - `kwargs` - Kwargs for the component. This is the same as calling the component</span>
<a id=__codelineno-0-567 name=__codelineno-0-567></a><span class=sd> as `{% component &quot;my_comp&quot; key1=val1 key2=val2 ... %}`</span>
<a id=__codelineno-0-568 name=__codelineno-0-568></a><span class=sd> - `slots` - Component slot fills. This is the same as pasing `{% fill %}` tags to the component.</span>
<a id=__codelineno-0-569 name=__codelineno-0-569></a><span class=sd> Accepts a dictionary of `{ slot_name: slot_content }` where `slot_content` can be a string</span>
<a id=__codelineno-0-570 name=__codelineno-0-570></a><span class=sd> or render function.</span>
<a id=__codelineno-0-571 name=__codelineno-0-571></a><span class=sd> - `escape_slots_content` - Whether the content from `slots` should be escaped.</span>
<a id=__codelineno-0-572 name=__codelineno-0-572></a><span class=sd> - `context` - A context (dictionary or Django&#39;s Context) within which the component</span>
<a id=__codelineno-0-573 name=__codelineno-0-573></a><span class=sd> is rendered. The keys on the context can be accessed from within the template.</span>
<a id=__codelineno-0-574 name=__codelineno-0-574></a><span class=sd> - NOTE: In &quot;isolated&quot; mode, context is NOT accessible, and data MUST be passed via</span>
<a id=__codelineno-0-575 name=__codelineno-0-575></a><span class=sd> component&#39;s args and kwargs.</span>
<a id=__codelineno-0-576 name=__codelineno-0-576></a><span class=sd> - `type` - Configure how to handle JS and CSS dependencies.</span>
<a id=__codelineno-0-577 name=__codelineno-0-577></a><span class=sd> - `&quot;document&quot;` (default) - JS dependencies are inserted into `{% component_js_dependencies %}`,</span>
<a id=__codelineno-0-578 name=__codelineno-0-578></a><span class=sd> or to the end of the `&lt;body&gt;` tag. CSS dependencies are inserted into</span>
<a id=__codelineno-0-579 name=__codelineno-0-579></a><span class=sd> `{% component_css_dependencies %}`, or the end of the `&lt;head&gt;` tag.</span>
<a id=__codelineno-0-580 name=__codelineno-0-580></a><span class=sd> - `render_dependencies` - Set this to `False` if you want to insert the resulting HTML into another component.</span>
<a id=__codelineno-0-581 name=__codelineno-0-581></a>
<a id=__codelineno-0-582 name=__codelineno-0-582></a><span class=sd> Example:</span>
<a id=__codelineno-0-583 name=__codelineno-0-583></a><span class=sd> ```py</span>
<a id=__codelineno-0-584 name=__codelineno-0-584></a><span class=sd> MyComponent.render(</span>
<a id=__codelineno-0-585 name=__codelineno-0-585></a><span class=sd> args=[1, &quot;two&quot;, {}],</span>
<a id=__codelineno-0-586 name=__codelineno-0-586></a><span class=sd> kwargs={</span>
<a id=__codelineno-0-587 name=__codelineno-0-587></a><span class=sd> &quot;key&quot;: 123,</span>
<a id=__codelineno-0-588 name=__codelineno-0-588></a><span class=sd> },</span>
<a id=__codelineno-0-589 name=__codelineno-0-589></a><span class=sd> slots={</span>
<a id=__codelineno-0-590 name=__codelineno-0-590></a><span class=sd> &quot;header&quot;: &#39;STATIC TEXT HERE&#39;,</span>
<a id=__codelineno-0-591 name=__codelineno-0-591></a><span class=sd> &quot;footer&quot;: lambda ctx, slot_kwargs, slot_ref: f&#39;CTX: {ctx[&#39;hello&#39;]} SLOT_DATA: {slot_kwargs[&#39;abc&#39;]}&#39;,</span>
<a id=__codelineno-0-592 name=__codelineno-0-592></a><span class=sd> },</span>
<a id=__codelineno-0-593 name=__codelineno-0-593></a><span class=sd> escape_slots_content=False,</span>
<a id=__codelineno-0-594 name=__codelineno-0-594></a><span class=sd> )</span>
<a id=__codelineno-0-595 name=__codelineno-0-595></a><span class=sd> ```</span>
<a id=__codelineno-0-596 name=__codelineno-0-596></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-597 name=__codelineno-0-597></a> <span class=c1># This method may be called as class method or as instance method.</span>
<a id=__codelineno-0-598 name=__codelineno-0-598></a> <span class=c1># If called as class method, create a new instance.</span>
<a id=__codelineno-0-599 name=__codelineno-0-599></a> <span class=k>if</span> <span class=nb>isinstance</span><span class=p>(</span><span class=bp>cls</span><span class=p>,</span> <span class=n>Component</span><span class=p>):</span>
<a id=__codelineno-0-600 name=__codelineno-0-600></a> <span class=n>comp</span><span class=p>:</span> <span class=n>Component</span> <span class=o>=</span> <span class=bp>cls</span>
<a id=__codelineno-0-601 name=__codelineno-0-601></a> <span class=k>else</span><span class=p>:</span>
<a id=__codelineno-0-602 name=__codelineno-0-602></a> <span class=n>comp</span> <span class=o>=</span> <span class=bp>cls</span><span class=p>()</span>
<a id=__codelineno-0-603 name=__codelineno-0-603></a>
<a id=__codelineno-0-604 name=__codelineno-0-604></a> <span class=k>return</span> <span class=n>comp</span><span class=o>.</span><span class=n>_render</span><span class=p>(</span><span class=n>context</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>escape_slots_content</span><span class=p>,</span> <span class=nb>type</span><span class=p>,</span> <span class=n>render_dependencies</span><span class=p>)</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h3 id=django_components.DynamicComponent.render_to_response class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">render_to_response</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-classmethod"><code>classmethod</code></small> </span> <a href=#django_components.DynamicComponent.render_to_response class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>render_to_response</span><span class=p>(</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a> <span class=n>context</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Union href=https://docs.python.org/3.12/library/typing.html#typing.Union>Union</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Dict href=https://docs.python.org/3.12/library/typing.html#typing.Dict>Dict</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span> <span class=n><a class="autorefs autorefs-external" title=typing.Any href=https://docs.python.org/3.12/library/typing.html#typing.Any>Any</a></span><span class=p>],</span> <span class=n><span title=django.template.context.Context>Context</span></span><span class=p>]]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a> <span class=n>slots</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><span title=django_components.component.SlotsType>SlotsType</span></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a> <span class=n>escape_slots_content</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/functions.html#bool>bool</a></span> <span class=o>=</span> <span class=kc>True</span><span class=p>,</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a> <span class=n>args</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><span title=django_components.component.ArgsType>ArgsType</span></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-6 name=__codelineno-0-6 href=#__codelineno-0-6></a> <span class=n>kwargs</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><span title=django_components.component.KwargsType>KwargsType</span></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-7 name=__codelineno-0-7 href=#__codelineno-0-7></a> <span class=nb>type</span><span class=p>:</span> <span class=n><span title=django_components.dependencies.RenderType>RenderType</span></span> <span class=o>=</span> <span class=s2>&quot;document&quot;</span><span class=p>,</span>
<a id=__codelineno-0-8 name=__codelineno-0-8 href=#__codelineno-0-8></a> <span class=o>*</span><span class=n>response_args</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Any href=https://docs.python.org/3.12/library/typing.html#typing.Any>Any</a></span><span class=p>,</span>
<a id=__codelineno-0-9 name=__codelineno-0-9 href=#__codelineno-0-9></a> <span class=o>**</span><span class=n>response_kwargs</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Any href=https://docs.python.org/3.12/library/typing.html#typing.Any>Any</a></span>
<a id=__codelineno-0-10 name=__codelineno-0-10 href=#__codelineno-0-10></a><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-external" title=django.http.HttpResponse href=https://docs.djangoproject.com/en/5.0/ref/request-response/#django.http.HttpResponse>HttpResponse</a></span>
</code></pre></div> <div class="doc doc-contents "> <p>Render the component and wrap the content in the response class.</p> <p>The response class is taken from <code>Component.response_class</code>. Defaults to <code>django.http.HttpResponse</code>.</p> <p>This is the interface for the <code>django.views.View</code> class which allows us to use components as Django views with <code>component.as_view()</code>.</p> <p>Inputs: - <code>args</code> - Positional args for the component. This is the same as calling the component as <code>{% component "my_comp" arg1 arg2 ... %}</code> - <code>kwargs</code> - Kwargs for the component. This is the same as calling the component as <code>{% component "my_comp" key1=val1 key2=val2 ... %}</code> - <code>slots</code> - Component slot fills. This is the same as pasing <code>{% fill %}</code> tags to the component. Accepts a dictionary of <code>{ slot_name: slot_content }</code> where <code>slot_content</code> can be a string or render function. - <code>escape_slots_content</code> - Whether the content from <code>slots</code> should be escaped. - <code>context</code> - A context (dictionary or Django's Context) within which the component is rendered. The keys on the context can be accessed from within the template. - NOTE: In "isolated" mode, context is NOT accessible, and data MUST be passed via component's args and kwargs. - <code>type</code> - Configure how to handle JS and CSS dependencies. - <code>"document"</code> (default) - JS dependencies are inserted into <code>{% component_js_dependencies %}</code>, or to the end of the <code>&lt;body&gt;</code> tag. CSS dependencies are inserted into <code>{% component_css_dependencies %}</code>, or the end of the <code>&lt;head&gt;</code> tag.</p> <p>Any additional args and kwargs are passed to the <code>response_class</code>.</p> <p>Example: <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>MyComponent</span><span class=o>.</span><span class=n>render_to_response</span><span class=p>(</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a> <span class=n>args</span><span class=o>=</span><span class=p>[</span><span class=mi>1</span><span class=p>,</span> <span class=s2>&quot;two&quot;</span><span class=p>,</span> <span class=p>{}],</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a> <span class=n>kwargs</span><span class=o>=</span><span class=p>{</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a> <span class=s2>&quot;key&quot;</span><span class=p>:</span> <span class=mi>123</span><span class=p>,</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a> <span class=p>},</span>
<a id=__codelineno-0-6 name=__codelineno-0-6 href=#__codelineno-0-6></a> <span class=n>slots</span><span class=o>=</span><span class=p>{</span>
<a id=__codelineno-0-7 name=__codelineno-0-7 href=#__codelineno-0-7></a> <span class=s2>&quot;header&quot;</span><span class=p>:</span> <span class=s1>&#39;STATIC TEXT HERE&#39;</span><span class=p>,</span>
<a id=__codelineno-0-8 name=__codelineno-0-8 href=#__codelineno-0-8></a> <span class=s2>&quot;footer&quot;</span><span class=p>:</span> <span class=k>lambda</span> <span class=n>ctx</span><span class=p>,</span> <span class=n>slot_kwargs</span><span class=p>,</span> <span class=n>slot_ref</span><span class=p>:</span> <span class=sa>f</span><span class=s1>&#39;CTX: </span><span class=si>{</span><span class=n>ctx</span><span class=p>[</span><span class=s1>&#39;hello&#39;</span><span class=p>]</span><span class=si>}</span><span class=s1> SLOT_DATA: </span><span class=si>{</span><span class=n>slot_kwargs</span><span class=p>[</span><span class=s1>&#39;abc&#39;</span><span class=p>]</span><span class=si>}</span><span class=s1>&#39;</span><span class=p>,</span>
<a id=__codelineno-0-9 name=__codelineno-0-9 href=#__codelineno-0-9></a> <span class=p>},</span>
<a id=__codelineno-0-10 name=__codelineno-0-10 href=#__codelineno-0-10></a> <span class=n>escape_slots_content</span><span class=o>=</span><span class=kc>False</span><span class=p>,</span>
<a id=__codelineno-0-11 name=__codelineno-0-11 href=#__codelineno-0-11></a> <span class=c1># HttpResponse input</span>
<a id=__codelineno-0-12 name=__codelineno-0-12 href=#__codelineno-0-12></a> <span class=n>status</span><span class=o>=</span><span class=mi>201</span><span class=p>,</span>
<a id=__codelineno-0-13 name=__codelineno-0-13 href=#__codelineno-0-13></a> <span class=n>headers</span><span class=o>=</span><span class=p>{</span><span class=o>...</span><span class=p>},</span>
<a id=__codelineno-0-14 name=__codelineno-0-14 href=#__codelineno-0-14></a><span class=p>)</span>
<a id=__codelineno-0-15 name=__codelineno-0-15 href=#__codelineno-0-15></a><span class=c1># HttpResponse(content=..., status=201, headers=...)</span>
</code></pre></div></p> <details class=quote> <summary>Source code in <code>src/django_components/component.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-479>479</a></span>
<span class=normal><a href=#__codelineno-0-480>480</a></span>
<span class=normal><a href=#__codelineno-0-481>481</a></span>
<span class=normal><a href=#__codelineno-0-482>482</a></span>
<span class=normal><a href=#__codelineno-0-483>483</a></span>
<span class=normal><a href=#__codelineno-0-484>484</a></span>
<span class=normal><a href=#__codelineno-0-485>485</a></span>
<span class=normal><a href=#__codelineno-0-486>486</a></span>
<span class=normal><a href=#__codelineno-0-487>487</a></span>
<span class=normal><a href=#__codelineno-0-488>488</a></span>
<span class=normal><a href=#__codelineno-0-489>489</a></span>
<span class=normal><a href=#__codelineno-0-490>490</a></span>
<span class=normal><a href=#__codelineno-0-491>491</a></span>
<span class=normal><a href=#__codelineno-0-492>492</a></span>
<span class=normal><a href=#__codelineno-0-493>493</a></span>
<span class=normal><a href=#__codelineno-0-494>494</a></span>
<span class=normal><a href=#__codelineno-0-495>495</a></span>
<span class=normal><a href=#__codelineno-0-496>496</a></span>
<span class=normal><a href=#__codelineno-0-497>497</a></span>
<span class=normal><a href=#__codelineno-0-498>498</a></span>
<span class=normal><a href=#__codelineno-0-499>499</a></span>
<span class=normal><a href=#__codelineno-0-500>500</a></span>
<span class=normal><a href=#__codelineno-0-501>501</a></span>
<span class=normal><a href=#__codelineno-0-502>502</a></span>
<span class=normal><a href=#__codelineno-0-503>503</a></span>
<span class=normal><a href=#__codelineno-0-504>504</a></span>
<span class=normal><a href=#__codelineno-0-505>505</a></span>
<span class=normal><a href=#__codelineno-0-506>506</a></span>
<span class=normal><a href=#__codelineno-0-507>507</a></span>
<span class=normal><a href=#__codelineno-0-508>508</a></span>
<span class=normal><a href=#__codelineno-0-509>509</a></span>
<span class=normal><a href=#__codelineno-0-510>510</a></span>
<span class=normal><a href=#__codelineno-0-511>511</a></span>
<span class=normal><a href=#__codelineno-0-512>512</a></span>
<span class=normal><a href=#__codelineno-0-513>513</a></span>
<span class=normal><a href=#__codelineno-0-514>514</a></span>
<span class=normal><a href=#__codelineno-0-515>515</a></span>
<span class=normal><a href=#__codelineno-0-516>516</a></span>
<span class=normal><a href=#__codelineno-0-517>517</a></span>
<span class=normal><a href=#__codelineno-0-518>518</a></span>
<span class=normal><a href=#__codelineno-0-519>519</a></span>
<span class=normal><a href=#__codelineno-0-520>520</a></span>
<span class=normal><a href=#__codelineno-0-521>521</a></span>
<span class=normal><a href=#__codelineno-0-522>522</a></span>
<span class=normal><a href=#__codelineno-0-523>523</a></span>
<span class=normal><a href=#__codelineno-0-524>524</a></span>
<span class=normal><a href=#__codelineno-0-525>525</a></span>
<span class=normal><a href=#__codelineno-0-526>526</a></span>
<span class=normal><a href=#__codelineno-0-527>527</a></span>
<span class=normal><a href=#__codelineno-0-528>528</a></span>
<span class=normal><a href=#__codelineno-0-529>529</a></span>
<span class=normal><a href=#__codelineno-0-530>530</a></span>
<span class=normal><a href=#__codelineno-0-531>531</a></span>
<span class=normal><a href=#__codelineno-0-532>532</a></span>
<span class=normal><a href=#__codelineno-0-533>533</a></span>
<span class=normal><a href=#__codelineno-0-534>534</a></span>
<span class=normal><a href=#__codelineno-0-535>535</a></span>
<span class=normal><a href=#__codelineno-0-536>536</a></span>
<span class=normal><a href=#__codelineno-0-537>537</a></span>
<span class=normal><a href=#__codelineno-0-538>538</a></span>
<span class=normal><a href=#__codelineno-0-539>539</a></span>
<span class=normal><a href=#__codelineno-0-540>540</a></span>
<span class=normal><a href=#__codelineno-0-541>541</a></span>
<span class=normal><a href=#__codelineno-0-542>542</a></span>
<span class=normal><a href=#__codelineno-0-543>543</a></span>
<span class=normal><a href=#__codelineno-0-544>544</a></span>
<span class=normal><a href=#__codelineno-0-545>545</a></span>
<span class=normal><a href=#__codelineno-0-546>546</a></span>
<span class=normal><a href=#__codelineno-0-547>547</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-479 name=__codelineno-0-479></a><span class=nd>@classmethod</span>
<a id=__codelineno-0-480 name=__codelineno-0-480></a><span class=k>def</span> <span class=nf>render_to_response</span><span class=p>(</span>
<a id=__codelineno-0-481 name=__codelineno-0-481></a> <span class=bp>cls</span><span class=p>,</span>
<a id=__codelineno-0-482 name=__codelineno-0-482></a> <span class=n>context</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>Union</span><span class=p>[</span><span class=n>Dict</span><span class=p>[</span><span class=nb>str</span><span class=p>,</span> <span class=n>Any</span><span class=p>],</span> <span class=n>Context</span><span class=p>]]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-483 name=__codelineno-0-483></a> <span class=n>slots</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>SlotsType</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-484 name=__codelineno-0-484></a> <span class=n>escape_slots_content</span><span class=p>:</span> <span class=nb>bool</span> <span class=o>=</span> <span class=kc>True</span><span class=p>,</span>
<a id=__codelineno-0-485 name=__codelineno-0-485></a> <span class=n>args</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>ArgsType</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-486 name=__codelineno-0-486></a> <span class=n>kwargs</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>KwargsType</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-487 name=__codelineno-0-487></a> <span class=nb>type</span><span class=p>:</span> <span class=n>RenderType</span> <span class=o>=</span> <span class=s2>&quot;document&quot;</span><span class=p>,</span>
<a id=__codelineno-0-488 name=__codelineno-0-488></a> <span class=o>*</span><span class=n>response_args</span><span class=p>:</span> <span class=n>Any</span><span class=p>,</span>
<a id=__codelineno-0-489 name=__codelineno-0-489></a> <span class=o>**</span><span class=n>response_kwargs</span><span class=p>:</span> <span class=n>Any</span><span class=p>,</span>
<a id=__codelineno-0-490 name=__codelineno-0-490></a><span class=p>)</span> <span class=o>-&gt;</span> <span class=n>HttpResponse</span><span class=p>:</span>
<a id=__codelineno-0-491 name=__codelineno-0-491></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-492 name=__codelineno-0-492></a><span class=sd> Render the component and wrap the content in the response class.</span>
<a id=__codelineno-0-493 name=__codelineno-0-493></a>
<a id=__codelineno-0-494 name=__codelineno-0-494></a><span class=sd> The response class is taken from `Component.response_class`. Defaults to `django.http.HttpResponse`.</span>
<a id=__codelineno-0-495 name=__codelineno-0-495></a>
<a id=__codelineno-0-496 name=__codelineno-0-496></a><span class=sd> This is the interface for the `django.views.View` class which allows us to</span>
<a id=__codelineno-0-497 name=__codelineno-0-497></a><span class=sd> use components as Django views with `component.as_view()`.</span>
<a id=__codelineno-0-498 name=__codelineno-0-498></a>
<a id=__codelineno-0-499 name=__codelineno-0-499></a><span class=sd> Inputs:</span>
<a id=__codelineno-0-500 name=__codelineno-0-500></a><span class=sd> - `args` - Positional args for the component. This is the same as calling the component</span>
<a id=__codelineno-0-501 name=__codelineno-0-501></a><span class=sd> as `{% component &quot;my_comp&quot; arg1 arg2 ... %}`</span>
<a id=__codelineno-0-502 name=__codelineno-0-502></a><span class=sd> - `kwargs` - Kwargs for the component. This is the same as calling the component</span>
<a id=__codelineno-0-503 name=__codelineno-0-503></a><span class=sd> as `{% component &quot;my_comp&quot; key1=val1 key2=val2 ... %}`</span>
<a id=__codelineno-0-504 name=__codelineno-0-504></a><span class=sd> - `slots` - Component slot fills. This is the same as pasing `{% fill %}` tags to the component.</span>
<a id=__codelineno-0-505 name=__codelineno-0-505></a><span class=sd> Accepts a dictionary of `{ slot_name: slot_content }` where `slot_content` can be a string</span>
<a id=__codelineno-0-506 name=__codelineno-0-506></a><span class=sd> or render function.</span>
<a id=__codelineno-0-507 name=__codelineno-0-507></a><span class=sd> - `escape_slots_content` - Whether the content from `slots` should be escaped.</span>
<a id=__codelineno-0-508 name=__codelineno-0-508></a><span class=sd> - `context` - A context (dictionary or Django&#39;s Context) within which the component</span>
<a id=__codelineno-0-509 name=__codelineno-0-509></a><span class=sd> is rendered. The keys on the context can be accessed from within the template.</span>
<a id=__codelineno-0-510 name=__codelineno-0-510></a><span class=sd> - NOTE: In &quot;isolated&quot; mode, context is NOT accessible, and data MUST be passed via</span>
<a id=__codelineno-0-511 name=__codelineno-0-511></a><span class=sd> component&#39;s args and kwargs.</span>
<a id=__codelineno-0-512 name=__codelineno-0-512></a><span class=sd> - `type` - Configure how to handle JS and CSS dependencies.</span>
<a id=__codelineno-0-513 name=__codelineno-0-513></a><span class=sd> - `&quot;document&quot;` (default) - JS dependencies are inserted into `{% component_js_dependencies %}`,</span>
<a id=__codelineno-0-514 name=__codelineno-0-514></a><span class=sd> or to the end of the `&lt;body&gt;` tag. CSS dependencies are inserted into</span>
<a id=__codelineno-0-515 name=__codelineno-0-515></a><span class=sd> `{% component_css_dependencies %}`, or the end of the `&lt;head&gt;` tag.</span>
<a id=__codelineno-0-516 name=__codelineno-0-516></a>
<a id=__codelineno-0-517 name=__codelineno-0-517></a><span class=sd> Any additional args and kwargs are passed to the `response_class`.</span>
<a id=__codelineno-0-518 name=__codelineno-0-518></a>
<a id=__codelineno-0-519 name=__codelineno-0-519></a><span class=sd> Example:</span>
<a id=__codelineno-0-520 name=__codelineno-0-520></a><span class=sd> ```py</span>
<a id=__codelineno-0-521 name=__codelineno-0-521></a><span class=sd> MyComponent.render_to_response(</span>
<a id=__codelineno-0-522 name=__codelineno-0-522></a><span class=sd> args=[1, &quot;two&quot;, {}],</span>
<a id=__codelineno-0-523 name=__codelineno-0-523></a><span class=sd> kwargs={</span>
<a id=__codelineno-0-524 name=__codelineno-0-524></a><span class=sd> &quot;key&quot;: 123,</span>
<a id=__codelineno-0-525 name=__codelineno-0-525></a><span class=sd> },</span>
<a id=__codelineno-0-526 name=__codelineno-0-526></a><span class=sd> slots={</span>
<a id=__codelineno-0-527 name=__codelineno-0-527></a><span class=sd> &quot;header&quot;: &#39;STATIC TEXT HERE&#39;,</span>
<a id=__codelineno-0-528 name=__codelineno-0-528></a><span class=sd> &quot;footer&quot;: lambda ctx, slot_kwargs, slot_ref: f&#39;CTX: {ctx[&#39;hello&#39;]} SLOT_DATA: {slot_kwargs[&#39;abc&#39;]}&#39;,</span>
<a id=__codelineno-0-529 name=__codelineno-0-529></a><span class=sd> },</span>
<a id=__codelineno-0-530 name=__codelineno-0-530></a><span class=sd> escape_slots_content=False,</span>
<a id=__codelineno-0-531 name=__codelineno-0-531></a><span class=sd> # HttpResponse input</span>
<a id=__codelineno-0-532 name=__codelineno-0-532></a><span class=sd> status=201,</span>
<a id=__codelineno-0-533 name=__codelineno-0-533></a><span class=sd> headers={...},</span>
<a id=__codelineno-0-534 name=__codelineno-0-534></a><span class=sd> )</span>
<a id=__codelineno-0-535 name=__codelineno-0-535></a><span class=sd> # HttpResponse(content=..., status=201, headers=...)</span>
<a id=__codelineno-0-536 name=__codelineno-0-536></a><span class=sd> ```</span>
<a id=__codelineno-0-537 name=__codelineno-0-537></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-538 name=__codelineno-0-538></a> <span class=n>content</span> <span class=o>=</span> <span class=bp>cls</span><span class=o>.</span><span class=n>render</span><span class=p>(</span>
<a id=__codelineno-0-539 name=__codelineno-0-539></a> <span class=n>args</span><span class=o>=</span><span class=n>args</span><span class=p>,</span>
<a id=__codelineno-0-540 name=__codelineno-0-540></a> <span class=n>kwargs</span><span class=o>=</span><span class=n>kwargs</span><span class=p>,</span>
<a id=__codelineno-0-541 name=__codelineno-0-541></a> <span class=n>context</span><span class=o>=</span><span class=n>context</span><span class=p>,</span>
<a id=__codelineno-0-542 name=__codelineno-0-542></a> <span class=n>slots</span><span class=o>=</span><span class=n>slots</span><span class=p>,</span>
<a id=__codelineno-0-543 name=__codelineno-0-543></a> <span class=n>escape_slots_content</span><span class=o>=</span><span class=n>escape_slots_content</span><span class=p>,</span>
<a id=__codelineno-0-544 name=__codelineno-0-544></a> <span class=nb>type</span><span class=o>=</span><span class=nb>type</span><span class=p>,</span>
<a id=__codelineno-0-545 name=__codelineno-0-545></a> <span class=n>render_dependencies</span><span class=o>=</span><span class=kc>True</span><span class=p>,</span>
<a id=__codelineno-0-546 name=__codelineno-0-546></a> <span class=p>)</span>
<a id=__codelineno-0-547 name=__codelineno-0-547></a> <span class=k>return</span> <span class=bp>cls</span><span class=o>.</span><span class=n>response_class</span><span class=p>(</span><span class=n>content</span><span class=p>,</span> <span class=o>*</span><span class=n>response_args</span><span class=p>,</span> <span class=o>**</span><span class=n>response_kwargs</span><span class=p>)</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> </div> </div> </div> <div class="doc doc-object doc-class"> <h2 id=django_components.EmptyDict class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-class"></code> <span class="doc doc-object-name doc-class-name">EmptyDict</span> <a href=#django_components.EmptyDict class=headerlink title="Permanent link">¤</a></h2> <div class="doc doc-contents "> <p class="doc doc-class-bases"> Bases: <code><span title=typing_extensions.TypedDict>TypedDict</span></code></p> <p>TypedDict with no members.</p> <p>You can use this to define a <a href=../api#django_components.Component>Component</a> that accepts NO kwargs, or NO slots, or returns NO data from <a href=../api#django_components.Component.get_context_data><code>Component.get_context_data()</code></a> / <a href=../api#django_components.Component.get_js_data><code>Component.get_js_data()</code></a> / <a href=../api#django_components.Component.get_css_data><code>Component.get_css_data()</code></a>:</p> <p>Accepts NO kwargs:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=kn>from</span> <span class=nn>django_components</span> <span class=kn>import</span> <span class=n>Component</span><span class=p>,</span> <span class=n>EmptyDict</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=k>class</span> <span class=nc>Table</span><span class=p>(</span><span class=n>Component</span><span class=p>(</span><span class=n>Any</span><span class=p>,</span> <span class=n>EmptyDict</span><span class=p>,</span> <span class=n>Any</span><span class=p>,</span> <span class=n>Any</span><span class=p>,</span> <span class=n>Any</span><span class=p>,</span> <span class=n>Any</span><span class=p>))</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a> <span class=o>...</span>
</code></pre></div> <p>Accepts NO slots:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-1-1 name=__codelineno-1-1 href=#__codelineno-1-1></a><span class=kn>from</span> <span class=nn>django_components</span> <span class=kn>import</span> <span class=n>Component</span><span class=p>,</span> <span class=n>EmptyDict</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=nc>Table</span><span class=p>(</span><span class=n>Component</span><span class=p>(</span><span class=n>Any</span><span class=p>,</span> <span class=n>Any</span><span class=p>,</span> <span class=n>EmptyDict</span><span class=p>,</span> <span class=n>Any</span><span class=p>,</span> <span class=n>Any</span><span class=p>,</span> <span class=n>Any</span><span class=p>))</span>
<a id=__codelineno-1-4 name=__codelineno-1-4 href=#__codelineno-1-4></a> <span class=o>...</span>
</code></pre></div> <p>Returns NO data from <code>get_context_data()</code>:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-2-1 name=__codelineno-2-1 href=#__codelineno-2-1></a><span class=kn>from</span> <span class=nn>django_components</span> <span class=kn>import</span> <span class=n>Component</span><span class=p>,</span> <span class=n>EmptyDict</span>
<a id=__codelineno-2-2 name=__codelineno-2-2 href=#__codelineno-2-2></a>
<a id=__codelineno-2-3 name=__codelineno-2-3 href=#__codelineno-2-3></a><span class=k>class</span> <span class=nc>Table</span><span class=p>(</span><span class=n>Component</span><span class=p>(</span><span class=n>Any</span><span class=p>,</span> <span class=n>Any</span><span class=p>,</span> <span class=n>Any</span><span class=p>,</span> <span class=n>EmptyDict</span><span class=p>,</span> <span class=n>Any</span><span class=p>,</span> <span class=n>Any</span><span class=p>))</span>
<a id=__codelineno-2-4 name=__codelineno-2-4 href=#__codelineno-2-4></a> <span class=o>...</span>
</code></pre></div> <p>Going back to the example with NO kwargs, when you then call <a href=../api#django_components.Component.render><code>Component.render()</code></a> or <a href=../api#django_components.Component.render_to_response><code>Component.render_to_response()</code></a>, the <code>kwargs</code> parameter will raise type error if <code>kwargs</code> is anything else than an empty dict.</p> <div class=highlight><pre><span></span><code><a id=__codelineno-3-1 name=__codelineno-3-1 href=#__codelineno-3-1></a><span class=n>Table</span><span class=o>.</span><span class=n>render</span><span class=p>(</span>
<a id=__codelineno-3-2 name=__codelineno-3-2 href=#__codelineno-3-2></a> <span class=n>kwargs</span><span class=p>:</span> <span class=p>{},</span>
<a id=__codelineno-3-3 name=__codelineno-3-3 href=#__codelineno-3-3></a><span class=p>)</span>
</code></pre></div> <p>Omitting <code>kwargs</code> is also fine:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-4-1 name=__codelineno-4-1 href=#__codelineno-4-1></a><span class=n>Table</span><span class=o>.</span><span class=n>render</span><span class=p>()</span>
</code></pre></div> <p>Other values are not allowed. This will raise an error with MyPy:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-5-1 name=__codelineno-5-1 href=#__codelineno-5-1></a><span class=n>Table</span><span class=o>.</span><span class=n>render</span><span class=p>(</span>
<a id=__codelineno-5-2 name=__codelineno-5-2 href=#__codelineno-5-2></a> <span class=n>kwargs</span><span class=p>:</span> <span class=p>{</span>
<a id=__codelineno-5-3 name=__codelineno-5-3 href=#__codelineno-5-3></a> <span class=s2>&quot;one&quot;</span><span class=p>:</span> <span class=mi>2</span><span class=p>,</span>
<a id=__codelineno-5-4 name=__codelineno-5-4 href=#__codelineno-5-4></a> <span class=s2>&quot;three&quot;</span><span class=p>:</span> <span class=mi>4</span><span class=p>,</span>
<a id=__codelineno-5-5 name=__codelineno-5-5 href=#__codelineno-5-5></a> <span class=p>},</span>
<a id=__codelineno-5-6 name=__codelineno-5-6 href=#__codelineno-5-6></a><span class=p>)</span>
</code></pre></div> </div> </div> <div class="doc doc-object doc-class"> <h2 id=django_components.NotRegistered class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-class"></code> <span class="doc doc-object-name doc-class-name">NotRegistered</span> <a href=#django_components.NotRegistered class=headerlink title="Permanent link">¤</a></h2> <div class="doc doc-contents "> <p class="doc doc-class-bases"> Bases: <code><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/exceptions.html#Exception>Exception</a></code></p> <p>Raised when you try to access a <a href=../api#django_components#Component>Component</a>, but it's NOT registered with given <a href=../api#django_components.ComponentRegistry>ComponentRegistry</a>.</p> </div> </div> <div class="doc doc-object doc-class"> <h2 id=django_components.RegistrySettings class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-class"></code> <span class="doc doc-object-name doc-class-name">RegistrySettings</span> <a href=#django_components.RegistrySettings class=headerlink title="Permanent link">¤</a></h2> <div class="doc doc-contents "> <p class="doc doc-class-bases"> Bases: <code><a class="autorefs autorefs-external" title=typing.NamedTuple href=https://docs.python.org/3.12/library/typing.html#typing.NamedTuple>NamedTuple</a></code></p> <p>Configuration for a <a href=../api#django_components.ComponentRegistry><code>ComponentRegistry</code></a>.</p> <p>These settings define how the components registered with this registry will behave when rendered.</p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=kn>from</span> <span class=nn>django_components</span> <span class=kn>import</span> <span class=n>ComponentRegistry</span><span class=p>,</span> <span class=n>RegistrySettings</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=n>registry_settings</span> <span class=o>=</span> <span class=n>RegistrySettings</span><span class=p>(</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a> <span class=n>context_behavior</span><span class=o>=</span><span class=s2>&quot;django&quot;</span><span class=p>,</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a> <span class=n>tag_formatter</span><span class=o>=</span><span class=s2>&quot;django_components.component_shorthand_formatter&quot;</span><span class=p>,</span>
<a id=__codelineno-0-6 name=__codelineno-0-6 href=#__codelineno-0-6></a><span class=p>)</span>
<a id=__codelineno-0-7 name=__codelineno-0-7 href=#__codelineno-0-7></a>
<a id=__codelineno-0-8 name=__codelineno-0-8 href=#__codelineno-0-8></a><span class=n>registry</span> <span class=o>=</span> <span class=n>ComponentRegistry</span><span class=p>(</span><span class=n>settings</span><span class=o>=</span><span class=n>registry_settings</span><span class=p>)</span>
</code></pre></div> <p><span class=doc-section-title>Attributes:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.RegistrySettings.CONTEXT_BEHAVIOR href=#django_components.RegistrySettings.CONTEXT_BEHAVIOR>CONTEXT_BEHAVIOR</a></code></b> (<code><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a>[<span title=django_components.app_settings.ContextBehaviorType>ContextBehaviorType</span>]</code>) <div class=doc-md-description> <p><em>Deprecated. Use <code>context_behavior</code> instead. Will be removed in v1.</em></p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.RegistrySettings.TAG_FORMATTER href=#django_components.RegistrySettings.TAG_FORMATTER>TAG_FORMATTER</a></code></b> (<code><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a>[<a class="autorefs autorefs-external" title=typing.Union href=https://docs.python.org/3.12/library/typing.html#typing.Union>Union</a>[<a class="autorefs autorefs-internal" title=django_components.tag_formatter.TagFormatterABC href=#django_components.tag_formatter.TagFormatterABC>TagFormatterABC</a>, <a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>]]</code>) <div class=doc-md-description> <p><em>Deprecated. Use <code>tag_formatter</code> instead. Will be removed in v1.</em></p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.RegistrySettings.context_behavior href=#django_components.RegistrySettings.context_behavior>context_behavior</a></code></b> (<code><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a>[<span title=django_components.app_settings.ContextBehaviorType>ContextBehaviorType</span>]</code>) <div class=doc-md-description> <p>Same as the global</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.RegistrySettings.tag_formatter href=#django_components.RegistrySettings.tag_formatter>tag_formatter</a></code></b> (<code><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a>[<a class="autorefs autorefs-external" title=typing.Union href=https://docs.python.org/3.12/library/typing.html#typing.Union>Union</a>[<a class="autorefs autorefs-internal" title=django_components.tag_formatter.TagFormatterABC href=#django_components.tag_formatter.TagFormatterABC>TagFormatterABC</a>, <a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>]]</code>) <div class=doc-md-description> <p>Same as the global</p> </div> </li> </ul> <div class="doc doc-children"> <div class="doc doc-object doc-attribute"> <h3 id=django_components.RegistrySettings.CONTEXT_BEHAVIOR class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">CONTEXT_BEHAVIOR</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.RegistrySettings.CONTEXT_BEHAVIOR class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>CONTEXT_BEHAVIOR</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><span title=django_components.app_settings.ContextBehaviorType>ContextBehaviorType</span></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p><em>Deprecated. Use <code>context_behavior</code> instead. Will be removed in v1.</em></p> <p>Same as the global <a href=../settings#django_components.app_settings.ComponentsSettings.context_behavior><code>COMPONENTS.context_behavior</code></a> setting, but for this registry.</p> <p>If omitted, defaults to the global <a href=../settings#django_components.app_settings.ComponentsSettings.context_behavior><code>COMPONENTS.context_behavior</code></a> setting.</p> </div> </div> <div class="doc doc-object doc-attribute"> <h3 id=django_components.RegistrySettings.TAG_FORMATTER class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">TAG_FORMATTER</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.RegistrySettings.TAG_FORMATTER class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>TAG_FORMATTER</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Union href=https://docs.python.org/3.12/library/typing.html#typing.Union>Union</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-internal" title=django_components.tag_formatter.TagFormatterABC href=#django_components.tag_formatter.TagFormatterABC>TagFormatterABC</a></span><span class=p>,</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]]</span> <span class=o>=</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p><em>Deprecated. Use <code>tag_formatter</code> instead. Will be removed in v1.</em></p> <p>Same as the global <a href=../settings#django_components.app_settings.ComponentsSettings.tag_formatter><code>COMPONENTS.tag_formatter</code></a> setting, but for this registry.</p> <p>If omitted, defaults to the global <a href=../settings#django_components.app_settings.ComponentsSettings.tag_formatter><code>COMPONENTS.tag_formatter</code></a> setting.</p> </div> </div> <div class="doc doc-object doc-attribute"> <h3 id=django_components.RegistrySettings.context_behavior class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">context_behavior</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.RegistrySettings.context_behavior class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>context_behavior</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><span title=django_components.app_settings.ContextBehaviorType>ContextBehaviorType</span></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>Same as the global <a href=../settings#django_components.app_settings.ComponentsSettings.context_behavior><code>COMPONENTS.context_behavior</code></a> setting, but for this registry.</p> <p>If omitted, defaults to the global <a href=../settings#django_components.app_settings.ComponentsSettings.context_behavior><code>COMPONENTS.context_behavior</code></a> setting.</p> </div> </div> <div class="doc doc-object doc-attribute"> <h3 id=django_components.RegistrySettings.tag_formatter class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">tag_formatter</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.RegistrySettings.tag_formatter class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>tag_formatter</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Union href=https://docs.python.org/3.12/library/typing.html#typing.Union>Union</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-internal" title=django_components.tag_formatter.TagFormatterABC href=#django_components.tag_formatter.TagFormatterABC>TagFormatterABC</a></span><span class=p>,</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]]</span> <span class=o>=</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>Same as the global <a href=../settings#django_components.app_settings.ComponentsSettings.tag_formatter><code>COMPONENTS.tag_formatter</code></a> setting, but for this registry.</p> <p>If omitted, defaults to the global <a href=../settings#django_components.app_settings.ComponentsSettings.tag_formatter><code>COMPONENTS.tag_formatter</code></a> setting.</p> </div> </div> </div> </div> </div> <div class="doc doc-object doc-class"> <h2 id=django_components.ShorthandComponentFormatter class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-class"></code> <span class="doc doc-object-name doc-class-name">ShorthandComponentFormatter</span> <a href=#django_components.ShorthandComponentFormatter class=headerlink title="Permanent link">¤</a></h2> <div class="doc doc-contents "> <p class="doc doc-class-bases"> Bases: <code><a class="autorefs autorefs-internal" title=django_components.tag_formatter.TagFormatterABC href=#django_components.tag_formatter.TagFormatterABC>TagFormatterABC</a></code></p> <p>The component tag formatter that uses <code>{% &lt;name&gt; %}</code> / <code>{% end&lt;name&gt; %}</code> tags.</p> <p>This is similar to <a href=https://github.com/Xzya/django-web-components>django-web-components</a> and <a href=https://github.com/mixxorz/slippers>django-slippers</a> syntax.</p> <p>Example as block: <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=cp>{%</span> <span class=k>mycomp</span> <span class=nv>abc</span><span class=o>=</span><span class=m>123</span> <span class=cp>%}</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a><span class=x> </span><span class=cp>{%</span> <span class=k>fill</span> <span class=s2>&quot;myfill&quot;</span> <span class=cp>%}</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=x> ...</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a><span class=x> </span><span class=cp>{%</span> <span class=k>endfill</span> <span class=cp>%}</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a><span class=cp>{%</span> <span class=k>endmycomp</span> <span class=cp>%}</span>
</code></pre></div></p> <p>Example as inlined tag: <div class=highlight><pre><span></span><code><a id=__codelineno-1-1 name=__codelineno-1-1 href=#__codelineno-1-1></a><span class=cp>{%</span> <span class=k>mycomp</span> <span class=nv>abc</span><span class=o>=</span><span class=m>123</span> <span class=o>/</span> <span class=cp>%}</span>
</code></pre></div></p> <div class="doc doc-children"> </div> </div> </div> <div class="doc doc-object doc-class"> <h2 id=django_components.Slot class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-class"></code> <span class="doc doc-object-name doc-class-name">Slot</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-dataclass"><code>dataclass</code></small> </span> <a href=#django_components.Slot class=headerlink title="Permanent link">¤</a></h2> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>Slot</span><span class=p>(</span><span class=n>content_func</span><span class=p>:</span> <span class=n><span title=django_components.slots.SlotFunc>SlotFunc</span></span><span class=p>[</span><span class=n><span title=django_components.slots.TSlotData>TSlotData</span></span><span class=p>])</span>
</code></pre></div> <div class="doc doc-contents "> <p class="doc doc-class-bases"> Bases: <code><a class="autorefs autorefs-external" title=typing.Generic href=https://docs.python.org/3.12/library/typing.html#typing.Generic>Generic</a>[<span title=django_components.slots.TSlotData>TSlotData</span>]</code></p> <p>This class holds the slot content function along with related metadata.</p> <div class="doc doc-children"> </div> </div> </div> <div class="doc doc-object doc-class"> <h2 id=django_components.SlotRef class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-class"></code> <span class="doc doc-object-name doc-class-name">SlotRef</span> <a href=#django_components.SlotRef class=headerlink title="Permanent link">¤</a></h2> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>SlotRef</span><span class=p>(</span><span class=n>slot</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-internal" title=django_components.slots.SlotNode href=#django_components.slots.SlotNode>SlotNode</a></span><span class=p>,</span> <span class=n>context</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=django.template.Context href=https://docs.djangoproject.com/en/5.0/ref/templates/api/#django.template.Context>Context</a></span><span class=p>)</span>
</code></pre></div> <div class="doc doc-contents "> <p>SlotRef allows to treat a slot as a variable. The slot is rendered only once the instance is coerced to string.</p> <p>This is used to access slots as variables inside the templates. When a SlotRef is rendered in the template with <code>{{ my_lazy_slot }}</code>, it will output the contents of the slot.</p> <details class=quote> <summary>Source code in <code>src/django_components/slots.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-121>121</a></span>
<span class=normal><a href=#__codelineno-0-122>122</a></span>
<span class=normal><a href=#__codelineno-0-123>123</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-121 name=__codelineno-0-121></a><span class=k>def</span> <span class=fm>__init__</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>slot</span><span class=p>:</span> <span class=s2>&quot;SlotNode&quot;</span><span class=p>,</span> <span class=n>context</span><span class=p>:</span> <span class=n>Context</span><span class=p>):</span>
<a id=__codelineno-0-122 name=__codelineno-0-122></a> <span class=bp>self</span><span class=o>.</span><span class=n>_slot</span> <span class=o>=</span> <span class=n>slot</span>
<a id=__codelineno-0-123 name=__codelineno-0-123></a> <span class=bp>self</span><span class=o>.</span><span class=n>_context</span> <span class=o>=</span> <span class=n>context</span>
</code></pre></div></td></tr></table></div> </details> <div class="doc doc-children"> </div> </div> </div> <div class="doc doc-object doc-class"> <h2 id=django_components.TagFormatterABC class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-class"></code> <span class="doc doc-object-name doc-class-name">TagFormatterABC</span> <a href=#django_components.TagFormatterABC class=headerlink title="Permanent link">¤</a></h2> <div class="doc doc-contents "> <p class="doc doc-class-bases"> Bases: <code><a class="autorefs autorefs-external" title=abc.ABC href=https://docs.python.org/3.12/library/abc.html#abc.ABC>ABC</a></code></p> <p>Abstract base class for defining custom tag formatters.</p> <p>Tag formatters define how the component tags are used in the template.</p> <p>Read more about <a href=../../concepts/advanced/tag_formatter>Tag formatter</a>.</p> <p>For example, with the default tag formatter (<a href=../tag_formatters#django_components.tag_formatter.ComponentFormatter><code>ComponentFormatter</code></a>), components are written as:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=cp>{%</span> <span class=k>component</span> <span class=s2>&quot;comp_name&quot;</span> <span class=cp>%}</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a><span class=cp>{%</span> <span class=k>endcomponent</span> <span class=cp>%}</span>
</code></pre></div> <p>While with the shorthand tag formatter (<a href=../tag_formatters#django_components.tag_formatter.ShorthandComponentFormatter><code>ShorthandComponentFormatter</code></a>), components are written as: <div class=highlight><pre><span></span><code><a id=__codelineno-1-1 name=__codelineno-1-1 href=#__codelineno-1-1></a><span class=cp>{%</span> <span class=k>comp_name</span> <span class=cp>%}</span>
<a id=__codelineno-1-2 name=__codelineno-1-2 href=#__codelineno-1-2></a><span class=cp>{%</span> <span class=k>endcomp_name</span> <span class=cp>%}</span>
</code></pre></div></p> <p><strong>Example:</strong></p> <p>Implementation for <code>ShorthandComponentFormatter</code>:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-2-1 name=__codelineno-2-1 href=#__codelineno-2-1></a><span class=kn>from</span> <span class=nn>djagno_components</span> <span class=kn>import</span> <span class=n>TagFormatterABC</span><span class=p>,</span> <span class=n>TagResult</span>
<a id=__codelineno-2-2 name=__codelineno-2-2 href=#__codelineno-2-2></a>
<a id=__codelineno-2-3 name=__codelineno-2-3 href=#__codelineno-2-3></a><span class=k>class</span> <span class=nc>ShorthandComponentFormatter</span><span class=p>(</span><span class=n>TagFormatterABC</span><span class=p>):</span>
<a id=__codelineno-2-4 name=__codelineno-2-4 href=#__codelineno-2-4></a> <span class=k>def</span> <span class=nf>start_tag</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>name</span><span class=p>:</span> <span class=nb>str</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=nb>str</span><span class=p>:</span>
<a id=__codelineno-2-5 name=__codelineno-2-5 href=#__codelineno-2-5></a> <span class=k>return</span> <span class=n>name</span>
<a id=__codelineno-2-6 name=__codelineno-2-6 href=#__codelineno-2-6></a>
<a id=__codelineno-2-7 name=__codelineno-2-7 href=#__codelineno-2-7></a> <span class=k>def</span> <span class=nf>end_tag</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>name</span><span class=p>:</span> <span class=nb>str</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=nb>str</span><span class=p>:</span>
<a id=__codelineno-2-8 name=__codelineno-2-8 href=#__codelineno-2-8></a> <span class=k>return</span> <span class=sa>f</span><span class=s2>&quot;end</span><span class=si>{</span><span class=n>name</span><span class=si>}</span><span class=s2>&quot;</span>
<a id=__codelineno-2-9 name=__codelineno-2-9 href=#__codelineno-2-9></a>
<a id=__codelineno-2-10 name=__codelineno-2-10 href=#__codelineno-2-10></a> <span class=k>def</span> <span class=nf>parse</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>tokens</span><span class=p>:</span> <span class=n>List</span><span class=p>[</span><span class=nb>str</span><span class=p>])</span> <span class=o>-&gt;</span> <span class=n>TagResult</span><span class=p>:</span>
<a id=__codelineno-2-11 name=__codelineno-2-11 href=#__codelineno-2-11></a> <span class=n>tokens</span> <span class=o>=</span> <span class=p>[</span><span class=o>*</span><span class=n>tokens</span><span class=p>]</span>
<a id=__codelineno-2-12 name=__codelineno-2-12 href=#__codelineno-2-12></a> <span class=n>name</span> <span class=o>=</span> <span class=n>tokens</span><span class=o>.</span><span class=n>pop</span><span class=p>(</span><span class=mi>0</span><span class=p>)</span>
<a id=__codelineno-2-13 name=__codelineno-2-13 href=#__codelineno-2-13></a> <span class=k>return</span> <span class=n>TagResult</span><span class=p>(</span><span class=n>name</span><span class=p>,</span> <span class=n>tokens</span><span class=p>)</span>
</code></pre></div> <p><span class=doc-section-title>Methods:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.TagFormatterABC.end_tag href=#django_components.TagFormatterABC.end_tag>end_tag</a></code></b> <div class=doc-md-description> <p>Formats the end tag of a block component.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.TagFormatterABC.parse href=#django_components.TagFormatterABC.parse>parse</a></code></b> <div class=doc-md-description> <p>Given the tokens (words) passed to a component start tag, this function extracts</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.TagFormatterABC.start_tag href=#django_components.TagFormatterABC.start_tag>start_tag</a></code></b> <div class=doc-md-description> <p>Formats the start tag of a component.</p> </div> </li> </ul> <div class="doc doc-children"> <div class="doc doc-object doc-function"> <h3 id=django_components.TagFormatterABC.end_tag class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">end_tag</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-abstractmethod"><code>abstractmethod</code></small> </span> <a href=#django_components.TagFormatterABC.end_tag class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>end_tag</span><span class=p>(</span><span class=n>name</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span>
</code></pre></div> <div class="doc doc-contents "> <p>Formats the end tag of a block component.</p> <p><span class=doc-section-title>Parameters:</span></p> <ul> <li class="doc-section-item field-body"> <b><code>name</code></b> (<code><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></code>) <div class=doc-md-description> <p>Component's registered name. Required.</p> </div> </li> </ul> <p><span class=doc-section-title>Returns:</span></p> <ul> <li class="doc-section-item field-body"> <b><code>str</code></b> ( <code><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></code> ) <div class=doc-md-description> <p>The formatted end tag.</p> </div> </li> </ul> <details class=quote> <summary>Source code in <code>src/django_components/tag_formatter.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-115>115</a></span>
<span class=normal><a href=#__codelineno-0-116>116</a></span>
<span class=normal><a href=#__codelineno-0-117>117</a></span>
<span class=normal><a href=#__codelineno-0-118>118</a></span>
<span class=normal><a href=#__codelineno-0-119>119</a></span>
<span class=normal><a href=#__codelineno-0-120>120</a></span>
<span class=normal><a href=#__codelineno-0-121>121</a></span>
<span class=normal><a href=#__codelineno-0-122>122</a></span>
<span class=normal><a href=#__codelineno-0-123>123</a></span>
<span class=normal><a href=#__codelineno-0-124>124</a></span>
<span class=normal><a href=#__codelineno-0-125>125</a></span>
<span class=normal><a href=#__codelineno-0-126>126</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-115 name=__codelineno-0-115></a><span class=nd>@abc</span><span class=o>.</span><span class=n>abstractmethod</span>
<a id=__codelineno-0-116 name=__codelineno-0-116></a><span class=k>def</span> <span class=nf>end_tag</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>name</span><span class=p>:</span> <span class=nb>str</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=nb>str</span><span class=p>:</span>
<a id=__codelineno-0-117 name=__codelineno-0-117></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-118 name=__codelineno-0-118></a><span class=sd> Formats the end tag of a block component.</span>
<a id=__codelineno-0-119 name=__codelineno-0-119></a>
<a id=__codelineno-0-120 name=__codelineno-0-120></a><span class=sd> Args:</span>
<a id=__codelineno-0-121 name=__codelineno-0-121></a><span class=sd> name (str): Component&#39;s registered name. Required.</span>
<a id=__codelineno-0-122 name=__codelineno-0-122></a>
<a id=__codelineno-0-123 name=__codelineno-0-123></a><span class=sd> Returns:</span>
<a id=__codelineno-0-124 name=__codelineno-0-124></a><span class=sd> str: The formatted end tag.</span>
<a id=__codelineno-0-125 name=__codelineno-0-125></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-126 name=__codelineno-0-126></a> <span class=o>...</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h3 id=django_components.TagFormatterABC.parse class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">parse</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-abstractmethod"><code>abstractmethod</code></small> </span> <a href=#django_components.TagFormatterABC.parse class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>parse</span><span class=p>(</span><span class=n>tokens</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.List href=https://docs.python.org/3.12/library/typing.html#typing.List>List</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>])</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-internal" title=django_components.tag_formatter.TagResult href=#django_components.tag_formatter.TagResult>TagResult</a></span>
</code></pre></div> <div class="doc doc-contents "> <p>Given the tokens (words) passed to a component start tag, this function extracts the component name from the tokens list, and returns <a href=../api#django_components.TagResult><code>TagResult</code></a>, which is a tuple of <code>(component_name, remaining_tokens)</code>.</p> <p><span class=doc-section-title>Parameters:</span></p> <ul> <li class="doc-section-item field-body"> <b><code>tokens</code></b> (<code>[List(str]</code>) <div class=doc-md-description> <p>List of tokens passed to the component tag.</p> </div> </li> </ul> <p><span class=doc-section-title>Returns:</span></p> <ul> <li class="doc-section-item field-body"> <b><code>TagResult</code></b> ( <code><a class="autorefs autorefs-internal" title=django_components.tag_formatter.TagResult href=#django_components.tag_formatter.TagResult>TagResult</a></code> ) <div class=doc-md-description> <p>Parsed component name and remaining tokens.</p> </div> </li> </ul> <p><strong>Example:</strong></p> <p>Assuming we used a component in a template like this:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=cp>{%</span> <span class=k>component</span> <span class=s2>&quot;my_comp&quot;</span> <span class=nv>key</span><span class=o>=</span><span class=nv>val</span> <span class=nv>key2</span><span class=o>=</span><span class=nv>val2</span> <span class=cp>%}</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a><span class=cp>{%</span> <span class=k>endcomponent</span> <span class=cp>%}</span>
</code></pre></div> <p>This function receives a list of tokens:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-1-1 name=__codelineno-1-1 href=#__codelineno-1-1></a><span class=p>[</span><span class=s1>&#39;component&#39;</span><span class=p>,</span> <span class=s1>&#39;&quot;my_comp&quot;&#39;</span><span class=p>,</span> <span class=s1>&#39;key=val&#39;</span><span class=p>,</span> <span class=s1>&#39;key2=val2&#39;</span><span class=p>]</span>
</code></pre></div> <ul> <li><code>component</code> is the tag name, which we drop.</li> <li><code>"my_comp"</code> is the component name, but we must remove the extra quotes.</li> <li>The remaining tokens we pass unmodified, as that's the input to the component.</li> </ul> <p>So in the end, we return:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-2-1 name=__codelineno-2-1 href=#__codelineno-2-1></a><span class=n>TagResult</span><span class=p>(</span><span class=s1>&#39;my_comp&#39;</span><span class=p>,</span> <span class=p>[</span><span class=s1>&#39;key=val&#39;</span><span class=p>,</span> <span class=s1>&#39;key2=val2&#39;</span><span class=p>])</span>
</code></pre></div> <details class=quote> <summary>Source code in <code>src/django_components/tag_formatter.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-128>128</a></span>
<span class=normal><a href=#__codelineno-0-129>129</a></span>
<span class=normal><a href=#__codelineno-0-130>130</a></span>
<span class=normal><a href=#__codelineno-0-131>131</a></span>
<span class=normal><a href=#__codelineno-0-132>132</a></span>
<span class=normal><a href=#__codelineno-0-133>133</a></span>
<span class=normal><a href=#__codelineno-0-134>134</a></span>
<span class=normal><a href=#__codelineno-0-135>135</a></span>
<span class=normal><a href=#__codelineno-0-136>136</a></span>
<span class=normal><a href=#__codelineno-0-137>137</a></span>
<span class=normal><a href=#__codelineno-0-138>138</a></span>
<span class=normal><a href=#__codelineno-0-139>139</a></span>
<span class=normal><a href=#__codelineno-0-140>140</a></span>
<span class=normal><a href=#__codelineno-0-141>141</a></span>
<span class=normal><a href=#__codelineno-0-142>142</a></span>
<span class=normal><a href=#__codelineno-0-143>143</a></span>
<span class=normal><a href=#__codelineno-0-144>144</a></span>
<span class=normal><a href=#__codelineno-0-145>145</a></span>
<span class=normal><a href=#__codelineno-0-146>146</a></span>
<span class=normal><a href=#__codelineno-0-147>147</a></span>
<span class=normal><a href=#__codelineno-0-148>148</a></span>
<span class=normal><a href=#__codelineno-0-149>149</a></span>
<span class=normal><a href=#__codelineno-0-150>150</a></span>
<span class=normal><a href=#__codelineno-0-151>151</a></span>
<span class=normal><a href=#__codelineno-0-152>152</a></span>
<span class=normal><a href=#__codelineno-0-153>153</a></span>
<span class=normal><a href=#__codelineno-0-154>154</a></span>
<span class=normal><a href=#__codelineno-0-155>155</a></span>
<span class=normal><a href=#__codelineno-0-156>156</a></span>
<span class=normal><a href=#__codelineno-0-157>157</a></span>
<span class=normal><a href=#__codelineno-0-158>158</a></span>
<span class=normal><a href=#__codelineno-0-159>159</a></span>
<span class=normal><a href=#__codelineno-0-160>160</a></span>
<span class=normal><a href=#__codelineno-0-161>161</a></span>
<span class=normal><a href=#__codelineno-0-162>162</a></span>
<span class=normal><a href=#__codelineno-0-163>163</a></span>
<span class=normal><a href=#__codelineno-0-164>164</a></span>
<span class=normal><a href=#__codelineno-0-165>165</a></span>
<span class=normal><a href=#__codelineno-0-166>166</a></span>
<span class=normal><a href=#__codelineno-0-167>167</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-128 name=__codelineno-0-128></a><span class=nd>@abc</span><span class=o>.</span><span class=n>abstractmethod</span>
<a id=__codelineno-0-129 name=__codelineno-0-129></a><span class=k>def</span> <span class=nf>parse</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>tokens</span><span class=p>:</span> <span class=n>List</span><span class=p>[</span><span class=nb>str</span><span class=p>])</span> <span class=o>-&gt;</span> <span class=n>TagResult</span><span class=p>:</span>
<a id=__codelineno-0-130 name=__codelineno-0-130></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-131 name=__codelineno-0-131></a><span class=sd> Given the tokens (words) passed to a component start tag, this function extracts</span>
<a id=__codelineno-0-132 name=__codelineno-0-132></a><span class=sd> the component name from the tokens list, and returns</span>
<a id=__codelineno-0-133 name=__codelineno-0-133></a><span class=sd> [`TagResult`](../api#django_components.TagResult),</span>
<a id=__codelineno-0-134 name=__codelineno-0-134></a><span class=sd> which is a tuple of `(component_name, remaining_tokens)`.</span>
<a id=__codelineno-0-135 name=__codelineno-0-135></a>
<a id=__codelineno-0-136 name=__codelineno-0-136></a><span class=sd> Args:</span>
<a id=__codelineno-0-137 name=__codelineno-0-137></a><span class=sd> tokens [List(str]): List of tokens passed to the component tag.</span>
<a id=__codelineno-0-138 name=__codelineno-0-138></a>
<a id=__codelineno-0-139 name=__codelineno-0-139></a><span class=sd> Returns:</span>
<a id=__codelineno-0-140 name=__codelineno-0-140></a><span class=sd> TagResult: Parsed component name and remaining tokens.</span>
<a id=__codelineno-0-141 name=__codelineno-0-141></a>
<a id=__codelineno-0-142 name=__codelineno-0-142></a><span class=sd> **Example:**</span>
<a id=__codelineno-0-143 name=__codelineno-0-143></a>
<a id=__codelineno-0-144 name=__codelineno-0-144></a><span class=sd> Assuming we used a component in a template like this:</span>
<a id=__codelineno-0-145 name=__codelineno-0-145></a>
<a id=__codelineno-0-146 name=__codelineno-0-146></a><span class=sd> ```django</span>
<a id=__codelineno-0-147 name=__codelineno-0-147></a><span class=sd> {% component &quot;my_comp&quot; key=val key2=val2 %}</span>
<a id=__codelineno-0-148 name=__codelineno-0-148></a><span class=sd> {% endcomponent %}</span>
<a id=__codelineno-0-149 name=__codelineno-0-149></a><span class=sd> ```</span>
<a id=__codelineno-0-150 name=__codelineno-0-150></a>
<a id=__codelineno-0-151 name=__codelineno-0-151></a><span class=sd> This function receives a list of tokens:</span>
<a id=__codelineno-0-152 name=__codelineno-0-152></a>
<a id=__codelineno-0-153 name=__codelineno-0-153></a><span class=sd> ```python</span>
<a id=__codelineno-0-154 name=__codelineno-0-154></a><span class=sd> [&#39;component&#39;, &#39;&quot;my_comp&quot;&#39;, &#39;key=val&#39;, &#39;key2=val2&#39;]</span>
<a id=__codelineno-0-155 name=__codelineno-0-155></a><span class=sd> ```</span>
<a id=__codelineno-0-156 name=__codelineno-0-156></a>
<a id=__codelineno-0-157 name=__codelineno-0-157></a><span class=sd> - `component` is the tag name, which we drop.</span>
<a id=__codelineno-0-158 name=__codelineno-0-158></a><span class=sd> - `&quot;my_comp&quot;` is the component name, but we must remove the extra quotes.</span>
<a id=__codelineno-0-159 name=__codelineno-0-159></a><span class=sd> - The remaining tokens we pass unmodified, as that&#39;s the input to the component.</span>
<a id=__codelineno-0-160 name=__codelineno-0-160></a>
<a id=__codelineno-0-161 name=__codelineno-0-161></a><span class=sd> So in the end, we return:</span>
<a id=__codelineno-0-162 name=__codelineno-0-162></a>
<a id=__codelineno-0-163 name=__codelineno-0-163></a><span class=sd> ```python</span>
<a id=__codelineno-0-164 name=__codelineno-0-164></a><span class=sd> TagResult(&#39;my_comp&#39;, [&#39;key=val&#39;, &#39;key2=val2&#39;])</span>
<a id=__codelineno-0-165 name=__codelineno-0-165></a><span class=sd> ```</span>
<a id=__codelineno-0-166 name=__codelineno-0-166></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-167 name=__codelineno-0-167></a> <span class=o>...</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h3 id=django_components.TagFormatterABC.start_tag class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">start_tag</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-abstractmethod"><code>abstractmethod</code></small> </span> <a href=#django_components.TagFormatterABC.start_tag class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>start_tag</span><span class=p>(</span><span class=n>name</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span>
</code></pre></div> <div class="doc doc-contents "> <p>Formats the start tag of a component.</p> <p><span class=doc-section-title>Parameters:</span></p> <ul> <li class="doc-section-item field-body"> <b><code>name</code></b> (<code><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></code>) <div class=doc-md-description> <p>Component's registered name. Required.</p> </div> </li> </ul> <p><span class=doc-section-title>Returns:</span></p> <ul> <li class="doc-section-item field-body"> <b><code>str</code></b> ( <code><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></code> ) <div class=doc-md-description> <p>The formatted start tag.</p> </div> </li> </ul> <details class=quote> <summary>Source code in <code>src/django_components/tag_formatter.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-102>102</a></span>
<span class=normal><a href=#__codelineno-0-103>103</a></span>
<span class=normal><a href=#__codelineno-0-104>104</a></span>
<span class=normal><a href=#__codelineno-0-105>105</a></span>
<span class=normal><a href=#__codelineno-0-106>106</a></span>
<span class=normal><a href=#__codelineno-0-107>107</a></span>
<span class=normal><a href=#__codelineno-0-108>108</a></span>
<span class=normal><a href=#__codelineno-0-109>109</a></span>
<span class=normal><a href=#__codelineno-0-110>110</a></span>
<span class=normal><a href=#__codelineno-0-111>111</a></span>
<span class=normal><a href=#__codelineno-0-112>112</a></span>
<span class=normal><a href=#__codelineno-0-113>113</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-102 name=__codelineno-0-102></a><span class=nd>@abc</span><span class=o>.</span><span class=n>abstractmethod</span>
<a id=__codelineno-0-103 name=__codelineno-0-103></a><span class=k>def</span> <span class=nf>start_tag</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>name</span><span class=p>:</span> <span class=nb>str</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=nb>str</span><span class=p>:</span>
<a id=__codelineno-0-104 name=__codelineno-0-104></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-105 name=__codelineno-0-105></a><span class=sd> Formats the start tag of a component.</span>
<a id=__codelineno-0-106 name=__codelineno-0-106></a>
<a id=__codelineno-0-107 name=__codelineno-0-107></a><span class=sd> Args:</span>
<a id=__codelineno-0-108 name=__codelineno-0-108></a><span class=sd> name (str): Component&#39;s registered name. Required.</span>
<a id=__codelineno-0-109 name=__codelineno-0-109></a>
<a id=__codelineno-0-110 name=__codelineno-0-110></a><span class=sd> Returns:</span>
<a id=__codelineno-0-111 name=__codelineno-0-111></a><span class=sd> str: The formatted start tag.</span>
<a id=__codelineno-0-112 name=__codelineno-0-112></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-113 name=__codelineno-0-113></a> <span class=o>...</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> </div> </div> </div> <div class="doc doc-object doc-class"> <h2 id=django_components.TagProtectedError class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-class"></code> <span class="doc doc-object-name doc-class-name">TagProtectedError</span> <a href=#django_components.TagProtectedError class=headerlink title="Permanent link">¤</a></h2> <div class="doc doc-contents "> <p class="doc doc-class-bases"> Bases: <code><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/exceptions.html#Exception>Exception</a></code></p> <p>The way the <a href=../../concepts/advanced/tag_formatter><code>TagFormatter</code></a> works is that, based on which start and end tags are used for rendering components, the <a href=../api#django_components.ComponentRegistry><code>ComponentRegistry</code></a> behind the scenes <a href=https://docs.djangoproject.com/en/5.1/howto/custom-template-tags/#registering-the-tag>un-/registers the template tags</a> with the associated instance of Django's <a href=https://docs.djangoproject.com/en/5.1/howto/custom-template-tags/#code-layout><code>Library</code></a>.</p> <p>In other words, if I have registered a component <code>"table"</code>, and I use the shorthand syntax:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=cp>{%</span> <span class=k>table</span> <span class=p>...</span> <span class=cp>%}</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a><span class=cp>{%</span> <span class=k>endtable</span> <span class=cp>%}</span>
</code></pre></div> <p>Then <a href=../api#django_components.ComponentRegistry><code>ComponentRegistry</code></a> registers the tag <code>table</code> onto the Django's Library instance.</p> <p>However, that means that if we registered a component <code>"slot"</code>, then we would overwrite the <a href=../template_tags#slot><code>{% slot %}</code></a> tag from django_components.</p> <p>Thus, this exception is raised when a component is attempted to be registered under a forbidden name, such that it would overwrite one of django_component's own template tags.</p> </div> </div> <div class="doc doc-object doc-class"> <h2 id=django_components.TagResult class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-class"></code> <span class="doc doc-object-name doc-class-name">TagResult</span> <a href=#django_components.TagResult class=headerlink title="Permanent link">¤</a></h2> <div class="doc doc-contents "> <p class="doc doc-class-bases"> Bases: <code><a class="autorefs autorefs-external" title=typing.NamedTuple href=https://docs.python.org/3.12/library/typing.html#typing.NamedTuple>NamedTuple</a></code></p> <p>The return value from <a href=../api#django_components.TagFormatterABC.parse><code>TagFormatter.parse()</code></a>.</p> <p>Read more about <a href=../../concepts/advanced/tag_formatter>Tag formatter</a>.</p> <p><span class=doc-section-title>Attributes:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.TagResult.component_name href=#django_components.TagResult.component_name>component_name</a></code></b> (<code><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></code>) <div class=doc-md-description> <p>Component name extracted from the template tag</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.TagResult.tokens href=#django_components.TagResult.tokens>tokens</a></code></b> (<code><a class="autorefs autorefs-external" title=typing.List href=https://docs.python.org/3.12/library/typing.html#typing.List>List</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>]</code>) <div class=doc-md-description> <p>Remaining tokens (words) that were passed to the tag, with component name removed</p> </div> </li> </ul> <div class="doc doc-children"> <div class="doc doc-object doc-attribute"> <h3 id=django_components.TagResult.component_name class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">component_name</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.TagResult.component_name class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>component_name</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span>
</code></pre></div> <div class="doc doc-contents "> <p>Component name extracted from the template tag</p> <p>For example, if we had tag</p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=cp>{%</span> <span class=k>component</span> <span class=s2>&quot;my_comp&quot;</span> <span class=nv>key</span><span class=o>=</span><span class=nv>val</span> <span class=nv>key2</span><span class=o>=</span><span class=nv>val2</span> <span class=cp>%}</span>
</code></pre></div> <p>Then <code>component_name</code> would be <code>my_comp</code>.</p> </div> </div> <div class="doc doc-object doc-attribute"> <h3 id=django_components.TagResult.tokens class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">tokens</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.TagResult.tokens class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>tokens</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.List href=https://docs.python.org/3.12/library/typing.html#typing.List>List</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]</span>
</code></pre></div> <div class="doc doc-contents "> <p>Remaining tokens (words) that were passed to the tag, with component name removed</p> <p>For example, if we had tag</p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=cp>{%</span> <span class=k>component</span> <span class=s2>&quot;my_comp&quot;</span> <span class=nv>key</span><span class=o>=</span><span class=nv>val</span> <span class=nv>key2</span><span class=o>=</span><span class=nv>val2</span> <span class=cp>%}</span>
</code></pre></div> <p>Then <code>tokens</code> would be <code>['key=val', 'key2=val2']</code>.</p> </div> </div> </div> </div> </div> <div class="doc doc-object doc-function"> <h2 id=django_components.autodiscover class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-function"></code> <span class="doc doc-object-name doc-function-name">autodiscover</span> <a href=#django_components.autodiscover class=headerlink title="Permanent link">¤</a></h2> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>autodiscover</span><span class=p>(</span><span class=n>map_module</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Callable href=https://docs.python.org/3.12/library/typing.html#typing.Callable>Callable</a></span><span class=p>[[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>],</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-external" title=typing.List href=https://docs.python.org/3.12/library/typing.html#typing.List>List</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]</span>
</code></pre></div> <div class="doc doc-contents "> <p>Search for all python files in <a href=../settings#django_components.app_settings.ComponentsSettings.dirs><code>COMPONENTS.dirs</code></a> and <a href=../settings#django_components.app_settings.ComponentsSettings.app_dirs><code>COMPONENTS.app_dirs</code></a> and import them.</p> <p>See <a href=../../concepts/fundamentals/autodiscovery>Autodiscovery</a>.</p> <p><span class=doc-section-title>Parameters:</span></p> <ul> <li class="doc-section-item field-body"> <b><code>map_module</code></b> (<code><a class="autorefs autorefs-external" title=typing.Callable href=https://docs.python.org/3.12/library/typing.html#typing.Callable>Callable</a>[[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>], <a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>]</code>, default: <code>None</code> ) <div class=doc-md-description> <p>Map the module paths with <code>map_module</code> function. This serves as an escape hatch for when you need to use this function in tests.</p> </div> </li> </ul> <p><span class=doc-section-title>Returns:</span></p> <ul> <li class="doc-section-item field-body"> <code><a class="autorefs autorefs-external" title=typing.List href=https://docs.python.org/3.12/library/typing.html#typing.List>List</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>]</code> <div class=doc-md-description> <p>List[str]: A list of module paths of imported files.</p> </div> </li> </ul> <p>To get the same list of modules that <code>autodiscover()</code> would return, but without importing them, use <a href=../api#django_components.get_component_files><code>get_component_files()</code></a>:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=kn>from</span> <span class=nn>django_components</span> <span class=kn>import</span> <span class=n>get_component_files</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=n>modules</span> <span class=o>=</span> <span class=n>get_component_files</span><span class=p>(</span><span class=s2>&quot;.py&quot;</span><span class=p>)</span>
</code></pre></div> <details class=quote> <summary>Source code in <code>src/django_components/autodiscovery.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-8> 8</a></span>
<span class=normal><a href=#__codelineno-0-9> 9</a></span>
<span class=normal><a href=#__codelineno-0-10>10</a></span>
<span class=normal><a href=#__codelineno-0-11>11</a></span>
<span class=normal><a href=#__codelineno-0-12>12</a></span>
<span class=normal><a href=#__codelineno-0-13>13</a></span>
<span class=normal><a href=#__codelineno-0-14>14</a></span>
<span class=normal><a href=#__codelineno-0-15>15</a></span>
<span class=normal><a href=#__codelineno-0-16>16</a></span>
<span class=normal><a href=#__codelineno-0-17>17</a></span>
<span class=normal><a href=#__codelineno-0-18>18</a></span>
<span class=normal><a href=#__codelineno-0-19>19</a></span>
<span class=normal><a href=#__codelineno-0-20>20</a></span>
<span class=normal><a href=#__codelineno-0-21>21</a></span>
<span class=normal><a href=#__codelineno-0-22>22</a></span>
<span class=normal><a href=#__codelineno-0-23>23</a></span>
<span class=normal><a href=#__codelineno-0-24>24</a></span>
<span class=normal><a href=#__codelineno-0-25>25</a></span>
<span class=normal><a href=#__codelineno-0-26>26</a></span>
<span class=normal><a href=#__codelineno-0-27>27</a></span>
<span class=normal><a href=#__codelineno-0-28>28</a></span>
<span class=normal><a href=#__codelineno-0-29>29</a></span>
<span class=normal><a href=#__codelineno-0-30>30</a></span>
<span class=normal><a href=#__codelineno-0-31>31</a></span>
<span class=normal><a href=#__codelineno-0-32>32</a></span>
<span class=normal><a href=#__codelineno-0-33>33</a></span>
<span class=normal><a href=#__codelineno-0-34>34</a></span>
<span class=normal><a href=#__codelineno-0-35>35</a></span>
<span class=normal><a href=#__codelineno-0-36>36</a></span>
<span class=normal><a href=#__codelineno-0-37>37</a></span>
<span class=normal><a href=#__codelineno-0-38>38</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-8 name=__codelineno-0-8></a><span class=k>def</span> <span class=nf>autodiscover</span><span class=p>(</span>
<a id=__codelineno-0-9 name=__codelineno-0-9></a> <span class=n>map_module</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>Callable</span><span class=p>[[</span><span class=nb>str</span><span class=p>],</span> <span class=nb>str</span><span class=p>]]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-10 name=__codelineno-0-10></a><span class=p>)</span> <span class=o>-&gt;</span> <span class=n>List</span><span class=p>[</span><span class=nb>str</span><span class=p>]:</span>
<a id=__codelineno-0-11 name=__codelineno-0-11></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-12 name=__codelineno-0-12></a><span class=sd> Search for all python files in</span>
<a id=__codelineno-0-13 name=__codelineno-0-13></a><span class=sd> [`COMPONENTS.dirs`](../settings#django_components.app_settings.ComponentsSettings.dirs)</span>
<a id=__codelineno-0-14 name=__codelineno-0-14></a><span class=sd> and</span>
<a id=__codelineno-0-15 name=__codelineno-0-15></a><span class=sd> [`COMPONENTS.app_dirs`](../settings#django_components.app_settings.ComponentsSettings.app_dirs)</span>
<a id=__codelineno-0-16 name=__codelineno-0-16></a><span class=sd> and import them.</span>
<a id=__codelineno-0-17 name=__codelineno-0-17></a>
<a id=__codelineno-0-18 name=__codelineno-0-18></a><span class=sd> See [Autodiscovery](../../concepts/fundamentals/autodiscovery).</span>
<a id=__codelineno-0-19 name=__codelineno-0-19></a>
<a id=__codelineno-0-20 name=__codelineno-0-20></a><span class=sd> Args:</span>
<a id=__codelineno-0-21 name=__codelineno-0-21></a><span class=sd> map_module (Callable[[str], str], optional): Map the module paths with `map_module` function.\</span>
<a id=__codelineno-0-22 name=__codelineno-0-22></a><span class=sd> This serves as an escape hatch for when you need to use this function in tests.</span>
<a id=__codelineno-0-23 name=__codelineno-0-23></a>
<a id=__codelineno-0-24 name=__codelineno-0-24></a><span class=sd> Returns:</span>
<a id=__codelineno-0-25 name=__codelineno-0-25></a><span class=sd> List[str]: A list of module paths of imported files.</span>
<a id=__codelineno-0-26 name=__codelineno-0-26></a>
<a id=__codelineno-0-27 name=__codelineno-0-27></a><span class=sd> To get the same list of modules that `autodiscover()` would return, but without importing them, use</span>
<a id=__codelineno-0-28 name=__codelineno-0-28></a><span class=sd> [`get_component_files()`](../api#django_components.get_component_files):</span>
<a id=__codelineno-0-29 name=__codelineno-0-29></a>
<a id=__codelineno-0-30 name=__codelineno-0-30></a><span class=sd> ```python</span>
<a id=__codelineno-0-31 name=__codelineno-0-31></a><span class=sd> from django_components import get_component_files</span>
<a id=__codelineno-0-32 name=__codelineno-0-32></a>
<a id=__codelineno-0-33 name=__codelineno-0-33></a><span class=sd> modules = get_component_files(&quot;.py&quot;)</span>
<a id=__codelineno-0-34 name=__codelineno-0-34></a><span class=sd> ```</span>
<a id=__codelineno-0-35 name=__codelineno-0-35></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-36 name=__codelineno-0-36></a> <span class=n>modules</span> <span class=o>=</span> <span class=n>get_component_files</span><span class=p>(</span><span class=s2>&quot;.py&quot;</span><span class=p>)</span>
<a id=__codelineno-0-37 name=__codelineno-0-37></a> <span class=n>logger</span><span class=o>.</span><span class=n>debug</span><span class=p>(</span><span class=sa>f</span><span class=s2>&quot;Autodiscover found </span><span class=si>{</span><span class=nb>len</span><span class=p>(</span><span class=n>modules</span><span class=p>)</span><span class=si>}</span><span class=s2> files in component directories.&quot;</span><span class=p>)</span>
<a id=__codelineno-0-38 name=__codelineno-0-38></a> <span class=k>return</span> <span class=n>_import_modules</span><span class=p>([</span><span class=n>entry</span><span class=o>.</span><span class=n>dot_path</span> <span class=k>for</span> <span class=n>entry</span> <span class=ow>in</span> <span class=n>modules</span><span class=p>],</span> <span class=n>map_module</span><span class=p>)</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h2 id=django_components.cached_template class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-function"></code> <span class="doc doc-object-name doc-function-name">cached_template</span> <a href=#django_components.cached_template class=headerlink title="Permanent link">¤</a></h2> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>cached_template</span><span class=p>(</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a> <span class=n>template_string</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a> <span class=n>template_cls</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Type href=https://docs.python.org/3.12/library/typing.html#typing.Type>Type</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=django.template.Template href=https://docs.djangoproject.com/en/5.0/ref/templates/api/#django.template.Template>Template</a></span><span class=p>]]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a> <span class=n>origin</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><span title=django.template.Origin>Origin</span></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a> <span class=n>name</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-6 name=__codelineno-0-6 href=#__codelineno-0-6></a> <span class=n>engine</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Any href=https://docs.python.org/3.12/library/typing.html#typing.Any>Any</a></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-7 name=__codelineno-0-7 href=#__codelineno-0-7></a><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-external" title=django.template.Template href=https://docs.djangoproject.com/en/5.0/ref/templates/api/#django.template.Template>Template</a></span>
</code></pre></div> <div class="doc doc-contents "> <p>Create a Template instance that will be cached as per the <a href=../settings#django_components.app_settings.ComponentsSettings.template_cache_size><code>COMPONENTS.template_cache_size</code></a> setting.</p> <p><span class=doc-section-title>Parameters:</span></p> <ul> <li class="doc-section-item field-body"> <b><code>template_string</code></b> (<code><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></code>) <div class=doc-md-description> <p>Template as a string, same as the first argument to Django's <a href=https://docs.djangoproject.com/en/5.1/topics/templates/#template><code>Template</code></a>. Required.</p> </div> </li> <li class="doc-section-item field-body"> <b><code>template_cls</code></b> (<code><a class="autorefs autorefs-external" title=typing.Type href=https://docs.python.org/3.12/library/typing.html#typing.Type>Type</a>[<a class="autorefs autorefs-external" title=django.template.Template href=https://docs.djangoproject.com/en/5.0/ref/templates/api/#django.template.Template>Template</a>]</code>, default: <code>None</code> ) <div class=doc-md-description> <p>Specify the Template class that should be instantiated. Defaults to Django's <a href=https://docs.djangoproject.com/en/5.1/topics/templates/#template><code>Template</code></a> class.</p> </div> </li> <li class="doc-section-item field-body"> <b><code>origin</code></b> (<code><a class="autorefs autorefs-external" title=typing.Type href=https://docs.python.org/3.12/library/typing.html#typing.Type>Type</a>[<span title=django.template.Origin>Origin</span>]</code>, default: <code>None</code> ) <div class=doc-md-description> <p>Sets <a href=https://docs.djangoproject.com/en/5.1/howto/custom-template-backend/#origin-api-and-3rd-party-integration><code>Template.Origin</code></a>.</p> </div> </li> <li class="doc-section-item field-body"> <b><code>name</code></b> (<code><a class="autorefs autorefs-external" title=typing.Type href=https://docs.python.org/3.12/library/typing.html#typing.Type>Type</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>]</code>, default: <code>None</code> ) <div class=doc-md-description> <p>Sets <code>Template.name</code></p> </div> </li> <li class="doc-section-item field-body"> <b><code>engine</code></b> (<code><a class="autorefs autorefs-external" title=typing.Type href=https://docs.python.org/3.12/library/typing.html#typing.Type>Type</a>[<a class="autorefs autorefs-external" title=typing.Any href=https://docs.python.org/3.12/library/typing.html#typing.Any>Any</a>]</code>, default: <code>None</code> ) <div class=doc-md-description> <p>Sets <code>Template.engine</code></p> </div> </li> </ul> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=kn>from</span> <span class=nn>django_components</span> <span class=kn>import</span> <span class=n>cached_template</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=n>template</span> <span class=o>=</span> <span class=n>cached_template</span><span class=p>(</span><span class=s2>&quot;Variable: {{ variable }}&quot;</span><span class=p>)</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a><span class=c1># You can optionally specify Template class, and other Template inputs:</span>
<a id=__codelineno-0-6 name=__codelineno-0-6 href=#__codelineno-0-6></a><span class=k>class</span> <span class=nc>MyTemplate</span><span class=p>(</span><span class=n>Template</span><span class=p>):</span>
<a id=__codelineno-0-7 name=__codelineno-0-7 href=#__codelineno-0-7></a> <span class=k>pass</span>
<a id=__codelineno-0-8 name=__codelineno-0-8 href=#__codelineno-0-8></a>
<a id=__codelineno-0-9 name=__codelineno-0-9 href=#__codelineno-0-9></a><span class=n>template</span> <span class=o>=</span> <span class=n>cached_template</span><span class=p>(</span>
<a id=__codelineno-0-10 name=__codelineno-0-10 href=#__codelineno-0-10></a> <span class=s2>&quot;Variable: {{ variable }}&quot;</span><span class=p>,</span>
<a id=__codelineno-0-11 name=__codelineno-0-11 href=#__codelineno-0-11></a> <span class=n>template_cls</span><span class=o>=</span><span class=n>MyTemplate</span><span class=p>,</span>
<a id=__codelineno-0-12 name=__codelineno-0-12 href=#__codelineno-0-12></a> <span class=n>name</span><span class=o>=...</span>
<a id=__codelineno-0-13 name=__codelineno-0-13 href=#__codelineno-0-13></a> <span class=n>origin</span><span class=o>=...</span>
<a id=__codelineno-0-14 name=__codelineno-0-14 href=#__codelineno-0-14></a> <span class=n>engine</span><span class=o>=...</span>
<a id=__codelineno-0-15 name=__codelineno-0-15 href=#__codelineno-0-15></a><span class=p>)</span>
</code></pre></div> <details class=quote> <summary>Source code in <code>src/django_components/template.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-25>25</a></span>
<span class=normal><a href=#__codelineno-0-26>26</a></span>
<span class=normal><a href=#__codelineno-0-27>27</a></span>
<span class=normal><a href=#__codelineno-0-28>28</a></span>
<span class=normal><a href=#__codelineno-0-29>29</a></span>
<span class=normal><a href=#__codelineno-0-30>30</a></span>
<span class=normal><a href=#__codelineno-0-31>31</a></span>
<span class=normal><a href=#__codelineno-0-32>32</a></span>
<span class=normal><a href=#__codelineno-0-33>33</a></span>
<span class=normal><a href=#__codelineno-0-34>34</a></span>
<span class=normal><a href=#__codelineno-0-35>35</a></span>
<span class=normal><a href=#__codelineno-0-36>36</a></span>
<span class=normal><a href=#__codelineno-0-37>37</a></span>
<span class=normal><a href=#__codelineno-0-38>38</a></span>
<span class=normal><a href=#__codelineno-0-39>39</a></span>
<span class=normal><a href=#__codelineno-0-40>40</a></span>
<span class=normal><a href=#__codelineno-0-41>41</a></span>
<span class=normal><a href=#__codelineno-0-42>42</a></span>
<span class=normal><a href=#__codelineno-0-43>43</a></span>
<span class=normal><a href=#__codelineno-0-44>44</a></span>
<span class=normal><a href=#__codelineno-0-45>45</a></span>
<span class=normal><a href=#__codelineno-0-46>46</a></span>
<span class=normal><a href=#__codelineno-0-47>47</a></span>
<span class=normal><a href=#__codelineno-0-48>48</a></span>
<span class=normal><a href=#__codelineno-0-49>49</a></span>
<span class=normal><a href=#__codelineno-0-50>50</a></span>
<span class=normal><a href=#__codelineno-0-51>51</a></span>
<span class=normal><a href=#__codelineno-0-52>52</a></span>
<span class=normal><a href=#__codelineno-0-53>53</a></span>
<span class=normal><a href=#__codelineno-0-54>54</a></span>
<span class=normal><a href=#__codelineno-0-55>55</a></span>
<span class=normal><a href=#__codelineno-0-56>56</a></span>
<span class=normal><a href=#__codelineno-0-57>57</a></span>
<span class=normal><a href=#__codelineno-0-58>58</a></span>
<span class=normal><a href=#__codelineno-0-59>59</a></span>
<span class=normal><a href=#__codelineno-0-60>60</a></span>
<span class=normal><a href=#__codelineno-0-61>61</a></span>
<span class=normal><a href=#__codelineno-0-62>62</a></span>
<span class=normal><a href=#__codelineno-0-63>63</a></span>
<span class=normal><a href=#__codelineno-0-64>64</a></span>
<span class=normal><a href=#__codelineno-0-65>65</a></span>
<span class=normal><a href=#__codelineno-0-66>66</a></span>
<span class=normal><a href=#__codelineno-0-67>67</a></span>
<span class=normal><a href=#__codelineno-0-68>68</a></span>
<span class=normal><a href=#__codelineno-0-69>69</a></span>
<span class=normal><a href=#__codelineno-0-70>70</a></span>
<span class=normal><a href=#__codelineno-0-71>71</a></span>
<span class=normal><a href=#__codelineno-0-72>72</a></span>
<span class=normal><a href=#__codelineno-0-73>73</a></span>
<span class=normal><a href=#__codelineno-0-74>74</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-25 name=__codelineno-0-25></a><span class=k>def</span> <span class=nf>cached_template</span><span class=p>(</span>
<a id=__codelineno-0-26 name=__codelineno-0-26></a> <span class=n>template_string</span><span class=p>:</span> <span class=nb>str</span><span class=p>,</span>
<a id=__codelineno-0-27 name=__codelineno-0-27></a> <span class=n>template_cls</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>Type</span><span class=p>[</span><span class=n>Template</span><span class=p>]]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-28 name=__codelineno-0-28></a> <span class=n>origin</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>Origin</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-29 name=__codelineno-0-29></a> <span class=n>name</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=nb>str</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-30 name=__codelineno-0-30></a> <span class=n>engine</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>Any</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-31 name=__codelineno-0-31></a><span class=p>)</span> <span class=o>-&gt;</span> <span class=n>Template</span><span class=p>:</span>
<a id=__codelineno-0-32 name=__codelineno-0-32></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-33 name=__codelineno-0-33></a><span class=sd> Create a Template instance that will be cached as per the</span>
<a id=__codelineno-0-34 name=__codelineno-0-34></a><span class=sd> [`COMPONENTS.template_cache_size`](../settings#django_components.app_settings.ComponentsSettings.template_cache_size)</span>
<a id=__codelineno-0-35 name=__codelineno-0-35></a><span class=sd> setting.</span>
<a id=__codelineno-0-36 name=__codelineno-0-36></a>
<a id=__codelineno-0-37 name=__codelineno-0-37></a><span class=sd> Args:</span>
<a id=__codelineno-0-38 name=__codelineno-0-38></a><span class=sd> template_string (str): Template as a string, same as the first argument to Django&#39;s\</span>
<a id=__codelineno-0-39 name=__codelineno-0-39></a><span class=sd> [`Template`](https://docs.djangoproject.com/en/5.1/topics/templates/#template). Required.</span>
<a id=__codelineno-0-40 name=__codelineno-0-40></a><span class=sd> template_cls (Type[Template], optional): Specify the Template class that should be instantiated.\</span>
<a id=__codelineno-0-41 name=__codelineno-0-41></a><span class=sd> Defaults to Django&#39;s [`Template`](https://docs.djangoproject.com/en/5.1/topics/templates/#template) class.</span>
<a id=__codelineno-0-42 name=__codelineno-0-42></a><span class=sd> origin (Type[Origin], optional): Sets \</span>
<a id=__codelineno-0-43 name=__codelineno-0-43></a><span class=sd> [`Template.Origin`](https://docs.djangoproject.com/en/5.1/howto/custom-template-backend/#origin-api-and-3rd-party-integration).</span>
<a id=__codelineno-0-44 name=__codelineno-0-44></a><span class=sd> name (Type[str], optional): Sets `Template.name`</span>
<a id=__codelineno-0-45 name=__codelineno-0-45></a><span class=sd> engine (Type[Any], optional): Sets `Template.engine`</span>
<a id=__codelineno-0-46 name=__codelineno-0-46></a>
<a id=__codelineno-0-47 name=__codelineno-0-47></a><span class=sd> ```python</span>
<a id=__codelineno-0-48 name=__codelineno-0-48></a><span class=sd> from django_components import cached_template</span>
<a id=__codelineno-0-49 name=__codelineno-0-49></a>
<a id=__codelineno-0-50 name=__codelineno-0-50></a><span class=sd> template = cached_template(&quot;Variable: {{ variable }}&quot;)</span>
<a id=__codelineno-0-51 name=__codelineno-0-51></a>
<a id=__codelineno-0-52 name=__codelineno-0-52></a><span class=sd> # You can optionally specify Template class, and other Template inputs:</span>
<a id=__codelineno-0-53 name=__codelineno-0-53></a><span class=sd> class MyTemplate(Template):</span>
<a id=__codelineno-0-54 name=__codelineno-0-54></a><span class=sd> pass</span>
<a id=__codelineno-0-55 name=__codelineno-0-55></a>
<a id=__codelineno-0-56 name=__codelineno-0-56></a><span class=sd> template = cached_template(</span>
<a id=__codelineno-0-57 name=__codelineno-0-57></a><span class=sd> &quot;Variable: {{ variable }}&quot;,</span>
<a id=__codelineno-0-58 name=__codelineno-0-58></a><span class=sd> template_cls=MyTemplate,</span>
<a id=__codelineno-0-59 name=__codelineno-0-59></a><span class=sd> name=...</span>
<a id=__codelineno-0-60 name=__codelineno-0-60></a><span class=sd> origin=...</span>
<a id=__codelineno-0-61 name=__codelineno-0-61></a><span class=sd> engine=...</span>
<a id=__codelineno-0-62 name=__codelineno-0-62></a><span class=sd> )</span>
<a id=__codelineno-0-63 name=__codelineno-0-63></a><span class=sd> ```</span>
<a id=__codelineno-0-64 name=__codelineno-0-64></a><span class=sd> &quot;&quot;&quot;</span> <span class=c1># noqa: E501</span>
<a id=__codelineno-0-65 name=__codelineno-0-65></a> <span class=n>template</span> <span class=o>=</span> <span class=n>_create_template</span><span class=p>(</span><span class=n>template_cls</span> <span class=ow>or</span> <span class=n>Template</span><span class=p>,</span> <span class=n>template_string</span><span class=p>,</span> <span class=n>engine</span><span class=p>)</span>
<a id=__codelineno-0-66 name=__codelineno-0-66></a>
<a id=__codelineno-0-67 name=__codelineno-0-67></a> <span class=c1># Assign the origin and name separately, so the caching doesn&#39;t depend on them</span>
<a id=__codelineno-0-68 name=__codelineno-0-68></a> <span class=c1># Since we might be accessing a template from cache, we want to define these only once</span>
<a id=__codelineno-0-69 name=__codelineno-0-69></a> <span class=k>if</span> <span class=ow>not</span> <span class=nb>getattr</span><span class=p>(</span><span class=n>template</span><span class=p>,</span> <span class=s2>&quot;_dc_cached&quot;</span><span class=p>,</span> <span class=kc>False</span><span class=p>):</span>
<a id=__codelineno-0-70 name=__codelineno-0-70></a> <span class=n>template</span><span class=o>.</span><span class=n>origin</span> <span class=o>=</span> <span class=n>origin</span> <span class=ow>or</span> <span class=n>Origin</span><span class=p>(</span><span class=n>UNKNOWN_SOURCE</span><span class=p>)</span>
<a id=__codelineno-0-71 name=__codelineno-0-71></a> <span class=n>template</span><span class=o>.</span><span class=n>name</span> <span class=o>=</span> <span class=n>name</span>
<a id=__codelineno-0-72 name=__codelineno-0-72></a> <span class=n>template</span><span class=o>.</span><span class=n>_dc_cached</span> <span class=o>=</span> <span class=kc>True</span>
<a id=__codelineno-0-73 name=__codelineno-0-73></a>
<a id=__codelineno-0-74 name=__codelineno-0-74></a> <span class=k>return</span> <span class=n>template</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h2 id=django_components.get_component_dirs class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-function"></code> <span class="doc doc-object-name doc-function-name">get_component_dirs</span> <a href=#django_components.get_component_dirs class=headerlink title="Permanent link">¤</a></h2> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>get_component_dirs</span><span class=p>(</span><span class=n>include_apps</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/functions.html#bool>bool</a></span> <span class=o>=</span> <span class=kc>True</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-external" title=typing.List href=https://docs.python.org/3.12/library/typing.html#typing.List>List</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=pathlib.Path href=https://docs.python.org/3.12/library/pathlib.html#pathlib.Path>Path</a></span><span class=p>]</span>
</code></pre></div> <div class="doc doc-contents "> <p>Get directories that may contain component files.</p> <p>This is the heart of all features that deal with filesystem and file lookup. Autodiscovery, Django template resolution, static file resolution - They all use this.</p> <p><span class=doc-section-title>Parameters:</span></p> <ul> <li class="doc-section-item field-body"> <b><code>include_apps</code></b> (<code><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/functions.html#bool>bool</a></code>, default: <code>True</code> ) <div class=doc-md-description> <p>Include directories from installed Django apps. Defaults to <code>True</code>.</p> </div> </li> </ul> <p><span class=doc-section-title>Returns:</span></p> <ul> <li class="doc-section-item field-body"> <code><a class="autorefs autorefs-external" title=typing.List href=https://docs.python.org/3.12/library/typing.html#typing.List>List</a>[<a class="autorefs autorefs-external" title=pathlib.Path href=https://docs.python.org/3.12/library/pathlib.html#pathlib.Path>Path</a>]</code> <div class=doc-md-description> <p>List[Path]: A list of directories that may contain component files.</p> </div> </li> </ul> <p><code>get_component_dirs()</code> searches for dirs set in <a href=../settings#django_components.app_settings.ComponentsSettings.dirs><code>COMPONENTS.dirs</code></a> settings. If none set, defaults to searching for a <code>"components"</code> app.</p> <p>In addition to that, also all installed Django apps are checked whether they contain directories as set in <a href=../settings#django_components.app_settings.ComponentsSettings.app_dirs><code>COMPONENTS.app_dirs</code></a> (e.g. <code>[app]/components</code>).</p> <p><strong>Notes:</strong></p> <ul> <li> <p>Paths that do not point to directories are ignored.</p> </li> <li> <p><code>BASE_DIR</code> setting is required.</p> </li> <li> <p>The paths in <a href=../settings#django_components.app_settings.ComponentsSettings.dirs><code>COMPONENTS.dirs</code></a> must be absolute paths.</p> </li> </ul> <details class=quote> <summary>Source code in <code>src/django_components/util/loader.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-13> 13</a></span>
<span class=normal><a href=#__codelineno-0-14> 14</a></span>
<span class=normal><a href=#__codelineno-0-15> 15</a></span>
<span class=normal><a href=#__codelineno-0-16> 16</a></span>
<span class=normal><a href=#__codelineno-0-17> 17</a></span>
<span class=normal><a href=#__codelineno-0-18> 18</a></span>
<span class=normal><a href=#__codelineno-0-19> 19</a></span>
<span class=normal><a href=#__codelineno-0-20> 20</a></span>
<span class=normal><a href=#__codelineno-0-21> 21</a></span>
<span class=normal><a href=#__codelineno-0-22> 22</a></span>
<span class=normal><a href=#__codelineno-0-23> 23</a></span>
<span class=normal><a href=#__codelineno-0-24> 24</a></span>
<span class=normal><a href=#__codelineno-0-25> 25</a></span>
<span class=normal><a href=#__codelineno-0-26> 26</a></span>
<span class=normal><a href=#__codelineno-0-27> 27</a></span>
<span class=normal><a href=#__codelineno-0-28> 28</a></span>
<span class=normal><a href=#__codelineno-0-29> 29</a></span>
<span class=normal><a href=#__codelineno-0-30> 30</a></span>
<span class=normal><a href=#__codelineno-0-31> 31</a></span>
<span class=normal><a href=#__codelineno-0-32> 32</a></span>
<span class=normal><a href=#__codelineno-0-33> 33</a></span>
<span class=normal><a href=#__codelineno-0-34> 34</a></span>
<span class=normal><a href=#__codelineno-0-35> 35</a></span>
<span class=normal><a href=#__codelineno-0-36> 36</a></span>
<span class=normal><a href=#__codelineno-0-37> 37</a></span>
<span class=normal><a href=#__codelineno-0-38> 38</a></span>
<span class=normal><a href=#__codelineno-0-39> 39</a></span>
<span class=normal><a href=#__codelineno-0-40> 40</a></span>
<span class=normal><a href=#__codelineno-0-41> 41</a></span>
<span class=normal><a href=#__codelineno-0-42> 42</a></span>
<span class=normal><a href=#__codelineno-0-43> 43</a></span>
<span class=normal><a href=#__codelineno-0-44> 44</a></span>
<span class=normal><a href=#__codelineno-0-45> 45</a></span>
<span class=normal><a href=#__codelineno-0-46> 46</a></span>
<span class=normal><a href=#__codelineno-0-47> 47</a></span>
<span class=normal><a href=#__codelineno-0-48> 48</a></span>
<span class=normal><a href=#__codelineno-0-49> 49</a></span>
<span class=normal><a href=#__codelineno-0-50> 50</a></span>
<span class=normal><a href=#__codelineno-0-51> 51</a></span>
<span class=normal><a href=#__codelineno-0-52> 52</a></span>
<span class=normal><a href=#__codelineno-0-53> 53</a></span>
<span class=normal><a href=#__codelineno-0-54> 54</a></span>
<span class=normal><a href=#__codelineno-0-55> 55</a></span>
<span class=normal><a href=#__codelineno-0-56> 56</a></span>
<span class=normal><a href=#__codelineno-0-57> 57</a></span>
<span class=normal><a href=#__codelineno-0-58> 58</a></span>
<span class=normal><a href=#__codelineno-0-59> 59</a></span>
<span class=normal><a href=#__codelineno-0-60> 60</a></span>
<span class=normal><a href=#__codelineno-0-61> 61</a></span>
<span class=normal><a href=#__codelineno-0-62> 62</a></span>
<span class=normal><a href=#__codelineno-0-63> 63</a></span>
<span class=normal><a href=#__codelineno-0-64> 64</a></span>
<span class=normal><a href=#__codelineno-0-65> 65</a></span>
<span class=normal><a href=#__codelineno-0-66> 66</a></span>
<span class=normal><a href=#__codelineno-0-67> 67</a></span>
<span class=normal><a href=#__codelineno-0-68> 68</a></span>
<span class=normal><a href=#__codelineno-0-69> 69</a></span>
<span class=normal><a href=#__codelineno-0-70> 70</a></span>
<span class=normal><a href=#__codelineno-0-71> 71</a></span>
<span class=normal><a href=#__codelineno-0-72> 72</a></span>
<span class=normal><a href=#__codelineno-0-73> 73</a></span>
<span class=normal><a href=#__codelineno-0-74> 74</a></span>
<span class=normal><a href=#__codelineno-0-75> 75</a></span>
<span class=normal><a href=#__codelineno-0-76> 76</a></span>
<span class=normal><a href=#__codelineno-0-77> 77</a></span>
<span class=normal><a href=#__codelineno-0-78> 78</a></span>
<span class=normal><a href=#__codelineno-0-79> 79</a></span>
<span class=normal><a href=#__codelineno-0-80> 80</a></span>
<span class=normal><a href=#__codelineno-0-81> 81</a></span>
<span class=normal><a href=#__codelineno-0-82> 82</a></span>
<span class=normal><a href=#__codelineno-0-83> 83</a></span>
<span class=normal><a href=#__codelineno-0-84> 84</a></span>
<span class=normal><a href=#__codelineno-0-85> 85</a></span>
<span class=normal><a href=#__codelineno-0-86> 86</a></span>
<span class=normal><a href=#__codelineno-0-87> 87</a></span>
<span class=normal><a href=#__codelineno-0-88> 88</a></span>
<span class=normal><a href=#__codelineno-0-89> 89</a></span>
<span class=normal><a href=#__codelineno-0-90> 90</a></span>
<span class=normal><a href=#__codelineno-0-91> 91</a></span>
<span class=normal><a href=#__codelineno-0-92> 92</a></span>
<span class=normal><a href=#__codelineno-0-93> 93</a></span>
<span class=normal><a href=#__codelineno-0-94> 94</a></span>
<span class=normal><a href=#__codelineno-0-95> 95</a></span>
<span class=normal><a href=#__codelineno-0-96> 96</a></span>
<span class=normal><a href=#__codelineno-0-97> 97</a></span>
<span class=normal><a href=#__codelineno-0-98> 98</a></span>
<span class=normal><a href=#__codelineno-0-99> 99</a></span>
<span class=normal><a href=#__codelineno-0-100>100</a></span>
<span class=normal><a href=#__codelineno-0-101>101</a></span>
<span class=normal><a href=#__codelineno-0-102>102</a></span>
<span class=normal><a href=#__codelineno-0-103>103</a></span>
<span class=normal><a href=#__codelineno-0-104>104</a></span>
<span class=normal><a href=#__codelineno-0-105>105</a></span>
<span class=normal><a href=#__codelineno-0-106>106</a></span>
<span class=normal><a href=#__codelineno-0-107>107</a></span>
<span class=normal><a href=#__codelineno-0-108>108</a></span>
<span class=normal><a href=#__codelineno-0-109>109</a></span>
<span class=normal><a href=#__codelineno-0-110>110</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-13 name=__codelineno-0-13></a><span class=k>def</span> <span class=nf>get_component_dirs</span><span class=p>(</span><span class=n>include_apps</span><span class=p>:</span> <span class=nb>bool</span> <span class=o>=</span> <span class=kc>True</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n>List</span><span class=p>[</span><span class=n>Path</span><span class=p>]:</span>
<a id=__codelineno-0-14 name=__codelineno-0-14></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-15 name=__codelineno-0-15></a><span class=sd> Get directories that may contain component files.</span>
<a id=__codelineno-0-16 name=__codelineno-0-16></a>
<a id=__codelineno-0-17 name=__codelineno-0-17></a><span class=sd> This is the heart of all features that deal with filesystem and file lookup.</span>
<a id=__codelineno-0-18 name=__codelineno-0-18></a><span class=sd> Autodiscovery, Django template resolution, static file resolution - They all use this.</span>
<a id=__codelineno-0-19 name=__codelineno-0-19></a>
<a id=__codelineno-0-20 name=__codelineno-0-20></a><span class=sd> Args:</span>
<a id=__codelineno-0-21 name=__codelineno-0-21></a><span class=sd> include_apps (bool, optional): Include directories from installed Django apps.\</span>
<a id=__codelineno-0-22 name=__codelineno-0-22></a><span class=sd> Defaults to `True`.</span>
<a id=__codelineno-0-23 name=__codelineno-0-23></a>
<a id=__codelineno-0-24 name=__codelineno-0-24></a><span class=sd> Returns:</span>
<a id=__codelineno-0-25 name=__codelineno-0-25></a><span class=sd> List[Path]: A list of directories that may contain component files.</span>
<a id=__codelineno-0-26 name=__codelineno-0-26></a>
<a id=__codelineno-0-27 name=__codelineno-0-27></a><span class=sd> `get_component_dirs()` searches for dirs set in</span>
<a id=__codelineno-0-28 name=__codelineno-0-28></a><span class=sd> [`COMPONENTS.dirs`](../settings#django_components.app_settings.ComponentsSettings.dirs)</span>
<a id=__codelineno-0-29 name=__codelineno-0-29></a><span class=sd> settings. If none set, defaults to searching for a `&quot;components&quot;` app.</span>
<a id=__codelineno-0-30 name=__codelineno-0-30></a>
<a id=__codelineno-0-31 name=__codelineno-0-31></a><span class=sd> In addition to that, also all installed Django apps are checked whether they contain</span>
<a id=__codelineno-0-32 name=__codelineno-0-32></a><span class=sd> directories as set in</span>
<a id=__codelineno-0-33 name=__codelineno-0-33></a><span class=sd> [`COMPONENTS.app_dirs`](../settings#django_components.app_settings.ComponentsSettings.app_dirs)</span>
<a id=__codelineno-0-34 name=__codelineno-0-34></a><span class=sd> (e.g. `[app]/components`).</span>
<a id=__codelineno-0-35 name=__codelineno-0-35></a>
<a id=__codelineno-0-36 name=__codelineno-0-36></a><span class=sd> **Notes:**</span>
<a id=__codelineno-0-37 name=__codelineno-0-37></a>
<a id=__codelineno-0-38 name=__codelineno-0-38></a><span class=sd> - Paths that do not point to directories are ignored.</span>
<a id=__codelineno-0-39 name=__codelineno-0-39></a>
<a id=__codelineno-0-40 name=__codelineno-0-40></a><span class=sd> - `BASE_DIR` setting is required.</span>
<a id=__codelineno-0-41 name=__codelineno-0-41></a>
<a id=__codelineno-0-42 name=__codelineno-0-42></a><span class=sd> - The paths in [`COMPONENTS.dirs`](../settings#django_components.app_settings.ComponentsSettings.dirs)</span>
<a id=__codelineno-0-43 name=__codelineno-0-43></a><span class=sd> must be absolute paths.</span>
<a id=__codelineno-0-44 name=__codelineno-0-44></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-45 name=__codelineno-0-45></a> <span class=c1># Allow to configure from settings which dirs should be checked for components</span>
<a id=__codelineno-0-46 name=__codelineno-0-46></a> <span class=n>component_dirs</span> <span class=o>=</span> <span class=n>app_settings</span><span class=o>.</span><span class=n>DIRS</span>
<a id=__codelineno-0-47 name=__codelineno-0-47></a>
<a id=__codelineno-0-48 name=__codelineno-0-48></a> <span class=c1># TODO_REMOVE_IN_V1</span>
<a id=__codelineno-0-49 name=__codelineno-0-49></a> <span class=n>raw_component_settings</span> <span class=o>=</span> <span class=nb>getattr</span><span class=p>(</span><span class=n>settings</span><span class=p>,</span> <span class=s2>&quot;COMPONENTS&quot;</span><span class=p>,</span> <span class=p>{})</span>
<a id=__codelineno-0-50 name=__codelineno-0-50></a> <span class=k>if</span> <span class=nb>isinstance</span><span class=p>(</span><span class=n>raw_component_settings</span><span class=p>,</span> <span class=nb>dict</span><span class=p>):</span>
<a id=__codelineno-0-51 name=__codelineno-0-51></a> <span class=n>raw_dirs_value</span> <span class=o>=</span> <span class=n>raw_component_settings</span><span class=o>.</span><span class=n>get</span><span class=p>(</span><span class=s2>&quot;dirs&quot;</span><span class=p>,</span> <span class=kc>None</span><span class=p>)</span>
<a id=__codelineno-0-52 name=__codelineno-0-52></a> <span class=k>elif</span> <span class=nb>isinstance</span><span class=p>(</span><span class=n>raw_component_settings</span><span class=p>,</span> <span class=n>ComponentsSettings</span><span class=p>):</span>
<a id=__codelineno-0-53 name=__codelineno-0-53></a> <span class=n>raw_dirs_value</span> <span class=o>=</span> <span class=n>raw_component_settings</span><span class=o>.</span><span class=n>dirs</span>
<a id=__codelineno-0-54 name=__codelineno-0-54></a> <span class=k>else</span><span class=p>:</span>
<a id=__codelineno-0-55 name=__codelineno-0-55></a> <span class=n>raw_dirs_value</span> <span class=o>=</span> <span class=kc>None</span>
<a id=__codelineno-0-56 name=__codelineno-0-56></a> <span class=n>is_component_dirs_set</span> <span class=o>=</span> <span class=n>raw_dirs_value</span> <span class=ow>is</span> <span class=ow>not</span> <span class=kc>None</span>
<a id=__codelineno-0-57 name=__codelineno-0-57></a> <span class=n>is_legacy_paths</span> <span class=o>=</span> <span class=p>(</span>
<a id=__codelineno-0-58 name=__codelineno-0-58></a> <span class=c1># Use value of `STATICFILES_DIRS` ONLY if `COMPONENT.dirs` not set</span>
<a id=__codelineno-0-59 name=__codelineno-0-59></a> <span class=ow>not</span> <span class=n>is_component_dirs_set</span>
<a id=__codelineno-0-60 name=__codelineno-0-60></a> <span class=ow>and</span> <span class=nb>hasattr</span><span class=p>(</span><span class=n>settings</span><span class=p>,</span> <span class=s2>&quot;STATICFILES_DIRS&quot;</span><span class=p>)</span>
<a id=__codelineno-0-61 name=__codelineno-0-61></a> <span class=ow>and</span> <span class=n>settings</span><span class=o>.</span><span class=n>STATICFILES_DIRS</span>
<a id=__codelineno-0-62 name=__codelineno-0-62></a> <span class=p>)</span>
<a id=__codelineno-0-63 name=__codelineno-0-63></a> <span class=k>if</span> <span class=n>is_legacy_paths</span><span class=p>:</span>
<a id=__codelineno-0-64 name=__codelineno-0-64></a> <span class=c1># NOTE: For STATICFILES_DIRS, we use the defaults even for empty list.</span>
<a id=__codelineno-0-65 name=__codelineno-0-65></a> <span class=c1># We don&#39;t do this for COMPONENTS.dirs, so user can explicitly specify &quot;NO dirs&quot;.</span>
<a id=__codelineno-0-66 name=__codelineno-0-66></a> <span class=n>component_dirs</span> <span class=o>=</span> <span class=n>settings</span><span class=o>.</span><span class=n>STATICFILES_DIRS</span> <span class=ow>or</span> <span class=p>[</span><span class=n>settings</span><span class=o>.</span><span class=n>BASE_DIR</span> <span class=o>/</span> <span class=s2>&quot;components&quot;</span><span class=p>]</span>
<a id=__codelineno-0-67 name=__codelineno-0-67></a> <span class=c1># END TODO_REMOVE_IN_V1</span>
<a id=__codelineno-0-68 name=__codelineno-0-68></a>
<a id=__codelineno-0-69 name=__codelineno-0-69></a> <span class=n>source</span> <span class=o>=</span> <span class=s2>&quot;STATICFILES_DIRS&quot;</span> <span class=k>if</span> <span class=n>is_legacy_paths</span> <span class=k>else</span> <span class=s2>&quot;COMPONENTS.dirs&quot;</span>
<a id=__codelineno-0-70 name=__codelineno-0-70></a>
<a id=__codelineno-0-71 name=__codelineno-0-71></a> <span class=n>logger</span><span class=o>.</span><span class=n>debug</span><span class=p>(</span>
<a id=__codelineno-0-72 name=__codelineno-0-72></a> <span class=s2>&quot;get_component_dirs will search for valid dirs from following options:</span><span class=se>\n</span><span class=s2>&quot;</span>
<a id=__codelineno-0-73 name=__codelineno-0-73></a> <span class=o>+</span> <span class=s2>&quot;</span><span class=se>\n</span><span class=s2>&quot;</span><span class=o>.</span><span class=n>join</span><span class=p>([</span><span class=sa>f</span><span class=s2>&quot; - </span><span class=si>{</span><span class=nb>str</span><span class=p>(</span><span class=n>d</span><span class=p>)</span><span class=si>}</span><span class=s2>&quot;</span> <span class=k>for</span> <span class=n>d</span> <span class=ow>in</span> <span class=n>component_dirs</span><span class=p>])</span>
<a id=__codelineno-0-74 name=__codelineno-0-74></a> <span class=p>)</span>
<a id=__codelineno-0-75 name=__codelineno-0-75></a>
<a id=__codelineno-0-76 name=__codelineno-0-76></a> <span class=c1># Add `[app]/[APP_DIR]` to the directories. This is, by default `[app]/components`</span>
<a id=__codelineno-0-77 name=__codelineno-0-77></a> <span class=n>app_paths</span><span class=p>:</span> <span class=n>List</span><span class=p>[</span><span class=n>Path</span><span class=p>]</span> <span class=o>=</span> <span class=p>[]</span>
<a id=__codelineno-0-78 name=__codelineno-0-78></a> <span class=k>if</span> <span class=n>include_apps</span><span class=p>:</span>
<a id=__codelineno-0-79 name=__codelineno-0-79></a> <span class=k>for</span> <span class=n>conf</span> <span class=ow>in</span> <span class=n>apps</span><span class=o>.</span><span class=n>get_app_configs</span><span class=p>():</span>
<a id=__codelineno-0-80 name=__codelineno-0-80></a> <span class=k>for</span> <span class=n>app_dir</span> <span class=ow>in</span> <span class=n>app_settings</span><span class=o>.</span><span class=n>APP_DIRS</span><span class=p>:</span>
<a id=__codelineno-0-81 name=__codelineno-0-81></a> <span class=n>comps_path</span> <span class=o>=</span> <span class=n>Path</span><span class=p>(</span><span class=n>conf</span><span class=o>.</span><span class=n>path</span><span class=p>)</span><span class=o>.</span><span class=n>joinpath</span><span class=p>(</span><span class=n>app_dir</span><span class=p>)</span>
<a id=__codelineno-0-82 name=__codelineno-0-82></a> <span class=k>if</span> <span class=n>comps_path</span><span class=o>.</span><span class=n>exists</span><span class=p>():</span>
<a id=__codelineno-0-83 name=__codelineno-0-83></a> <span class=n>app_paths</span><span class=o>.</span><span class=n>append</span><span class=p>(</span><span class=n>comps_path</span><span class=p>)</span>
<a id=__codelineno-0-84 name=__codelineno-0-84></a>
<a id=__codelineno-0-85 name=__codelineno-0-85></a> <span class=n>directories</span><span class=p>:</span> <span class=n>Set</span><span class=p>[</span><span class=n>Path</span><span class=p>]</span> <span class=o>=</span> <span class=nb>set</span><span class=p>(</span><span class=n>app_paths</span><span class=p>)</span>
<a id=__codelineno-0-86 name=__codelineno-0-86></a>
<a id=__codelineno-0-87 name=__codelineno-0-87></a> <span class=c1># Validate and add other values from the config</span>
<a id=__codelineno-0-88 name=__codelineno-0-88></a> <span class=k>for</span> <span class=n>component_dir</span> <span class=ow>in</span> <span class=n>component_dirs</span><span class=p>:</span>
<a id=__codelineno-0-89 name=__codelineno-0-89></a> <span class=c1># Consider tuples for STATICFILES_DIRS (See #489)</span>
<a id=__codelineno-0-90 name=__codelineno-0-90></a> <span class=c1># See https://docs.djangoproject.com/en/5.0/ref/settings/#prefixes-optional</span>
<a id=__codelineno-0-91 name=__codelineno-0-91></a> <span class=k>if</span> <span class=nb>isinstance</span><span class=p>(</span><span class=n>component_dir</span><span class=p>,</span> <span class=p>(</span><span class=nb>tuple</span><span class=p>,</span> <span class=nb>list</span><span class=p>)):</span>
<a id=__codelineno-0-92 name=__codelineno-0-92></a> <span class=n>component_dir</span> <span class=o>=</span> <span class=n>component_dir</span><span class=p>[</span><span class=mi>1</span><span class=p>]</span>
<a id=__codelineno-0-93 name=__codelineno-0-93></a> <span class=k>try</span><span class=p>:</span>
<a id=__codelineno-0-94 name=__codelineno-0-94></a> <span class=n>Path</span><span class=p>(</span><span class=n>component_dir</span><span class=p>)</span>
<a id=__codelineno-0-95 name=__codelineno-0-95></a> <span class=k>except</span> <span class=ne>TypeError</span><span class=p>:</span>
<a id=__codelineno-0-96 name=__codelineno-0-96></a> <span class=n>logger</span><span class=o>.</span><span class=n>warning</span><span class=p>(</span>
<a id=__codelineno-0-97 name=__codelineno-0-97></a> <span class=sa>f</span><span class=s2>&quot;</span><span class=si>{</span><span class=n>source</span><span class=si>}</span><span class=s2> expected str, bytes or os.PathLike object, or tuple/list of length 2. &quot;</span>
<a id=__codelineno-0-98 name=__codelineno-0-98></a> <span class=sa>f</span><span class=s2>&quot;See Django documentation for STATICFILES_DIRS. Got </span><span class=si>{</span><span class=nb>type</span><span class=p>(</span><span class=n>component_dir</span><span class=p>)</span><span class=si>}</span><span class=s2> : </span><span class=si>{</span><span class=n>component_dir</span><span class=si>}</span><span class=s2>&quot;</span>
<a id=__codelineno-0-99 name=__codelineno-0-99></a> <span class=p>)</span>
<a id=__codelineno-0-100 name=__codelineno-0-100></a> <span class=k>continue</span>
<a id=__codelineno-0-101 name=__codelineno-0-101></a>
<a id=__codelineno-0-102 name=__codelineno-0-102></a> <span class=k>if</span> <span class=ow>not</span> <span class=n>Path</span><span class=p>(</span><span class=n>component_dir</span><span class=p>)</span><span class=o>.</span><span class=n>is_absolute</span><span class=p>():</span>
<a id=__codelineno-0-103 name=__codelineno-0-103></a> <span class=k>raise</span> <span class=ne>ValueError</span><span class=p>(</span><span class=sa>f</span><span class=s2>&quot;</span><span class=si>{</span><span class=n>source</span><span class=si>}</span><span class=s2> must contain absolute paths, got &#39;</span><span class=si>{</span><span class=n>component_dir</span><span class=si>}</span><span class=s2>&#39;&quot;</span><span class=p>)</span>
<a id=__codelineno-0-104 name=__codelineno-0-104></a> <span class=k>else</span><span class=p>:</span>
<a id=__codelineno-0-105 name=__codelineno-0-105></a> <span class=n>directories</span><span class=o>.</span><span class=n>add</span><span class=p>(</span><span class=n>Path</span><span class=p>(</span><span class=n>component_dir</span><span class=p>)</span><span class=o>.</span><span class=n>resolve</span><span class=p>())</span>
<a id=__codelineno-0-106 name=__codelineno-0-106></a>
<a id=__codelineno-0-107 name=__codelineno-0-107></a> <span class=n>logger</span><span class=o>.</span><span class=n>debug</span><span class=p>(</span>
<a id=__codelineno-0-108 name=__codelineno-0-108></a> <span class=s2>&quot;get_component_dirs matched following template dirs:</span><span class=se>\n</span><span class=s2>&quot;</span> <span class=o>+</span> <span class=s2>&quot;</span><span class=se>\n</span><span class=s2>&quot;</span><span class=o>.</span><span class=n>join</span><span class=p>([</span><span class=sa>f</span><span class=s2>&quot; - </span><span class=si>{</span><span class=nb>str</span><span class=p>(</span><span class=n>d</span><span class=p>)</span><span class=si>}</span><span class=s2>&quot;</span> <span class=k>for</span> <span class=n>d</span> <span class=ow>in</span> <span class=n>directories</span><span class=p>])</span>
<a id=__codelineno-0-109 name=__codelineno-0-109></a> <span class=p>)</span>
<a id=__codelineno-0-110 name=__codelineno-0-110></a> <span class=k>return</span> <span class=nb>list</span><span class=p>(</span><span class=n>directories</span><span class=p>)</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h2 id=django_components.get_component_files class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-function"></code> <span class="doc doc-object-name doc-function-name">get_component_files</span> <a href=#django_components.get_component_files class=headerlink title="Permanent link">¤</a></h2> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>get_component_files</span><span class=p>(</span><span class=n>suffix</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-external" title=typing.List href=https://docs.python.org/3.12/library/typing.html#typing.List>List</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-internal" title=django_components.util.loader.ComponentFileEntry href=#django_components.util.loader.ComponentFileEntry>ComponentFileEntry</a></span><span class=p>]</span>
</code></pre></div> <div class="doc doc-contents "> <p>Search for files within the component directories (as defined in <a href=../api#django_components.get_component_dirs><code>get_component_dirs()</code></a>).</p> <p>Requires <code>BASE_DIR</code> setting to be set.</p> <p><span class=doc-section-title>Parameters:</span></p> <ul> <li class="doc-section-item field-body"> <b><code>suffix</code></b> (<code><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>]</code>, default: <code>None</code> ) <div class=doc-md-description> <p>The suffix to search for. E.g. <code>.py</code>, <code>.js</code>, <code>.css</code>. Defaults to <code>None</code>, which will search for all files.</p> </div> </li> </ul> <p><span class=doc-section-title>Returns:</span></p> <ul> <li class="doc-section-item field-body"> <code><a class="autorefs autorefs-external" title=typing.List href=https://docs.python.org/3.12/library/typing.html#typing.List>List</a>[<a class="autorefs autorefs-internal" title=django_components.util.loader.ComponentFileEntry href=#django_components.util.loader.ComponentFileEntry>ComponentFileEntry</a>]</code> <div class=doc-md-description> <p>List[ComponentFileEntry] A list of entries that contain both the filesystem path and the python import path (dot path).</p> </div> </li> </ul> <p><strong>Example:</strong></p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=kn>from</span> <span class=nn>django_components</span> <span class=kn>import</span> <span class=n>get_component_files</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=n>modules</span> <span class=o>=</span> <span class=n>get_component_files</span><span class=p>(</span><span class=s2>&quot;.py&quot;</span><span class=p>)</span>
</code></pre></div> <details class=quote> <summary>Source code in <code>src/django_components/util/loader.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-122>122</a></span>
<span class=normal><a href=#__codelineno-0-123>123</a></span>
<span class=normal><a href=#__codelineno-0-124>124</a></span>
<span class=normal><a href=#__codelineno-0-125>125</a></span>
<span class=normal><a href=#__codelineno-0-126>126</a></span>
<span class=normal><a href=#__codelineno-0-127>127</a></span>
<span class=normal><a href=#__codelineno-0-128>128</a></span>
<span class=normal><a href=#__codelineno-0-129>129</a></span>
<span class=normal><a href=#__codelineno-0-130>130</a></span>
<span class=normal><a href=#__codelineno-0-131>131</a></span>
<span class=normal><a href=#__codelineno-0-132>132</a></span>
<span class=normal><a href=#__codelineno-0-133>133</a></span>
<span class=normal><a href=#__codelineno-0-134>134</a></span>
<span class=normal><a href=#__codelineno-0-135>135</a></span>
<span class=normal><a href=#__codelineno-0-136>136</a></span>
<span class=normal><a href=#__codelineno-0-137>137</a></span>
<span class=normal><a href=#__codelineno-0-138>138</a></span>
<span class=normal><a href=#__codelineno-0-139>139</a></span>
<span class=normal><a href=#__codelineno-0-140>140</a></span>
<span class=normal><a href=#__codelineno-0-141>141</a></span>
<span class=normal><a href=#__codelineno-0-142>142</a></span>
<span class=normal><a href=#__codelineno-0-143>143</a></span>
<span class=normal><a href=#__codelineno-0-144>144</a></span>
<span class=normal><a href=#__codelineno-0-145>145</a></span>
<span class=normal><a href=#__codelineno-0-146>146</a></span>
<span class=normal><a href=#__codelineno-0-147>147</a></span>
<span class=normal><a href=#__codelineno-0-148>148</a></span>
<span class=normal><a href=#__codelineno-0-149>149</a></span>
<span class=normal><a href=#__codelineno-0-150>150</a></span>
<span class=normal><a href=#__codelineno-0-151>151</a></span>
<span class=normal><a href=#__codelineno-0-152>152</a></span>
<span class=normal><a href=#__codelineno-0-153>153</a></span>
<span class=normal><a href=#__codelineno-0-154>154</a></span>
<span class=normal><a href=#__codelineno-0-155>155</a></span>
<span class=normal><a href=#__codelineno-0-156>156</a></span>
<span class=normal><a href=#__codelineno-0-157>157</a></span>
<span class=normal><a href=#__codelineno-0-158>158</a></span>
<span class=normal><a href=#__codelineno-0-159>159</a></span>
<span class=normal><a href=#__codelineno-0-160>160</a></span>
<span class=normal><a href=#__codelineno-0-161>161</a></span>
<span class=normal><a href=#__codelineno-0-162>162</a></span>
<span class=normal><a href=#__codelineno-0-163>163</a></span>
<span class=normal><a href=#__codelineno-0-164>164</a></span>
<span class=normal><a href=#__codelineno-0-165>165</a></span>
<span class=normal><a href=#__codelineno-0-166>166</a></span>
<span class=normal><a href=#__codelineno-0-167>167</a></span>
<span class=normal><a href=#__codelineno-0-168>168</a></span>
<span class=normal><a href=#__codelineno-0-169>169</a></span>
<span class=normal><a href=#__codelineno-0-170>170</a></span>
<span class=normal><a href=#__codelineno-0-171>171</a></span>
<span class=normal><a href=#__codelineno-0-172>172</a></span>
<span class=normal><a href=#__codelineno-0-173>173</a></span>
<span class=normal><a href=#__codelineno-0-174>174</a></span>
<span class=normal><a href=#__codelineno-0-175>175</a></span>
<span class=normal><a href=#__codelineno-0-176>176</a></span>
<span class=normal><a href=#__codelineno-0-177>177</a></span>
<span class=normal><a href=#__codelineno-0-178>178</a></span>
<span class=normal><a href=#__codelineno-0-179>179</a></span>
<span class=normal><a href=#__codelineno-0-180>180</a></span>
<span class=normal><a href=#__codelineno-0-181>181</a></span>
<span class=normal><a href=#__codelineno-0-182>182</a></span>
<span class=normal><a href=#__codelineno-0-183>183</a></span>
<span class=normal><a href=#__codelineno-0-184>184</a></span>
<span class=normal><a href=#__codelineno-0-185>185</a></span>
<span class=normal><a href=#__codelineno-0-186>186</a></span>
<span class=normal><a href=#__codelineno-0-187>187</a></span>
<span class=normal><a href=#__codelineno-0-188>188</a></span>
<span class=normal><a href=#__codelineno-0-189>189</a></span>
<span class=normal><a href=#__codelineno-0-190>190</a></span>
<span class=normal><a href=#__codelineno-0-191>191</a></span>
<span class=normal><a href=#__codelineno-0-192>192</a></span>
<span class=normal><a href=#__codelineno-0-193>193</a></span>
<span class=normal><a href=#__codelineno-0-194>194</a></span>
<span class=normal><a href=#__codelineno-0-195>195</a></span>
<span class=normal><a href=#__codelineno-0-196>196</a></span>
<span class=normal><a href=#__codelineno-0-197>197</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-122 name=__codelineno-0-122></a><span class=k>def</span> <span class=nf>get_component_files</span><span class=p>(</span><span class=n>suffix</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=nb>str</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n>List</span><span class=p>[</span><span class=n>ComponentFileEntry</span><span class=p>]:</span>
<a id=__codelineno-0-123 name=__codelineno-0-123></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-124 name=__codelineno-0-124></a><span class=sd> Search for files within the component directories (as defined in</span>
<a id=__codelineno-0-125 name=__codelineno-0-125></a><span class=sd> [`get_component_dirs()`](../api#django_components.get_component_dirs)).</span>
<a id=__codelineno-0-126 name=__codelineno-0-126></a>
<a id=__codelineno-0-127 name=__codelineno-0-127></a><span class=sd> Requires `BASE_DIR` setting to be set.</span>
<a id=__codelineno-0-128 name=__codelineno-0-128></a>
<a id=__codelineno-0-129 name=__codelineno-0-129></a><span class=sd> Args:</span>
<a id=__codelineno-0-130 name=__codelineno-0-130></a><span class=sd> suffix (Optional[str], optional): The suffix to search for. E.g. `.py`, `.js`, `.css`.\</span>
<a id=__codelineno-0-131 name=__codelineno-0-131></a><span class=sd> Defaults to `None`, which will search for all files.</span>
<a id=__codelineno-0-132 name=__codelineno-0-132></a>
<a id=__codelineno-0-133 name=__codelineno-0-133></a><span class=sd> Returns:</span>
<a id=__codelineno-0-134 name=__codelineno-0-134></a><span class=sd> List[ComponentFileEntry] A list of entries that contain both the filesystem path and \</span>
<a id=__codelineno-0-135 name=__codelineno-0-135></a><span class=sd> the python import path (dot path).</span>
<a id=__codelineno-0-136 name=__codelineno-0-136></a>
<a id=__codelineno-0-137 name=__codelineno-0-137></a><span class=sd> **Example:**</span>
<a id=__codelineno-0-138 name=__codelineno-0-138></a>
<a id=__codelineno-0-139 name=__codelineno-0-139></a><span class=sd> ```python</span>
<a id=__codelineno-0-140 name=__codelineno-0-140></a><span class=sd> from django_components import get_component_files</span>
<a id=__codelineno-0-141 name=__codelineno-0-141></a>
<a id=__codelineno-0-142 name=__codelineno-0-142></a><span class=sd> modules = get_component_files(&quot;.py&quot;)</span>
<a id=__codelineno-0-143 name=__codelineno-0-143></a><span class=sd> ```</span>
<a id=__codelineno-0-144 name=__codelineno-0-144></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-145 name=__codelineno-0-145></a> <span class=n>search_glob</span> <span class=o>=</span> <span class=sa>f</span><span class=s2>&quot;**/*</span><span class=si>{</span><span class=n>suffix</span><span class=si>}</span><span class=s2>&quot;</span> <span class=k>if</span> <span class=n>suffix</span> <span class=k>else</span> <span class=s2>&quot;**/*&quot;</span>
<a id=__codelineno-0-146 name=__codelineno-0-146></a>
<a id=__codelineno-0-147 name=__codelineno-0-147></a> <span class=n>dirs</span> <span class=o>=</span> <span class=n>get_component_dirs</span><span class=p>(</span><span class=n>include_apps</span><span class=o>=</span><span class=kc>False</span><span class=p>)</span>
<a id=__codelineno-0-148 name=__codelineno-0-148></a> <span class=n>component_filepaths</span> <span class=o>=</span> <span class=n>_search_dirs</span><span class=p>(</span><span class=n>dirs</span><span class=p>,</span> <span class=n>search_glob</span><span class=p>)</span>
<a id=__codelineno-0-149 name=__codelineno-0-149></a>
<a id=__codelineno-0-150 name=__codelineno-0-150></a> <span class=k>if</span> <span class=nb>hasattr</span><span class=p>(</span><span class=n>settings</span><span class=p>,</span> <span class=s2>&quot;BASE_DIR&quot;</span><span class=p>)</span> <span class=ow>and</span> <span class=n>settings</span><span class=o>.</span><span class=n>BASE_DIR</span><span class=p>:</span>
<a id=__codelineno-0-151 name=__codelineno-0-151></a> <span class=n>project_root</span> <span class=o>=</span> <span class=nb>str</span><span class=p>(</span><span class=n>settings</span><span class=o>.</span><span class=n>BASE_DIR</span><span class=p>)</span>
<a id=__codelineno-0-152 name=__codelineno-0-152></a> <span class=k>else</span><span class=p>:</span>
<a id=__codelineno-0-153 name=__codelineno-0-153></a> <span class=c1># Fallback for getting the root dir, see https://stackoverflow.com/a/16413955/9788634</span>
<a id=__codelineno-0-154 name=__codelineno-0-154></a> <span class=n>project_root</span> <span class=o>=</span> <span class=n>os</span><span class=o>.</span><span class=n>path</span><span class=o>.</span><span class=n>abspath</span><span class=p>(</span><span class=n>os</span><span class=o>.</span><span class=n>path</span><span class=o>.</span><span class=n>dirname</span><span class=p>(</span><span class=vm>__name__</span><span class=p>))</span>
<a id=__codelineno-0-155 name=__codelineno-0-155></a>
<a id=__codelineno-0-156 name=__codelineno-0-156></a> <span class=c1># NOTE: We handle dirs from `COMPONENTS.dirs` and from individual apps separately.</span>
<a id=__codelineno-0-157 name=__codelineno-0-157></a> <span class=n>modules</span><span class=p>:</span> <span class=n>List</span><span class=p>[</span><span class=n>ComponentFileEntry</span><span class=p>]</span> <span class=o>=</span> <span class=p>[]</span>
<a id=__codelineno-0-158 name=__codelineno-0-158></a>
<a id=__codelineno-0-159 name=__codelineno-0-159></a> <span class=c1># First let&#39;s handle the dirs from `COMPONENTS.dirs`</span>
<a id=__codelineno-0-160 name=__codelineno-0-160></a> <span class=c1>#</span>
<a id=__codelineno-0-161 name=__codelineno-0-161></a> <span class=c1># Because for dirs in `COMPONENTS.dirs`, we assume they will be nested under `BASE_DIR`,</span>
<a id=__codelineno-0-162 name=__codelineno-0-162></a> <span class=c1># and that `BASE_DIR` is the current working dir (CWD). So the path relatively to `BASE_DIR`</span>
<a id=__codelineno-0-163 name=__codelineno-0-163></a> <span class=c1># is ALSO the python import path.</span>
<a id=__codelineno-0-164 name=__codelineno-0-164></a> <span class=k>for</span> <span class=n>filepath</span> <span class=ow>in</span> <span class=n>component_filepaths</span><span class=p>:</span>
<a id=__codelineno-0-165 name=__codelineno-0-165></a> <span class=n>module_path</span> <span class=o>=</span> <span class=n>_filepath_to_python_module</span><span class=p>(</span><span class=n>filepath</span><span class=p>,</span> <span class=n>project_root</span><span class=p>,</span> <span class=kc>None</span><span class=p>)</span>
<a id=__codelineno-0-166 name=__codelineno-0-166></a> <span class=c1># Ignore files starting with dot `.` or files in dirs that start with dot.</span>
<a id=__codelineno-0-167 name=__codelineno-0-167></a> <span class=c1>#</span>
<a id=__codelineno-0-168 name=__codelineno-0-168></a> <span class=c1># If any of the parts of the path start with a dot, e.g. the filesystem path</span>
<a id=__codelineno-0-169 name=__codelineno-0-169></a> <span class=c1># is `./abc/.def`, then this gets converted to python module as `abc..def`</span>
<a id=__codelineno-0-170 name=__codelineno-0-170></a> <span class=c1>#</span>
<a id=__codelineno-0-171 name=__codelineno-0-171></a> <span class=c1># NOTE: This approach also ignores files:</span>
<a id=__codelineno-0-172 name=__codelineno-0-172></a> <span class=c1># - with two dots in the middle (ab..cd.py)</span>
<a id=__codelineno-0-173 name=__codelineno-0-173></a> <span class=c1># - an extra dot at the end (abcd..py)</span>
<a id=__codelineno-0-174 name=__codelineno-0-174></a> <span class=c1># - files outside of the parent component (../abcd.py).</span>
<a id=__codelineno-0-175 name=__codelineno-0-175></a> <span class=c1># But all these are NOT valid python modules so that&#39;s fine.</span>
<a id=__codelineno-0-176 name=__codelineno-0-176></a> <span class=k>if</span> <span class=s2>&quot;..&quot;</span> <span class=ow>in</span> <span class=n>module_path</span><span class=p>:</span>
<a id=__codelineno-0-177 name=__codelineno-0-177></a> <span class=k>continue</span>
<a id=__codelineno-0-178 name=__codelineno-0-178></a>
<a id=__codelineno-0-179 name=__codelineno-0-179></a> <span class=n>entry</span> <span class=o>=</span> <span class=n>ComponentFileEntry</span><span class=p>(</span><span class=n>dot_path</span><span class=o>=</span><span class=n>module_path</span><span class=p>,</span> <span class=n>filepath</span><span class=o>=</span><span class=n>filepath</span><span class=p>)</span>
<a id=__codelineno-0-180 name=__codelineno-0-180></a> <span class=n>modules</span><span class=o>.</span><span class=n>append</span><span class=p>(</span><span class=n>entry</span><span class=p>)</span>
<a id=__codelineno-0-181 name=__codelineno-0-181></a>
<a id=__codelineno-0-182 name=__codelineno-0-182></a> <span class=c1># For for apps, the directories may be outside of the project, e.g. in case of third party</span>
<a id=__codelineno-0-183 name=__codelineno-0-183></a> <span class=c1># apps. So we have to resolve the python import path relative to the package name / the root</span>
<a id=__codelineno-0-184 name=__codelineno-0-184></a> <span class=c1># import path for the app.</span>
<a id=__codelineno-0-185 name=__codelineno-0-185></a> <span class=c1># See https://github.com/EmilStenstrom/django-components/issues/669</span>
<a id=__codelineno-0-186 name=__codelineno-0-186></a> <span class=k>for</span> <span class=n>conf</span> <span class=ow>in</span> <span class=n>apps</span><span class=o>.</span><span class=n>get_app_configs</span><span class=p>():</span>
<a id=__codelineno-0-187 name=__codelineno-0-187></a> <span class=k>for</span> <span class=n>app_dir</span> <span class=ow>in</span> <span class=n>app_settings</span><span class=o>.</span><span class=n>APP_DIRS</span><span class=p>:</span>
<a id=__codelineno-0-188 name=__codelineno-0-188></a> <span class=n>comps_path</span> <span class=o>=</span> <span class=n>Path</span><span class=p>(</span><span class=n>conf</span><span class=o>.</span><span class=n>path</span><span class=p>)</span><span class=o>.</span><span class=n>joinpath</span><span class=p>(</span><span class=n>app_dir</span><span class=p>)</span>
<a id=__codelineno-0-189 name=__codelineno-0-189></a> <span class=k>if</span> <span class=ow>not</span> <span class=n>comps_path</span><span class=o>.</span><span class=n>exists</span><span class=p>():</span>
<a id=__codelineno-0-190 name=__codelineno-0-190></a> <span class=k>continue</span>
<a id=__codelineno-0-191 name=__codelineno-0-191></a> <span class=n>app_component_filepaths</span> <span class=o>=</span> <span class=n>_search_dirs</span><span class=p>([</span><span class=n>comps_path</span><span class=p>],</span> <span class=n>search_glob</span><span class=p>)</span>
<a id=__codelineno-0-192 name=__codelineno-0-192></a> <span class=k>for</span> <span class=n>filepath</span> <span class=ow>in</span> <span class=n>app_component_filepaths</span><span class=p>:</span>
<a id=__codelineno-0-193 name=__codelineno-0-193></a> <span class=n>app_component_module</span> <span class=o>=</span> <span class=n>_filepath_to_python_module</span><span class=p>(</span><span class=n>filepath</span><span class=p>,</span> <span class=n>conf</span><span class=o>.</span><span class=n>path</span><span class=p>,</span> <span class=n>conf</span><span class=o>.</span><span class=n>name</span><span class=p>)</span>
<a id=__codelineno-0-194 name=__codelineno-0-194></a> <span class=n>entry</span> <span class=o>=</span> <span class=n>ComponentFileEntry</span><span class=p>(</span><span class=n>dot_path</span><span class=o>=</span><span class=n>app_component_module</span><span class=p>,</span> <span class=n>filepath</span><span class=o>=</span><span class=n>filepath</span><span class=p>)</span>
<a id=__codelineno-0-195 name=__codelineno-0-195></a> <span class=n>modules</span><span class=o>.</span><span class=n>append</span><span class=p>(</span><span class=n>entry</span><span class=p>)</span>
<a id=__codelineno-0-196 name=__codelineno-0-196></a>
<a id=__codelineno-0-197 name=__codelineno-0-197></a> <span class=k>return</span> <span class=n>modules</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h2 id=django_components.import_libraries class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-function"></code> <span class="doc doc-object-name doc-function-name">import_libraries</span> <a href=#django_components.import_libraries class=headerlink title="Permanent link">¤</a></h2> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>import_libraries</span><span class=p>(</span><span class=n>map_module</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Callable href=https://docs.python.org/3.12/library/typing.html#typing.Callable>Callable</a></span><span class=p>[[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>],</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-external" title=typing.List href=https://docs.python.org/3.12/library/typing.html#typing.List>List</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]</span>
</code></pre></div> <div class="doc doc-contents "> <p>Import modules set in <a href=../settings#django_components.app_settings.ComponentsSettings.libraries><code>COMPONENTS.libraries</code></a> setting.</p> <p>See <a href=../../concepts/fundamentals/autodiscovery>Autodiscovery</a>.</p> <p><span class=doc-section-title>Parameters:</span></p> <ul> <li class="doc-section-item field-body"> <b><code>map_module</code></b> (<code><a class="autorefs autorefs-external" title=typing.Callable href=https://docs.python.org/3.12/library/typing.html#typing.Callable>Callable</a>[[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>], <a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>]</code>, default: <code>None</code> ) <div class=doc-md-description> <p>Map the module paths with <code>map_module</code> function. This serves as an escape hatch for when you need to use this function in tests.</p> </div> </li> </ul> <p><span class=doc-section-title>Returns:</span></p> <ul> <li class="doc-section-item field-body"> <code><a class="autorefs autorefs-external" title=typing.List href=https://docs.python.org/3.12/library/typing.html#typing.List>List</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>]</code> <div class=doc-md-description> <p>List[str]: A list of module paths of imported files.</p> </div> </li> </ul> <p><strong>Examples:</strong></p> <p>Normal usage - load libraries after Django has loaded <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=kn>from</span> <span class=nn>django_components</span> <span class=kn>import</span> <span class=n>import_libraries</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=k>class</span> <span class=nc>MyAppConfig</span><span class=p>(</span><span class=n>AppConfig</span><span class=p>):</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a> <span class=k>def</span> <span class=nf>ready</span><span class=p>(</span><span class=bp>self</span><span class=p>):</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a> <span class=n>import_libraries</span><span class=p>()</span>
</code></pre></div></p> <p>Potential usage in tests <div class=highlight><pre><span></span><code><a id=__codelineno-1-1 name=__codelineno-1-1 href=#__codelineno-1-1></a><span class=kn>from</span> <span class=nn>django_components</span> <span class=kn>import</span> <span class=n>import_libraries</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=n>import_libraries</span><span class=p>(</span><span class=k>lambda</span> <span class=n>path</span><span class=p>:</span> <span class=n>path</span><span class=o>.</span><span class=n>replace</span><span class=p>(</span><span class=s2>&quot;tests.&quot;</span><span class=p>,</span> <span class=s2>&quot;myapp.&quot;</span><span class=p>))</span>
</code></pre></div></p> <details class=quote> <summary>Source code in <code>src/django_components/autodiscovery.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-41>41</a></span>
<span class=normal><a href=#__codelineno-0-42>42</a></span>
<span class=normal><a href=#__codelineno-0-43>43</a></span>
<span class=normal><a href=#__codelineno-0-44>44</a></span>
<span class=normal><a href=#__codelineno-0-45>45</a></span>
<span class=normal><a href=#__codelineno-0-46>46</a></span>
<span class=normal><a href=#__codelineno-0-47>47</a></span>
<span class=normal><a href=#__codelineno-0-48>48</a></span>
<span class=normal><a href=#__codelineno-0-49>49</a></span>
<span class=normal><a href=#__codelineno-0-50>50</a></span>
<span class=normal><a href=#__codelineno-0-51>51</a></span>
<span class=normal><a href=#__codelineno-0-52>52</a></span>
<span class=normal><a href=#__codelineno-0-53>53</a></span>
<span class=normal><a href=#__codelineno-0-54>54</a></span>
<span class=normal><a href=#__codelineno-0-55>55</a></span>
<span class=normal><a href=#__codelineno-0-56>56</a></span>
<span class=normal><a href=#__codelineno-0-57>57</a></span>
<span class=normal><a href=#__codelineno-0-58>58</a></span>
<span class=normal><a href=#__codelineno-0-59>59</a></span>
<span class=normal><a href=#__codelineno-0-60>60</a></span>
<span class=normal><a href=#__codelineno-0-61>61</a></span>
<span class=normal><a href=#__codelineno-0-62>62</a></span>
<span class=normal><a href=#__codelineno-0-63>63</a></span>
<span class=normal><a href=#__codelineno-0-64>64</a></span>
<span class=normal><a href=#__codelineno-0-65>65</a></span>
<span class=normal><a href=#__codelineno-0-66>66</a></span>
<span class=normal><a href=#__codelineno-0-67>67</a></span>
<span class=normal><a href=#__codelineno-0-68>68</a></span>
<span class=normal><a href=#__codelineno-0-69>69</a></span>
<span class=normal><a href=#__codelineno-0-70>70</a></span>
<span class=normal><a href=#__codelineno-0-71>71</a></span>
<span class=normal><a href=#__codelineno-0-72>72</a></span>
<span class=normal><a href=#__codelineno-0-73>73</a></span>
<span class=normal><a href=#__codelineno-0-74>74</a></span>
<span class=normal><a href=#__codelineno-0-75>75</a></span>
<span class=normal><a href=#__codelineno-0-76>76</a></span>
<span class=normal><a href=#__codelineno-0-77>77</a></span>
<span class=normal><a href=#__codelineno-0-78>78</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-41 name=__codelineno-0-41></a><span class=k>def</span> <span class=nf>import_libraries</span><span class=p>(</span>
<a id=__codelineno-0-42 name=__codelineno-0-42></a> <span class=n>map_module</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>Callable</span><span class=p>[[</span><span class=nb>str</span><span class=p>],</span> <span class=nb>str</span><span class=p>]]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-43 name=__codelineno-0-43></a><span class=p>)</span> <span class=o>-&gt;</span> <span class=n>List</span><span class=p>[</span><span class=nb>str</span><span class=p>]:</span>
<a id=__codelineno-0-44 name=__codelineno-0-44></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-45 name=__codelineno-0-45></a><span class=sd> Import modules set in</span>
<a id=__codelineno-0-46 name=__codelineno-0-46></a><span class=sd> [`COMPONENTS.libraries`](../settings#django_components.app_settings.ComponentsSettings.libraries)</span>
<a id=__codelineno-0-47 name=__codelineno-0-47></a><span class=sd> setting.</span>
<a id=__codelineno-0-48 name=__codelineno-0-48></a>
<a id=__codelineno-0-49 name=__codelineno-0-49></a><span class=sd> See [Autodiscovery](../../concepts/fundamentals/autodiscovery).</span>
<a id=__codelineno-0-50 name=__codelineno-0-50></a>
<a id=__codelineno-0-51 name=__codelineno-0-51></a><span class=sd> Args:</span>
<a id=__codelineno-0-52 name=__codelineno-0-52></a><span class=sd> map_module (Callable[[str], str], optional): Map the module paths with `map_module` function.\</span>
<a id=__codelineno-0-53 name=__codelineno-0-53></a><span class=sd> This serves as an escape hatch for when you need to use this function in tests.</span>
<a id=__codelineno-0-54 name=__codelineno-0-54></a>
<a id=__codelineno-0-55 name=__codelineno-0-55></a><span class=sd> Returns:</span>
<a id=__codelineno-0-56 name=__codelineno-0-56></a><span class=sd> List[str]: A list of module paths of imported files.</span>
<a id=__codelineno-0-57 name=__codelineno-0-57></a>
<a id=__codelineno-0-58 name=__codelineno-0-58></a><span class=sd> **Examples:**</span>
<a id=__codelineno-0-59 name=__codelineno-0-59></a>
<a id=__codelineno-0-60 name=__codelineno-0-60></a><span class=sd> Normal usage - load libraries after Django has loaded</span>
<a id=__codelineno-0-61 name=__codelineno-0-61></a><span class=sd> ```python</span>
<a id=__codelineno-0-62 name=__codelineno-0-62></a><span class=sd> from django_components import import_libraries</span>
<a id=__codelineno-0-63 name=__codelineno-0-63></a>
<a id=__codelineno-0-64 name=__codelineno-0-64></a><span class=sd> class MyAppConfig(AppConfig):</span>
<a id=__codelineno-0-65 name=__codelineno-0-65></a><span class=sd> def ready(self):</span>
<a id=__codelineno-0-66 name=__codelineno-0-66></a><span class=sd> import_libraries()</span>
<a id=__codelineno-0-67 name=__codelineno-0-67></a><span class=sd> ```</span>
<a id=__codelineno-0-68 name=__codelineno-0-68></a>
<a id=__codelineno-0-69 name=__codelineno-0-69></a><span class=sd> Potential usage in tests</span>
<a id=__codelineno-0-70 name=__codelineno-0-70></a><span class=sd> ```python</span>
<a id=__codelineno-0-71 name=__codelineno-0-71></a><span class=sd> from django_components import import_libraries</span>
<a id=__codelineno-0-72 name=__codelineno-0-72></a>
<a id=__codelineno-0-73 name=__codelineno-0-73></a><span class=sd> import_libraries(lambda path: path.replace(&quot;tests.&quot;, &quot;myapp.&quot;))</span>
<a id=__codelineno-0-74 name=__codelineno-0-74></a><span class=sd> ```</span>
<a id=__codelineno-0-75 name=__codelineno-0-75></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-76 name=__codelineno-0-76></a> <span class=kn>from</span> <span class=nn>django_components.app_settings</span> <span class=kn>import</span> <span class=n>app_settings</span>
<a id=__codelineno-0-77 name=__codelineno-0-77></a>
<a id=__codelineno-0-78 name=__codelineno-0-78></a> <span class=k>return</span> <span class=n>_import_modules</span><span class=p>(</span><span class=n>app_settings</span><span class=o>.</span><span class=n>LIBRARIES</span><span class=p>,</span> <span class=n>map_module</span><span class=p>)</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h2 id=django_components.register class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-function"></code> <span class="doc doc-object-name doc-function-name">register</span> <a href=#django_components.register class=headerlink title="Permanent link">¤</a></h2> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>register</span><span class=p>(</span><span class=n>name</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span> <span class=n>registry</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-internal" title=django_components.component_registry.ComponentRegistry href=#django_components.component_registry.ComponentRegistry>ComponentRegistry</a></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-external" title=typing.Callable href=https://docs.python.org/3.12/library/typing.html#typing.Callable>Callable</a></span><span class=p>[</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a> <span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Type href=https://docs.python.org/3.12/library/typing.html#typing.Type>Type</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-internal" title=django_components.component.Component href=#django_components.component.Component>Component</a></span><span class=p>[</span><span class=n><span title=django_components.component.ArgsType>ArgsType</span></span><span class=p>,</span> <span class=n><span title=django_components.component.KwargsType>KwargsType</span></span><span class=p>,</span> <span class=n><span title=django_components.component.SlotsType>SlotsType</span></span><span class=p>,</span> <span class=n><span title=django_components.component.DataType>DataType</span></span><span class=p>,</span> <span class=n><span title=django_components.component.JsDataType>JsDataType</span></span><span class=p>,</span> <span class=n><span title=django_components.component.CssDataType>CssDataType</span></span><span class=p>]]],</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a> <span class=n><a class="autorefs autorefs-external" title=typing.Type href=https://docs.python.org/3.12/library/typing.html#typing.Type>Type</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-internal" title=django_components.component.Component href=#django_components.component.Component>Component</a></span><span class=p>[</span><span class=n><span title=django_components.component.ArgsType>ArgsType</span></span><span class=p>,</span> <span class=n><span title=django_components.component.KwargsType>KwargsType</span></span><span class=p>,</span> <span class=n><span title=django_components.component.SlotsType>SlotsType</span></span><span class=p>,</span> <span class=n><span title=django_components.component.DataType>DataType</span></span><span class=p>,</span> <span class=n><span title=django_components.component.JsDataType>JsDataType</span></span><span class=p>,</span> <span class=n><span title=django_components.component.CssDataType>CssDataType</span></span><span class=p>]],</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a><span class=p>]</span>
</code></pre></div> <div class="doc doc-contents "> <p>Class decorator for registering a <a href=./#django_components.Component>component</a> to a <a href=./#django_components.ComponentRegistry>component registry</a>.</p> <p>See <a href=../../concepts/advanced/component_registry>Registering components</a>.</p> <p><span class=doc-section-title>Parameters:</span></p> <ul> <li class="doc-section-item field-body"> <b><code>name</code></b> (<code><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></code>) <div class=doc-md-description> <p>Registered name. This is the name by which the component will be accessed from within a template when using the <a href=../template_tags#component><code>{% component %}</code></a> tag. Required.</p> </div> </li> <li class="doc-section-item field-body"> <b><code>registry</code></b> (<code><a class="autorefs autorefs-internal" title=django_components.component_registry.ComponentRegistry href=#django_components.component_registry.ComponentRegistry>ComponentRegistry</a></code>, default: <code>None</code> ) <div class=doc-md-description> <p>Specify the <a href=./#django_components.ComponentRegistry>registry</a> to which to register this component. If omitted, component is registered to the default registry.</p> </div> </li> </ul> <p><span class=doc-section-title>Raises:</span></p> <ul> <li class="doc-section-item field-body"> <code><a class="autorefs autorefs-internal" title=django_components.component_registry.AlreadyRegistered href=#django_components.component_registry.AlreadyRegistered>AlreadyRegistered</a></code> <div class=doc-md-description> <p>If there is already a component registered under the same name.</p> </div> </li> </ul> <p><strong>Examples</strong>:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=kn>from</span> <span class=nn>django_components</span> <span class=kn>import</span> <span class=n>Component</span><span class=p>,</span> <span class=n>register</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=nd>@register</span><span class=p>(</span><span class=s2>&quot;my_component&quot;</span><span class=p>)</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a><span class=k>class</span> <span class=nc>MyComponent</span><span class=p>(</span><span class=n>Component</span><span class=p>):</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a> <span class=o>...</span>
</code></pre></div> <p>Specifing <a href=./#django_components.ComponentRegistry><code>ComponentRegistry</code></a> the component should be registered to by setting the <code>registry</code> kwarg:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-1-1 name=__codelineno-1-1 href=#__codelineno-1-1></a><span class=kn>from</span> <span class=nn>django.template</span> <span class=kn>import</span> <span class=n>Library</span>
<a id=__codelineno-1-2 name=__codelineno-1-2 href=#__codelineno-1-2></a><span class=kn>from</span> <span class=nn>django_components</span> <span class=kn>import</span> <span class=n>Component</span><span class=p>,</span> <span class=n>ComponentRegistry</span><span class=p>,</span> <span class=n>register</span>
<a id=__codelineno-1-3 name=__codelineno-1-3 href=#__codelineno-1-3></a>
<a id=__codelineno-1-4 name=__codelineno-1-4 href=#__codelineno-1-4></a><span class=n>my_lib</span> <span class=o>=</span> <span class=n>Library</span><span class=p>()</span>
<a id=__codelineno-1-5 name=__codelineno-1-5 href=#__codelineno-1-5></a><span class=n>my_reg</span> <span class=o>=</span> <span class=n>ComponentRegistry</span><span class=p>(</span><span class=n>library</span><span class=o>=</span><span class=n>my_lib</span><span class=p>)</span>
<a id=__codelineno-1-6 name=__codelineno-1-6 href=#__codelineno-1-6></a>
<a id=__codelineno-1-7 name=__codelineno-1-7 href=#__codelineno-1-7></a><span class=nd>@register</span><span class=p>(</span><span class=s2>&quot;my_component&quot;</span><span class=p>,</span> <span class=n>registry</span><span class=o>=</span><span class=n>my_reg</span><span class=p>)</span>
<a id=__codelineno-1-8 name=__codelineno-1-8 href=#__codelineno-1-8></a><span class=k>class</span> <span class=nc>MyComponent</span><span class=p>(</span><span class=n>Component</span><span class=p>):</span>
<a id=__codelineno-1-9 name=__codelineno-1-9 href=#__codelineno-1-9></a> <span class=o>...</span>
</code></pre></div> <details class=quote> <summary>Source code in <code>src/django_components/component_registry.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-504>504</a></span>
<span class=normal><a href=#__codelineno-0-505>505</a></span>
<span class=normal><a href=#__codelineno-0-506>506</a></span>
<span class=normal><a href=#__codelineno-0-507>507</a></span>
<span class=normal><a href=#__codelineno-0-508>508</a></span>
<span class=normal><a href=#__codelineno-0-509>509</a></span>
<span class=normal><a href=#__codelineno-0-510>510</a></span>
<span class=normal><a href=#__codelineno-0-511>511</a></span>
<span class=normal><a href=#__codelineno-0-512>512</a></span>
<span class=normal><a href=#__codelineno-0-513>513</a></span>
<span class=normal><a href=#__codelineno-0-514>514</a></span>
<span class=normal><a href=#__codelineno-0-515>515</a></span>
<span class=normal><a href=#__codelineno-0-516>516</a></span>
<span class=normal><a href=#__codelineno-0-517>517</a></span>
<span class=normal><a href=#__codelineno-0-518>518</a></span>
<span class=normal><a href=#__codelineno-0-519>519</a></span>
<span class=normal><a href=#__codelineno-0-520>520</a></span>
<span class=normal><a href=#__codelineno-0-521>521</a></span>
<span class=normal><a href=#__codelineno-0-522>522</a></span>
<span class=normal><a href=#__codelineno-0-523>523</a></span>
<span class=normal><a href=#__codelineno-0-524>524</a></span>
<span class=normal><a href=#__codelineno-0-525>525</a></span>
<span class=normal><a href=#__codelineno-0-526>526</a></span>
<span class=normal><a href=#__codelineno-0-527>527</a></span>
<span class=normal><a href=#__codelineno-0-528>528</a></span>
<span class=normal><a href=#__codelineno-0-529>529</a></span>
<span class=normal><a href=#__codelineno-0-530>530</a></span>
<span class=normal><a href=#__codelineno-0-531>531</a></span>
<span class=normal><a href=#__codelineno-0-532>532</a></span>
<span class=normal><a href=#__codelineno-0-533>533</a></span>
<span class=normal><a href=#__codelineno-0-534>534</a></span>
<span class=normal><a href=#__codelineno-0-535>535</a></span>
<span class=normal><a href=#__codelineno-0-536>536</a></span>
<span class=normal><a href=#__codelineno-0-537>537</a></span>
<span class=normal><a href=#__codelineno-0-538>538</a></span>
<span class=normal><a href=#__codelineno-0-539>539</a></span>
<span class=normal><a href=#__codelineno-0-540>540</a></span>
<span class=normal><a href=#__codelineno-0-541>541</a></span>
<span class=normal><a href=#__codelineno-0-542>542</a></span>
<span class=normal><a href=#__codelineno-0-543>543</a></span>
<span class=normal><a href=#__codelineno-0-544>544</a></span>
<span class=normal><a href=#__codelineno-0-545>545</a></span>
<span class=normal><a href=#__codelineno-0-546>546</a></span>
<span class=normal><a href=#__codelineno-0-547>547</a></span>
<span class=normal><a href=#__codelineno-0-548>548</a></span>
<span class=normal><a href=#__codelineno-0-549>549</a></span>
<span class=normal><a href=#__codelineno-0-550>550</a></span>
<span class=normal><a href=#__codelineno-0-551>551</a></span>
<span class=normal><a href=#__codelineno-0-552>552</a></span>
<span class=normal><a href=#__codelineno-0-553>553</a></span>
<span class=normal><a href=#__codelineno-0-554>554</a></span>
<span class=normal><a href=#__codelineno-0-555>555</a></span>
<span class=normal><a href=#__codelineno-0-556>556</a></span>
<span class=normal><a href=#__codelineno-0-557>557</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-504 name=__codelineno-0-504></a><span class=k>def</span> <span class=nf>register</span><span class=p>(</span><span class=n>name</span><span class=p>:</span> <span class=nb>str</span><span class=p>,</span> <span class=n>registry</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>ComponentRegistry</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n>Callable</span><span class=p>[</span>
<a id=__codelineno-0-505 name=__codelineno-0-505></a> <span class=p>[</span><span class=n>Type</span><span class=p>[</span><span class=s2>&quot;Component[ArgsType, KwargsType, SlotsType, DataType, JsDataType, CssDataType]&quot;</span><span class=p>]],</span>
<a id=__codelineno-0-506 name=__codelineno-0-506></a> <span class=n>Type</span><span class=p>[</span><span class=s2>&quot;Component[ArgsType, KwargsType, SlotsType, DataType, JsDataType, CssDataType]&quot;</span><span class=p>],</span>
<a id=__codelineno-0-507 name=__codelineno-0-507></a><span class=p>]:</span>
<a id=__codelineno-0-508 name=__codelineno-0-508></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-509 name=__codelineno-0-509></a><span class=sd> Class decorator for registering a [component](./#django_components.Component)</span>
<a id=__codelineno-0-510 name=__codelineno-0-510></a><span class=sd> to a [component registry](./#django_components.ComponentRegistry).</span>
<a id=__codelineno-0-511 name=__codelineno-0-511></a>
<a id=__codelineno-0-512 name=__codelineno-0-512></a><span class=sd> See [Registering components](../../concepts/advanced/component_registry).</span>
<a id=__codelineno-0-513 name=__codelineno-0-513></a>
<a id=__codelineno-0-514 name=__codelineno-0-514></a><span class=sd> Args:</span>
<a id=__codelineno-0-515 name=__codelineno-0-515></a><span class=sd> name (str): Registered name. This is the name by which the component will be accessed\</span>
<a id=__codelineno-0-516 name=__codelineno-0-516></a><span class=sd> from within a template when using the [`{% component %}`](../template_tags#component) tag. Required.</span>
<a id=__codelineno-0-517 name=__codelineno-0-517></a><span class=sd> registry (ComponentRegistry, optional): Specify the [registry](./#django_components.ComponentRegistry)\</span>
<a id=__codelineno-0-518 name=__codelineno-0-518></a><span class=sd> to which to register this component. If omitted, component is registered to the default registry.</span>
<a id=__codelineno-0-519 name=__codelineno-0-519></a>
<a id=__codelineno-0-520 name=__codelineno-0-520></a><span class=sd> Raises:</span>
<a id=__codelineno-0-521 name=__codelineno-0-521></a><span class=sd> AlreadyRegistered: If there is already a component registered under the same name.</span>
<a id=__codelineno-0-522 name=__codelineno-0-522></a>
<a id=__codelineno-0-523 name=__codelineno-0-523></a><span class=sd> **Examples**:</span>
<a id=__codelineno-0-524 name=__codelineno-0-524></a>
<a id=__codelineno-0-525 name=__codelineno-0-525></a><span class=sd> ```python</span>
<a id=__codelineno-0-526 name=__codelineno-0-526></a><span class=sd> from django_components import Component, register</span>
<a id=__codelineno-0-527 name=__codelineno-0-527></a>
<a id=__codelineno-0-528 name=__codelineno-0-528></a><span class=sd> @register(&quot;my_component&quot;)</span>
<a id=__codelineno-0-529 name=__codelineno-0-529></a><span class=sd> class MyComponent(Component):</span>
<a id=__codelineno-0-530 name=__codelineno-0-530></a><span class=sd> ...</span>
<a id=__codelineno-0-531 name=__codelineno-0-531></a><span class=sd> ```</span>
<a id=__codelineno-0-532 name=__codelineno-0-532></a>
<a id=__codelineno-0-533 name=__codelineno-0-533></a><span class=sd> Specifing [`ComponentRegistry`](./#django_components.ComponentRegistry) the component</span>
<a id=__codelineno-0-534 name=__codelineno-0-534></a><span class=sd> should be registered to by setting the `registry` kwarg:</span>
<a id=__codelineno-0-535 name=__codelineno-0-535></a>
<a id=__codelineno-0-536 name=__codelineno-0-536></a><span class=sd> ```python</span>
<a id=__codelineno-0-537 name=__codelineno-0-537></a><span class=sd> from django.template import Library</span>
<a id=__codelineno-0-538 name=__codelineno-0-538></a><span class=sd> from django_components import Component, ComponentRegistry, register</span>
<a id=__codelineno-0-539 name=__codelineno-0-539></a>
<a id=__codelineno-0-540 name=__codelineno-0-540></a><span class=sd> my_lib = Library()</span>
<a id=__codelineno-0-541 name=__codelineno-0-541></a><span class=sd> my_reg = ComponentRegistry(library=my_lib)</span>
<a id=__codelineno-0-542 name=__codelineno-0-542></a>
<a id=__codelineno-0-543 name=__codelineno-0-543></a><span class=sd> @register(&quot;my_component&quot;, registry=my_reg)</span>
<a id=__codelineno-0-544 name=__codelineno-0-544></a><span class=sd> class MyComponent(Component):</span>
<a id=__codelineno-0-545 name=__codelineno-0-545></a><span class=sd> ...</span>
<a id=__codelineno-0-546 name=__codelineno-0-546></a><span class=sd> ```</span>
<a id=__codelineno-0-547 name=__codelineno-0-547></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-548 name=__codelineno-0-548></a> <span class=k>if</span> <span class=n>registry</span> <span class=ow>is</span> <span class=kc>None</span><span class=p>:</span>
<a id=__codelineno-0-549 name=__codelineno-0-549></a> <span class=n>registry</span> <span class=o>=</span> <span class=n>_the_registry</span>
<a id=__codelineno-0-550 name=__codelineno-0-550></a>
<a id=__codelineno-0-551 name=__codelineno-0-551></a> <span class=k>def</span> <span class=nf>decorator</span><span class=p>(</span>
<a id=__codelineno-0-552 name=__codelineno-0-552></a> <span class=n>component</span><span class=p>:</span> <span class=n>Type</span><span class=p>[</span><span class=s2>&quot;Component[ArgsType, KwargsType, SlotsType, DataType, JsDataType, CssDataType]&quot;</span><span class=p>],</span>
<a id=__codelineno-0-553 name=__codelineno-0-553></a> <span class=p>)</span> <span class=o>-&gt;</span> <span class=n>Type</span><span class=p>[</span><span class=s2>&quot;Component[ArgsType, KwargsType, SlotsType, DataType, JsDataType, CssDataType]&quot;</span><span class=p>]:</span>
<a id=__codelineno-0-554 name=__codelineno-0-554></a> <span class=n>registry</span><span class=o>.</span><span class=n>register</span><span class=p>(</span><span class=n>name</span><span class=o>=</span><span class=n>name</span><span class=p>,</span> <span class=n>component</span><span class=o>=</span><span class=n>component</span><span class=p>)</span>
<a id=__codelineno-0-555 name=__codelineno-0-555></a> <span class=k>return</span> <span class=n>component</span>
<a id=__codelineno-0-556 name=__codelineno-0-556></a>
<a id=__codelineno-0-557 name=__codelineno-0-557></a> <span class=k>return</span> <span class=n>decorator</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h2 id=django_components.render_dependencies class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-function"></code> <span class="doc doc-object-name doc-function-name">render_dependencies</span> <a href=#django_components.render_dependencies class=headerlink title="Permanent link">¤</a></h2> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>render_dependencies</span><span class=p>(</span><span class=n>content</span><span class=p>:</span> <span class=n><span title=django_components.dependencies.TContent>TContent</span></span><span class=p>,</span> <span class=nb>type</span><span class=p>:</span> <span class=n><span title=django_components.dependencies.RenderType>RenderType</span></span> <span class=o>=</span> <span class=s1>&#39;document&#39;</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><span title=django_components.dependencies.TContent>TContent</span></span>
</code></pre></div> <div class="doc doc-contents "> <p>Given a string that contains parts that were rendered by components, this function inserts all used JS and CSS.</p> <p>By default, the string is parsed as an HTML and: - CSS is inserted at the end of <code>&lt;head&gt;</code> (if present) - JS is inserted at the end of <code>&lt;body&gt;</code> (if present)</p> <p>If you used <code>{% component_js_dependencies %}</code> or <code>{% component_css_dependencies %}</code>, then the JS and CSS will be inserted only at these locations.</p> <p>Example: <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=k>def</span> <span class=nf>my_view</span><span class=p>(</span><span class=n>request</span><span class=p>):</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a> <span class=n>template</span> <span class=o>=</span> <span class=n>Template</span><span class=p>(</span><span class=s1>&#39;&#39;&#39;</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=s1> {</span><span class=si>% lo</span><span class=s1>ad components %}</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a><span class=s1> &lt;!doctype html&gt;</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a><span class=s1> &lt;html&gt;</span>
<a id=__codelineno-0-6 name=__codelineno-0-6 href=#__codelineno-0-6></a><span class=s1> &lt;head&gt;&lt;/head&gt;</span>
<a id=__codelineno-0-7 name=__codelineno-0-7 href=#__codelineno-0-7></a><span class=s1> &lt;body&gt;</span>
<a id=__codelineno-0-8 name=__codelineno-0-8 href=#__codelineno-0-8></a><span class=s1> &lt;h1&gt;{{ table_name }}&lt;/h1&gt;</span>
<a id=__codelineno-0-9 name=__codelineno-0-9 href=#__codelineno-0-9></a><span class=s1> {</span><span class=si>% c</span><span class=s1>omponent &quot;table&quot; name=table_name / %}</span>
<a id=__codelineno-0-10 name=__codelineno-0-10 href=#__codelineno-0-10></a><span class=s1> &lt;/body&gt;</span>
<a id=__codelineno-0-11 name=__codelineno-0-11 href=#__codelineno-0-11></a><span class=s1> &lt;/html&gt;</span>
<a id=__codelineno-0-12 name=__codelineno-0-12 href=#__codelineno-0-12></a><span class=s1> &#39;&#39;&#39;</span><span class=p>)</span>
<a id=__codelineno-0-13 name=__codelineno-0-13 href=#__codelineno-0-13></a>
<a id=__codelineno-0-14 name=__codelineno-0-14 href=#__codelineno-0-14></a> <span class=n>html</span> <span class=o>=</span> <span class=n>template</span><span class=o>.</span><span class=n>render</span><span class=p>(</span>
<a id=__codelineno-0-15 name=__codelineno-0-15 href=#__codelineno-0-15></a> <span class=n>Context</span><span class=p>({</span>
<a id=__codelineno-0-16 name=__codelineno-0-16 href=#__codelineno-0-16></a> <span class=s2>&quot;table_name&quot;</span><span class=p>:</span> <span class=n>request</span><span class=o>.</span><span class=n>GET</span><span class=p>[</span><span class=s2>&quot;name&quot;</span><span class=p>],</span>
<a id=__codelineno-0-17 name=__codelineno-0-17 href=#__codelineno-0-17></a> <span class=p>})</span>
<a id=__codelineno-0-18 name=__codelineno-0-18 href=#__codelineno-0-18></a> <span class=p>)</span>
<a id=__codelineno-0-19 name=__codelineno-0-19 href=#__codelineno-0-19></a>
<a id=__codelineno-0-20 name=__codelineno-0-20 href=#__codelineno-0-20></a> <span class=c1># This inserts components&#39; JS and CSS</span>
<a id=__codelineno-0-21 name=__codelineno-0-21 href=#__codelineno-0-21></a> <span class=n>processed_html</span> <span class=o>=</span> <span class=n>render_dependencies</span><span class=p>(</span><span class=n>html</span><span class=p>)</span>
<a id=__codelineno-0-22 name=__codelineno-0-22 href=#__codelineno-0-22></a>
<a id=__codelineno-0-23 name=__codelineno-0-23 href=#__codelineno-0-23></a> <span class=k>return</span> <span class=n>HttpResponse</span><span class=p>(</span><span class=n>processed_html</span><span class=p>)</span>
</code></pre></div></p> <details class=quote> <summary>Source code in <code>src/django_components/dependencies.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-289>289</a></span>
<span class=normal><a href=#__codelineno-0-290>290</a></span>
<span class=normal><a href=#__codelineno-0-291>291</a></span>
<span class=normal><a href=#__codelineno-0-292>292</a></span>
<span class=normal><a href=#__codelineno-0-293>293</a></span>
<span class=normal><a href=#__codelineno-0-294>294</a></span>
<span class=normal><a href=#__codelineno-0-295>295</a></span>
<span class=normal><a href=#__codelineno-0-296>296</a></span>
<span class=normal><a href=#__codelineno-0-297>297</a></span>
<span class=normal><a href=#__codelineno-0-298>298</a></span>
<span class=normal><a href=#__codelineno-0-299>299</a></span>
<span class=normal><a href=#__codelineno-0-300>300</a></span>
<span class=normal><a href=#__codelineno-0-301>301</a></span>
<span class=normal><a href=#__codelineno-0-302>302</a></span>
<span class=normal><a href=#__codelineno-0-303>303</a></span>
<span class=normal><a href=#__codelineno-0-304>304</a></span>
<span class=normal><a href=#__codelineno-0-305>305</a></span>
<span class=normal><a href=#__codelineno-0-306>306</a></span>
<span class=normal><a href=#__codelineno-0-307>307</a></span>
<span class=normal><a href=#__codelineno-0-308>308</a></span>
<span class=normal><a href=#__codelineno-0-309>309</a></span>
<span class=normal><a href=#__codelineno-0-310>310</a></span>
<span class=normal><a href=#__codelineno-0-311>311</a></span>
<span class=normal><a href=#__codelineno-0-312>312</a></span>
<span class=normal><a href=#__codelineno-0-313>313</a></span>
<span class=normal><a href=#__codelineno-0-314>314</a></span>
<span class=normal><a href=#__codelineno-0-315>315</a></span>
<span class=normal><a href=#__codelineno-0-316>316</a></span>
<span class=normal><a href=#__codelineno-0-317>317</a></span>
<span class=normal><a href=#__codelineno-0-318>318</a></span>
<span class=normal><a href=#__codelineno-0-319>319</a></span>
<span class=normal><a href=#__codelineno-0-320>320</a></span>
<span class=normal><a href=#__codelineno-0-321>321</a></span>
<span class=normal><a href=#__codelineno-0-322>322</a></span>
<span class=normal><a href=#__codelineno-0-323>323</a></span>
<span class=normal><a href=#__codelineno-0-324>324</a></span>
<span class=normal><a href=#__codelineno-0-325>325</a></span>
<span class=normal><a href=#__codelineno-0-326>326</a></span>
<span class=normal><a href=#__codelineno-0-327>327</a></span>
<span class=normal><a href=#__codelineno-0-328>328</a></span>
<span class=normal><a href=#__codelineno-0-329>329</a></span>
<span class=normal><a href=#__codelineno-0-330>330</a></span>
<span class=normal><a href=#__codelineno-0-331>331</a></span>
<span class=normal><a href=#__codelineno-0-332>332</a></span>
<span class=normal><a href=#__codelineno-0-333>333</a></span>
<span class=normal><a href=#__codelineno-0-334>334</a></span>
<span class=normal><a href=#__codelineno-0-335>335</a></span>
<span class=normal><a href=#__codelineno-0-336>336</a></span>
<span class=normal><a href=#__codelineno-0-337>337</a></span>
<span class=normal><a href=#__codelineno-0-338>338</a></span>
<span class=normal><a href=#__codelineno-0-339>339</a></span>
<span class=normal><a href=#__codelineno-0-340>340</a></span>
<span class=normal><a href=#__codelineno-0-341>341</a></span>
<span class=normal><a href=#__codelineno-0-342>342</a></span>
<span class=normal><a href=#__codelineno-0-343>343</a></span>
<span class=normal><a href=#__codelineno-0-344>344</a></span>
<span class=normal><a href=#__codelineno-0-345>345</a></span>
<span class=normal><a href=#__codelineno-0-346>346</a></span>
<span class=normal><a href=#__codelineno-0-347>347</a></span>
<span class=normal><a href=#__codelineno-0-348>348</a></span>
<span class=normal><a href=#__codelineno-0-349>349</a></span>
<span class=normal><a href=#__codelineno-0-350>350</a></span>
<span class=normal><a href=#__codelineno-0-351>351</a></span>
<span class=normal><a href=#__codelineno-0-352>352</a></span>
<span class=normal><a href=#__codelineno-0-353>353</a></span>
<span class=normal><a href=#__codelineno-0-354>354</a></span>
<span class=normal><a href=#__codelineno-0-355>355</a></span>
<span class=normal><a href=#__codelineno-0-356>356</a></span>
<span class=normal><a href=#__codelineno-0-357>357</a></span>
<span class=normal><a href=#__codelineno-0-358>358</a></span>
<span class=normal><a href=#__codelineno-0-359>359</a></span>
<span class=normal><a href=#__codelineno-0-360>360</a></span>
<span class=normal><a href=#__codelineno-0-361>361</a></span>
<span class=normal><a href=#__codelineno-0-362>362</a></span>
<span class=normal><a href=#__codelineno-0-363>363</a></span>
<span class=normal><a href=#__codelineno-0-364>364</a></span>
<span class=normal><a href=#__codelineno-0-365>365</a></span>
<span class=normal><a href=#__codelineno-0-366>366</a></span>
<span class=normal><a href=#__codelineno-0-367>367</a></span>
<span class=normal><a href=#__codelineno-0-368>368</a></span>
<span class=normal><a href=#__codelineno-0-369>369</a></span>
<span class=normal><a href=#__codelineno-0-370>370</a></span>
<span class=normal><a href=#__codelineno-0-371>371</a></span>
<span class=normal><a href=#__codelineno-0-372>372</a></span>
<span class=normal><a href=#__codelineno-0-373>373</a></span>
<span class=normal><a href=#__codelineno-0-374>374</a></span>
<span class=normal><a href=#__codelineno-0-375>375</a></span>
<span class=normal><a href=#__codelineno-0-376>376</a></span>
<span class=normal><a href=#__codelineno-0-377>377</a></span>
<span class=normal><a href=#__codelineno-0-378>378</a></span>
<span class=normal><a href=#__codelineno-0-379>379</a></span>
<span class=normal><a href=#__codelineno-0-380>380</a></span>
<span class=normal><a href=#__codelineno-0-381>381</a></span>
<span class=normal><a href=#__codelineno-0-382>382</a></span>
<span class=normal><a href=#__codelineno-0-383>383</a></span>
<span class=normal><a href=#__codelineno-0-384>384</a></span>
<span class=normal><a href=#__codelineno-0-385>385</a></span>
<span class=normal><a href=#__codelineno-0-386>386</a></span>
<span class=normal><a href=#__codelineno-0-387>387</a></span>
<span class=normal><a href=#__codelineno-0-388>388</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-289 name=__codelineno-0-289></a><span class=k>def</span> <span class=nf>render_dependencies</span><span class=p>(</span><span class=n>content</span><span class=p>:</span> <span class=n>TContent</span><span class=p>,</span> <span class=nb>type</span><span class=p>:</span> <span class=n>RenderType</span> <span class=o>=</span> <span class=s2>&quot;document&quot;</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n>TContent</span><span class=p>:</span>
<a id=__codelineno-0-290 name=__codelineno-0-290></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-291 name=__codelineno-0-291></a><span class=sd> Given a string that contains parts that were rendered by components,</span>
<a id=__codelineno-0-292 name=__codelineno-0-292></a><span class=sd> this function inserts all used JS and CSS.</span>
<a id=__codelineno-0-293 name=__codelineno-0-293></a>
<a id=__codelineno-0-294 name=__codelineno-0-294></a><span class=sd> By default, the string is parsed as an HTML and:</span>
<a id=__codelineno-0-295 name=__codelineno-0-295></a><span class=sd> - CSS is inserted at the end of `&lt;head&gt;` (if present)</span>
<a id=__codelineno-0-296 name=__codelineno-0-296></a><span class=sd> - JS is inserted at the end of `&lt;body&gt;` (if present)</span>
<a id=__codelineno-0-297 name=__codelineno-0-297></a>
<a id=__codelineno-0-298 name=__codelineno-0-298></a><span class=sd> If you used `{% component_js_dependencies %}` or `{% component_css_dependencies %}`,</span>
<a id=__codelineno-0-299 name=__codelineno-0-299></a><span class=sd> then the JS and CSS will be inserted only at these locations.</span>
<a id=__codelineno-0-300 name=__codelineno-0-300></a>
<a id=__codelineno-0-301 name=__codelineno-0-301></a><span class=sd> Example:</span>
<a id=__codelineno-0-302 name=__codelineno-0-302></a><span class=sd> ```python</span>
<a id=__codelineno-0-303 name=__codelineno-0-303></a><span class=sd> def my_view(request):</span>
<a id=__codelineno-0-304 name=__codelineno-0-304></a><span class=sd> template = Template(&#39;&#39;&#39;</span>
<a id=__codelineno-0-305 name=__codelineno-0-305></a><span class=sd> {% load components %}</span>
<a id=__codelineno-0-306 name=__codelineno-0-306></a><span class=sd> &lt;!doctype html&gt;</span>
<a id=__codelineno-0-307 name=__codelineno-0-307></a><span class=sd> &lt;html&gt;</span>
<a id=__codelineno-0-308 name=__codelineno-0-308></a><span class=sd> &lt;head&gt;&lt;/head&gt;</span>
<a id=__codelineno-0-309 name=__codelineno-0-309></a><span class=sd> &lt;body&gt;</span>
<a id=__codelineno-0-310 name=__codelineno-0-310></a><span class=sd> &lt;h1&gt;{{ table_name }}&lt;/h1&gt;</span>
<a id=__codelineno-0-311 name=__codelineno-0-311></a><span class=sd> {% component &quot;table&quot; name=table_name / %}</span>
<a id=__codelineno-0-312 name=__codelineno-0-312></a><span class=sd> &lt;/body&gt;</span>
<a id=__codelineno-0-313 name=__codelineno-0-313></a><span class=sd> &lt;/html&gt;</span>
<a id=__codelineno-0-314 name=__codelineno-0-314></a><span class=sd> &#39;&#39;&#39;)</span>
<a id=__codelineno-0-315 name=__codelineno-0-315></a>
<a id=__codelineno-0-316 name=__codelineno-0-316></a><span class=sd> html = template.render(</span>
<a id=__codelineno-0-317 name=__codelineno-0-317></a><span class=sd> Context({</span>
<a id=__codelineno-0-318 name=__codelineno-0-318></a><span class=sd> &quot;table_name&quot;: request.GET[&quot;name&quot;],</span>
<a id=__codelineno-0-319 name=__codelineno-0-319></a><span class=sd> })</span>
<a id=__codelineno-0-320 name=__codelineno-0-320></a><span class=sd> )</span>
<a id=__codelineno-0-321 name=__codelineno-0-321></a>
<a id=__codelineno-0-322 name=__codelineno-0-322></a><span class=sd> # This inserts components&#39; JS and CSS</span>
<a id=__codelineno-0-323 name=__codelineno-0-323></a><span class=sd> processed_html = render_dependencies(html)</span>
<a id=__codelineno-0-324 name=__codelineno-0-324></a>
<a id=__codelineno-0-325 name=__codelineno-0-325></a><span class=sd> return HttpResponse(processed_html)</span>
<a id=__codelineno-0-326 name=__codelineno-0-326></a><span class=sd> ```</span>
<a id=__codelineno-0-327 name=__codelineno-0-327></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-328 name=__codelineno-0-328></a> <span class=n>is_safestring</span> <span class=o>=</span> <span class=nb>isinstance</span><span class=p>(</span><span class=n>content</span><span class=p>,</span> <span class=n>SafeString</span><span class=p>)</span>
<a id=__codelineno-0-329 name=__codelineno-0-329></a>
<a id=__codelineno-0-330 name=__codelineno-0-330></a> <span class=k>if</span> <span class=nb>isinstance</span><span class=p>(</span><span class=n>content</span><span class=p>,</span> <span class=nb>str</span><span class=p>):</span>
<a id=__codelineno-0-331 name=__codelineno-0-331></a> <span class=n>content_</span> <span class=o>=</span> <span class=n>content</span><span class=o>.</span><span class=n>encode</span><span class=p>()</span>
<a id=__codelineno-0-332 name=__codelineno-0-332></a> <span class=k>else</span><span class=p>:</span>
<a id=__codelineno-0-333 name=__codelineno-0-333></a> <span class=n>content_</span> <span class=o>=</span> <span class=n>cast</span><span class=p>(</span><span class=nb>bytes</span><span class=p>,</span> <span class=n>content</span><span class=p>)</span>
<a id=__codelineno-0-334 name=__codelineno-0-334></a>
<a id=__codelineno-0-335 name=__codelineno-0-335></a> <span class=n>content_</span><span class=p>,</span> <span class=n>js_dependencies</span><span class=p>,</span> <span class=n>css_dependencies</span> <span class=o>=</span> <span class=n>_process_dep_declarations</span><span class=p>(</span><span class=n>content_</span><span class=p>,</span> <span class=nb>type</span><span class=p>)</span>
<a id=__codelineno-0-336 name=__codelineno-0-336></a>
<a id=__codelineno-0-337 name=__codelineno-0-337></a> <span class=c1># Replace the placeholders with the actual content</span>
<a id=__codelineno-0-338 name=__codelineno-0-338></a> <span class=n>did_find_js_placeholder</span> <span class=o>=</span> <span class=kc>False</span>
<a id=__codelineno-0-339 name=__codelineno-0-339></a> <span class=n>did_find_css_placeholder</span> <span class=o>=</span> <span class=kc>False</span>
<a id=__codelineno-0-340 name=__codelineno-0-340></a>
<a id=__codelineno-0-341 name=__codelineno-0-341></a> <span class=k>def</span> <span class=nf>on_replace_match</span><span class=p>(</span><span class=n>match</span><span class=p>:</span> <span class=s2>&quot;re.Match[bytes]&quot;</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=nb>bytes</span><span class=p>:</span>
<a id=__codelineno-0-342 name=__codelineno-0-342></a> <span class=k>nonlocal</span> <span class=n>did_find_css_placeholder</span>
<a id=__codelineno-0-343 name=__codelineno-0-343></a> <span class=k>nonlocal</span> <span class=n>did_find_js_placeholder</span>
<a id=__codelineno-0-344 name=__codelineno-0-344></a>
<a id=__codelineno-0-345 name=__codelineno-0-345></a> <span class=k>if</span> <span class=n>match</span><span class=p>[</span><span class=mi>0</span><span class=p>]</span> <span class=o>==</span> <span class=n>CSS_PLACEHOLDER_BYTES</span><span class=p>:</span>
<a id=__codelineno-0-346 name=__codelineno-0-346></a> <span class=n>replacement</span> <span class=o>=</span> <span class=n>css_dependencies</span>
<a id=__codelineno-0-347 name=__codelineno-0-347></a> <span class=n>did_find_css_placeholder</span> <span class=o>=</span> <span class=kc>True</span>
<a id=__codelineno-0-348 name=__codelineno-0-348></a> <span class=k>elif</span> <span class=n>match</span><span class=p>[</span><span class=mi>0</span><span class=p>]</span> <span class=o>==</span> <span class=n>JS_PLACEHOLDER_BYTES</span><span class=p>:</span>
<a id=__codelineno-0-349 name=__codelineno-0-349></a> <span class=n>replacement</span> <span class=o>=</span> <span class=n>js_dependencies</span>
<a id=__codelineno-0-350 name=__codelineno-0-350></a> <span class=n>did_find_js_placeholder</span> <span class=o>=</span> <span class=kc>True</span>
<a id=__codelineno-0-351 name=__codelineno-0-351></a> <span class=k>else</span><span class=p>:</span>
<a id=__codelineno-0-352 name=__codelineno-0-352></a> <span class=k>raise</span> <span class=ne>RuntimeError</span><span class=p>(</span>
<a id=__codelineno-0-353 name=__codelineno-0-353></a> <span class=s2>&quot;Unexpected error: Regex for component dependencies processing&quot;</span>
<a id=__codelineno-0-354 name=__codelineno-0-354></a> <span class=sa>f</span><span class=s2>&quot; matched unknown string &#39;</span><span class=si>{</span><span class=n>match</span><span class=p>[</span><span class=mi>0</span><span class=p>]</span><span class=o>.</span><span class=n>decode</span><span class=p>()</span><span class=si>}</span><span class=s2>&#39;&quot;</span>
<a id=__codelineno-0-355 name=__codelineno-0-355></a> <span class=p>)</span>
<a id=__codelineno-0-356 name=__codelineno-0-356></a> <span class=k>return</span> <span class=n>replacement</span>
<a id=__codelineno-0-357 name=__codelineno-0-357></a>
<a id=__codelineno-0-358 name=__codelineno-0-358></a> <span class=n>content_</span> <span class=o>=</span> <span class=n>PLACEHOLDER_REGEX</span><span class=o>.</span><span class=n>sub</span><span class=p>(</span><span class=n>on_replace_match</span><span class=p>,</span> <span class=n>content_</span><span class=p>)</span>
<a id=__codelineno-0-359 name=__codelineno-0-359></a>
<a id=__codelineno-0-360 name=__codelineno-0-360></a> <span class=c1># By default, if user didn&#39;t specify any `{% component_dependencies %}`,</span>
<a id=__codelineno-0-361 name=__codelineno-0-361></a> <span class=c1># then try to insert the JS scripts at the end of &lt;body&gt; and CSS sheets at the end</span>
<a id=__codelineno-0-362 name=__codelineno-0-362></a> <span class=c1># of &lt;head&gt;</span>
<a id=__codelineno-0-363 name=__codelineno-0-363></a> <span class=k>if</span> <span class=nb>type</span> <span class=o>==</span> <span class=s2>&quot;document&quot;</span> <span class=ow>and</span> <span class=p>(</span><span class=ow>not</span> <span class=n>did_find_js_placeholder</span> <span class=ow>or</span> <span class=ow>not</span> <span class=n>did_find_css_placeholder</span><span class=p>):</span>
<a id=__codelineno-0-364 name=__codelineno-0-364></a> <span class=n>tree</span> <span class=o>=</span> <span class=n>parse_document_or_nodes</span><span class=p>(</span><span class=n>content_</span><span class=o>.</span><span class=n>decode</span><span class=p>())</span>
<a id=__codelineno-0-365 name=__codelineno-0-365></a>
<a id=__codelineno-0-366 name=__codelineno-0-366></a> <span class=k>if</span> <span class=nb>isinstance</span><span class=p>(</span><span class=n>tree</span><span class=p>,</span> <span class=n>LexborHTMLParser</span><span class=p>):</span>
<a id=__codelineno-0-367 name=__codelineno-0-367></a> <span class=n>did_modify_html</span> <span class=o>=</span> <span class=kc>False</span>
<a id=__codelineno-0-368 name=__codelineno-0-368></a>
<a id=__codelineno-0-369 name=__codelineno-0-369></a> <span class=k>if</span> <span class=ow>not</span> <span class=n>did_find_css_placeholder</span> <span class=ow>and</span> <span class=n>tree</span><span class=o>.</span><span class=n>head</span><span class=p>:</span>
<a id=__codelineno-0-370 name=__codelineno-0-370></a> <span class=n>css_elems</span> <span class=o>=</span> <span class=n>parse_multiroot_html</span><span class=p>(</span><span class=n>css_dependencies</span><span class=o>.</span><span class=n>decode</span><span class=p>())</span>
<a id=__codelineno-0-371 name=__codelineno-0-371></a> <span class=k>for</span> <span class=n>css_elem</span> <span class=ow>in</span> <span class=n>css_elems</span><span class=p>:</span>
<a id=__codelineno-0-372 name=__codelineno-0-372></a> <span class=n>tree</span><span class=o>.</span><span class=n>head</span><span class=o>.</span><span class=n>insert_child</span><span class=p>(</span><span class=n>css_elem</span><span class=p>)</span> <span class=c1># type: ignore # TODO: Update to selectolax 0.3.25</span>
<a id=__codelineno-0-373 name=__codelineno-0-373></a> <span class=n>did_modify_html</span> <span class=o>=</span> <span class=kc>True</span>
<a id=__codelineno-0-374 name=__codelineno-0-374></a>
<a id=__codelineno-0-375 name=__codelineno-0-375></a> <span class=k>if</span> <span class=ow>not</span> <span class=n>did_find_js_placeholder</span> <span class=ow>and</span> <span class=n>tree</span><span class=o>.</span><span class=n>body</span><span class=p>:</span>
<a id=__codelineno-0-376 name=__codelineno-0-376></a> <span class=n>js_elems</span> <span class=o>=</span> <span class=n>parse_multiroot_html</span><span class=p>(</span><span class=n>js_dependencies</span><span class=o>.</span><span class=n>decode</span><span class=p>())</span>
<a id=__codelineno-0-377 name=__codelineno-0-377></a> <span class=k>for</span> <span class=n>js_elem</span> <span class=ow>in</span> <span class=n>js_elems</span><span class=p>:</span>
<a id=__codelineno-0-378 name=__codelineno-0-378></a> <span class=n>tree</span><span class=o>.</span><span class=n>body</span><span class=o>.</span><span class=n>insert_child</span><span class=p>(</span><span class=n>js_elem</span><span class=p>)</span> <span class=c1># type: ignore # TODO: Update to selectolax 0.3.25</span>
<a id=__codelineno-0-379 name=__codelineno-0-379></a> <span class=n>did_modify_html</span> <span class=o>=</span> <span class=kc>True</span>
<a id=__codelineno-0-380 name=__codelineno-0-380></a>
<a id=__codelineno-0-381 name=__codelineno-0-381></a> <span class=n>transformed</span> <span class=o>=</span> <span class=n>cast</span><span class=p>(</span><span class=nb>str</span><span class=p>,</span> <span class=n>tree</span><span class=o>.</span><span class=n>html</span><span class=p>)</span>
<a id=__codelineno-0-382 name=__codelineno-0-382></a> <span class=k>if</span> <span class=n>did_modify_html</span><span class=p>:</span>
<a id=__codelineno-0-383 name=__codelineno-0-383></a> <span class=n>content_</span> <span class=o>=</span> <span class=n>transformed</span><span class=o>.</span><span class=n>encode</span><span class=p>()</span>
<a id=__codelineno-0-384 name=__codelineno-0-384></a>
<a id=__codelineno-0-385 name=__codelineno-0-385></a> <span class=c1># Return the same type as we were given</span>
<a id=__codelineno-0-386 name=__codelineno-0-386></a> <span class=n>output</span> <span class=o>=</span> <span class=n>content_</span><span class=o>.</span><span class=n>decode</span><span class=p>()</span> <span class=k>if</span> <span class=nb>isinstance</span><span class=p>(</span><span class=n>content</span><span class=p>,</span> <span class=nb>str</span><span class=p>)</span> <span class=k>else</span> <span class=n>content_</span>
<a id=__codelineno-0-387 name=__codelineno-0-387></a> <span class=n>output</span> <span class=o>=</span> <span class=n>mark_safe</span><span class=p>(</span><span class=n>output</span><span class=p>)</span> <span class=k>if</span> <span class=n>is_safestring</span> <span class=k>else</span> <span class=n>output</span>
<a id=__codelineno-0-388 name=__codelineno-0-388></a> <span class=k>return</span> <span class=n>cast</span><span class=p>(</span><span class=n>TContent</span><span class=p>,</span> <span class=n>output</span><span class=p>)</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-module"> <h2 id=django_components.app_settings class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-module"></code> <span class="doc doc-object-name doc-module-name">app_settings</span> <a href=#django_components.app_settings class=headerlink title="Permanent link">¤</a></h2> <div class="doc doc-contents "> <p><span class=doc-section-title>Classes:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.app_settings.ComponentsSettings href=#django_components.app_settings.ComponentsSettings>ComponentsSettings</a></code></b> <div class=doc-md-description> <p>Settings available for django_components.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.app_settings.ContextBehavior href=#django_components.app_settings.ContextBehavior>ContextBehavior</a></code></b> <div class=doc-md-description> <p>Configure how (and whether) the context is passed to the component fills</p> </div> </li> </ul> <div class="doc doc-children"> <div class="doc doc-object doc-class"> <h3 id=django_components.app_settings.ComponentsSettings class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-class"></code> <span class="doc doc-object-name doc-class-name">ComponentsSettings</span> <a href=#django_components.app_settings.ComponentsSettings class=headerlink title="Permanent link">¤</a></h3> <div class="doc doc-contents "> <p class="doc doc-class-bases"> Bases: <code><a class="autorefs autorefs-external" title=typing.NamedTuple href=https://docs.python.org/3.12/library/typing.html#typing.NamedTuple>NamedTuple</a></code></p> <p>Settings available for django_components.</p> <p><strong>Example:</strong></p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>COMPONENTS</span> <span class=o>=</span> <span class=n>ComponentsSettings</span><span class=p>(</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a> <span class=n>autodiscover</span><span class=o>=</span><span class=kc>False</span><span class=p>,</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a> <span class=n>dirs</span> <span class=o>=</span> <span class=p>[</span><span class=n>BASE_DIR</span> <span class=o>/</span> <span class=s2>&quot;components&quot;</span><span class=p>],</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a><span class=p>)</span>
</code></pre></div> <p><span class=doc-section-title>Attributes:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.app_settings.ComponentsSettings.app_dirs href=#django_components.app_settings.ComponentsSettings.app_dirs>app_dirs</a></code></b> (<code><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a>[<a class="autorefs autorefs-external" title=typing.Sequence href=https://docs.python.org/3.12/library/typing.html#typing.Sequence>Sequence</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>]]</code>) <div class=doc-md-description> <p>Specify the app-level directories that contain your components.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.app_settings.ComponentsSettings.autodiscover href=#django_components.app_settings.ComponentsSettings.autodiscover>autodiscover</a></code></b> (<code><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/functions.html#bool>bool</a>]</code>) <div class=doc-md-description> <p>Toggle whether to run <a href=../../concepts/fundamentals/autodiscovery>autodiscovery</a> at the Django server startup.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.app_settings.ComponentsSettings.context_behavior href=#django_components.app_settings.ComponentsSettings.context_behavior>context_behavior</a></code></b> (<code><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a>[<span title=django_components.app_settings.ContextBehaviorType>ContextBehaviorType</span>]</code>) <div class=doc-md-description> <p>Configure whether, inside a component template, you can use variables from the outside</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.app_settings.ComponentsSettings.dirs href=#django_components.app_settings.ComponentsSettings.dirs>dirs</a></code></b> (<code><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a>[<a class="autorefs autorefs-external" title=typing.Sequence href=https://docs.python.org/3.12/library/typing.html#typing.Sequence>Sequence</a>[<a class="autorefs autorefs-external" title=typing.Union href=https://docs.python.org/3.12/library/typing.html#typing.Union>Union</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>, <a class="autorefs autorefs-external" title=os.PathLike href=https://docs.python.org/3.12/library/os.html#os.PathLike>PathLike</a>, <a class="autorefs autorefs-external" title=typing.Tuple href=https://docs.python.org/3.12/library/typing.html#typing.Tuple>Tuple</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>, <a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>], <a class="autorefs autorefs-external" title=typing.Tuple href=https://docs.python.org/3.12/library/typing.html#typing.Tuple>Tuple</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>, <a class="autorefs autorefs-external" title=os.PathLike href=https://docs.python.org/3.12/library/os.html#os.PathLike>PathLike</a>]]]]</code>) <div class=doc-md-description> <p>Specify the directories that contain your components.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.app_settings.ComponentsSettings.dynamic_component_name href=#django_components.app_settings.ComponentsSettings.dynamic_component_name>dynamic_component_name</a></code></b> (<code><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>]</code>) <div class=doc-md-description> <p>By default, the <a href=../components#django_components.components.dynamic.DynamicComponent>dynamic component</a></p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.app_settings.ComponentsSettings.forbidden_static_files href=#django_components.app_settings.ComponentsSettings.forbidden_static_files>forbidden_static_files</a></code></b> (<code><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a>[<a class="autorefs autorefs-external" title=typing.List href=https://docs.python.org/3.12/library/typing.html#typing.List>List</a>[<a class="autorefs autorefs-external" title=typing.Union href=https://docs.python.org/3.12/library/typing.html#typing.Union>Union</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>, <a class="autorefs autorefs-external" title=re.Pattern href=https://docs.python.org/3.12/library/re.html#re.Pattern>Pattern</a>]]]</code>) <div class=doc-md-description> <p>Deprecated. Use</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.app_settings.ComponentsSettings.libraries href=#django_components.app_settings.ComponentsSettings.libraries>libraries</a></code></b> (<code><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a>[<a class="autorefs autorefs-external" title=typing.List href=https://docs.python.org/3.12/library/typing.html#typing.List>List</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>]]</code>) <div class=doc-md-description> <p>Configure extra python modules that should be loaded.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.app_settings.ComponentsSettings.multiline_tags href=#django_components.app_settings.ComponentsSettings.multiline_tags>multiline_tags</a></code></b> (<code><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/functions.html#bool>bool</a>]</code>) <div class=doc-md-description> <p>Enable / disable</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.app_settings.ComponentsSettings.reload_on_file_change href=#django_components.app_settings.ComponentsSettings.reload_on_file_change>reload_on_file_change</a></code></b> (<code><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/functions.html#bool>bool</a>]</code>) <div class=doc-md-description> <p>This is relevant if you are using the project structure where</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.app_settings.ComponentsSettings.reload_on_template_change href=#django_components.app_settings.ComponentsSettings.reload_on_template_change>reload_on_template_change</a></code></b> (<code><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/functions.html#bool>bool</a>]</code>) <div class=doc-md-description> <p>Deprecated. Use</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.app_settings.ComponentsSettings.static_files_allowed href=#django_components.app_settings.ComponentsSettings.static_files_allowed>static_files_allowed</a></code></b> (<code><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a>[<a class="autorefs autorefs-external" title=typing.List href=https://docs.python.org/3.12/library/typing.html#typing.List>List</a>[<a class="autorefs autorefs-external" title=typing.Union href=https://docs.python.org/3.12/library/typing.html#typing.Union>Union</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>, <a class="autorefs autorefs-external" title=re.Pattern href=https://docs.python.org/3.12/library/re.html#re.Pattern>Pattern</a>]]]</code>) <div class=doc-md-description> <p>A list of file extensions (including the leading dot) that define which files within</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.app_settings.ComponentsSettings.static_files_forbidden href=#django_components.app_settings.ComponentsSettings.static_files_forbidden>static_files_forbidden</a></code></b> (<code><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a>[<a class="autorefs autorefs-external" title=typing.List href=https://docs.python.org/3.12/library/typing.html#typing.List>List</a>[<a class="autorefs autorefs-external" title=typing.Union href=https://docs.python.org/3.12/library/typing.html#typing.Union>Union</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>, <a class="autorefs autorefs-external" title=re.Pattern href=https://docs.python.org/3.12/library/re.html#re.Pattern>Pattern</a>]]]</code>) <div class=doc-md-description> <p>A list of file extensions (including the leading dot) that define which files within</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.app_settings.ComponentsSettings.tag_formatter href=#django_components.app_settings.ComponentsSettings.tag_formatter>tag_formatter</a></code></b> (<code><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a>[<a class="autorefs autorefs-external" title=typing.Union href=https://docs.python.org/3.12/library/typing.html#typing.Union>Union</a>[<a class="autorefs autorefs-internal" title=django_components.tag_formatter.TagFormatterABC href=#django_components.tag_formatter.TagFormatterABC>TagFormatterABC</a>, <a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>]]</code>) <div class=doc-md-description> <p>Configure what syntax is used inside Django templates to render components.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.app_settings.ComponentsSettings.template_cache_size href=#django_components.app_settings.ComponentsSettings.template_cache_size>template_cache_size</a></code></b> (<code><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/functions.html#int>int</a>]</code>) <div class=doc-md-description> <p>Configure the maximum amount of Django templates to be cached.</p> </div> </li> </ul> <div class="doc doc-children"> <div class="doc doc-object doc-attribute"> <h4 id=django_components.app_settings.ComponentsSettings.app_dirs class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">app_dirs</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.app_settings.ComponentsSettings.app_dirs class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>app_dirs</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Sequence href=https://docs.python.org/3.12/library/typing.html#typing.Sequence>Sequence</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]]</span> <span class=o>=</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>Specify the app-level directories that contain your components.</p> <p>Defaults to <code>["components"]</code>. That is, for each Django app, we search <code>&lt;app&gt;/components/</code> for components.</p> <p>The paths must be relative to app, e.g.:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>COMPONENTS</span> <span class=o>=</span> <span class=n>ComponentsSettings</span><span class=p>(</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a> <span class=n>app_dirs</span><span class=o>=</span><span class=p>[</span><span class=s2>&quot;my_comps&quot;</span><span class=p>],</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=p>)</span>
</code></pre></div> <p>To search for <code>&lt;app&gt;/my_comps/</code>.</p> <p>These locations are searched during <a href=../../concepts/fundamentals/autodiscovery>autodiscovery</a>, or when you <a href=../../concepts/fundamentals/defining_js_css_html_files>define HTML, JS, or CSS as separate files</a>.</p> <p>Set to empty list to disable app-level components:</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>COMPONENTS</span> <span class=o>=</span> <span class=n>ComponentsSettings</span><span class=p>(</span>
<a id=__codelineno-1-2 name=__codelineno-1-2 href=#__codelineno-1-2></a> <span class=n>app_dirs</span><span class=o>=</span><span class=p>[],</span>
<a id=__codelineno-1-3 name=__codelineno-1-3 href=#__codelineno-1-3></a><span class=p>)</span>
</code></pre></div> </div> </div> <div class="doc doc-object doc-attribute"> <h4 id=django_components.app_settings.ComponentsSettings.autodiscover class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">autodiscover</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.app_settings.ComponentsSettings.autodiscover class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>autodiscover</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/functions.html#bool>bool</a></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>Toggle whether to run <a href=../../concepts/fundamentals/autodiscovery>autodiscovery</a> at the Django server startup.</p> <p>Defaults to <code>True</code></p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>COMPONENTS</span> <span class=o>=</span> <span class=n>ComponentsSettings</span><span class=p>(</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a> <span class=n>autodiscover</span><span class=o>=</span><span class=kc>False</span><span class=p>,</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=p>)</span>
</code></pre></div> </div> </div> <div class="doc doc-object doc-attribute"> <h4 id=django_components.app_settings.ComponentsSettings.context_behavior class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">context_behavior</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.app_settings.ComponentsSettings.context_behavior class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>context_behavior</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><span title=django_components.app_settings.ContextBehaviorType>ContextBehaviorType</span></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>Configure whether, inside a component template, you can use variables from the outside (<a href=../api#django_components.ContextBehavior.DJANGO><code>"django"</code></a>) or not (<a href=../api#django_components.ContextBehavior.ISOLATED><code>"isolated"</code></a>). This also affects what variables are available inside the <a href=../template_tags#fill><code>{% fill %}</code></a> tags.</p> <p>Also see <a href=../../concepts/fundamentals/component_context_scope#context-behavior>Component context and scope</a>.</p> <p>Defaults to <code>"django"</code>.</p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>COMPONENTS</span> <span class=o>=</span> <span class=n>ComponentsSettings</span><span class=p>(</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a> <span class=n>context_behavior</span><span class=o>=</span><span class=s2>&quot;isolated&quot;</span><span class=p>,</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=p>)</span>
</code></pre></div> <blockquote> <p>NOTE: <code>context_behavior</code> and <code>slot_context_behavior</code> options were merged in v0.70.</p> <p>If you are migrating from BEFORE v0.67, set <code>context_behavior</code> to <code>"django"</code>. From v0.67 to v0.78 (incl) the default value was <code>"isolated"</code>.</p> <p>For v0.79 and later, the default is again <code>"django"</code>. See the rationale for change <a href=https://github.com/EmilStenstrom/django-components/issues/498>here</a>.</p> </blockquote> </div> </div> <div class="doc doc-object doc-attribute"> <h4 id=django_components.app_settings.ComponentsSettings.dirs class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">dirs</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.app_settings.ComponentsSettings.dirs class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>dirs</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Sequence href=https://docs.python.org/3.12/library/typing.html#typing.Sequence>Sequence</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Union href=https://docs.python.org/3.12/library/typing.html#typing.Union>Union</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span> <span class=n><a class="autorefs autorefs-external" title=os.PathLike href=https://docs.python.org/3.12/library/os.html#os.PathLike>PathLike</a></span><span class=p>,</span> <span class=n><a class="autorefs autorefs-external" title=typing.Tuple href=https://docs.python.org/3.12/library/typing.html#typing.Tuple>Tuple</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>],</span> <span class=n><a class="autorefs autorefs-external" title=typing.Tuple href=https://docs.python.org/3.12/library/typing.html#typing.Tuple>Tuple</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span> <span class=n><a class="autorefs autorefs-external" title=os.PathLike href=https://docs.python.org/3.12/library/os.html#os.PathLike>PathLike</a></span><span class=p>]]]]</span> <span class=o>=</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>Specify the directories that contain your components.</p> <p>Defaults to <code>[Path(settings.BASE_DIR) / "components"]</code>. That is, the root <code>components/</code> app.</p> <p>Directories must be full paths, same as with <a href=https://docs.djangoproject.com/en/5.1/ref/settings/#std-setting-STATICFILES_DIRS>STATICFILES_DIRS</a>.</p> <p>These locations are searched during <a href=../../concepts/fundamentals/autodiscovery>autodiscovery</a>, or when you <a href=../../concepts/fundamentals/defining_js_css_html_files>define HTML, JS, or CSS as separate files</a>.</p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>COMPONENTS</span> <span class=o>=</span> <span class=n>ComponentsSettings</span><span class=p>(</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a> <span class=n>dirs</span><span class=o>=</span><span class=p>[</span><span class=n>BASE_DIR</span> <span class=o>/</span> <span class=s2>&quot;components&quot;</span><span class=p>],</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=p>)</span>
</code></pre></div> <p>Set to empty list to disable global components directories:</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>COMPONENTS</span> <span class=o>=</span> <span class=n>ComponentsSettings</span><span class=p>(</span>
<a id=__codelineno-1-2 name=__codelineno-1-2 href=#__codelineno-1-2></a> <span class=n>dirs</span><span class=o>=</span><span class=p>[],</span>
<a id=__codelineno-1-3 name=__codelineno-1-3 href=#__codelineno-1-3></a><span class=p>)</span>
</code></pre></div> </div> </div> <div class="doc doc-object doc-attribute"> <h4 id=django_components.app_settings.ComponentsSettings.dynamic_component_name class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">dynamic_component_name</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.app_settings.ComponentsSettings.dynamic_component_name class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>dynamic_component_name</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>By default, the <a href=../components#django_components.components.dynamic.DynamicComponent>dynamic component</a> is registered under the name <code>"dynamic"</code>.</p> <p>In case of a conflict, you can use this setting to change the component name used for the dynamic components.</p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=c1># settings.py</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a><span class=n>COMPONENTS</span> <span class=o>=</span> <span class=n>ComponentsSettings</span><span class=p>(</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a> <span class=n>dynamic_component_name</span><span class=o>=</span><span class=s2>&quot;my_dynamic&quot;</span><span class=p>,</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a><span class=p>)</span>
</code></pre></div> <p>After which you will be able to use the dynamic component with the new name:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-1-1 name=__codelineno-1-1 href=#__codelineno-1-1></a><span class=cp>{%</span> <span class=k>component</span> <span class=s2>&quot;my_dynamic&quot;</span> <span class=k>is</span><span class=o>=</span><span class=nv>table_comp</span> <span class=nv>data</span><span class=o>=</span><span class=nv>table_data</span> <span class=nv>headers</span><span class=o>=</span><span class=nv>table_headers</span> <span class=cp>%}</span>
<a id=__codelineno-1-2 name=__codelineno-1-2 href=#__codelineno-1-2></a><span class=x> </span><span class=cp>{%</span> <span class=k>fill</span> <span class=s2>&quot;pagination&quot;</span> <span class=cp>%}</span>
<a id=__codelineno-1-3 name=__codelineno-1-3 href=#__codelineno-1-3></a><span class=x> </span><span class=cp>{%</span> <span class=k>component</span> <span class=s2>&quot;pagination&quot;</span> <span class=o>/</span> <span class=cp>%}</span>
<a id=__codelineno-1-4 name=__codelineno-1-4 href=#__codelineno-1-4></a><span class=x> </span><span class=cp>{%</span> <span class=k>endfill</span> <span class=cp>%}</span>
<a id=__codelineno-1-5 name=__codelineno-1-5 href=#__codelineno-1-5></a><span class=cp>{%</span> <span class=k>endcomponent</span> <span class=cp>%}</span>
</code></pre></div> </div> </div> <div class="doc doc-object doc-attribute"> <h4 id=django_components.app_settings.ComponentsSettings.forbidden_static_files class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">forbidden_static_files</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.app_settings.ComponentsSettings.forbidden_static_files class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>forbidden_static_files</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.List href=https://docs.python.org/3.12/library/typing.html#typing.List>List</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Union href=https://docs.python.org/3.12/library/typing.html#typing.Union>Union</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span> <span class=n><a class="autorefs autorefs-external" title=re.Pattern href=https://docs.python.org/3.12/library/re.html#re.Pattern>Pattern</a></span><span class=p>]]]</span> <span class=o>=</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>Deprecated. Use <a href=../settings/#django_components.app_settings.ComponentsSettings.static_files_forbidden><code>COMPONENTS.static_files_forbidden</code></a> instead.</p> </div> </div> <div class="doc doc-object doc-attribute"> <h4 id=django_components.app_settings.ComponentsSettings.libraries class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">libraries</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.app_settings.ComponentsSettings.libraries class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>libraries</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.List href=https://docs.python.org/3.12/library/typing.html#typing.List>List</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]]</span> <span class=o>=</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>Configure extra python modules that should be loaded.</p> <p>This may be useful if you are not using the <a href=../../concepts/fundamentals/autodiscovery>autodiscovery feature</a>, or you need to load components from non-standard locations. Thus you can have a structure of components that is independent from your apps.</p> <p>Expects a list of python module paths. Defaults to empty list.</p> <p><strong>Example:</strong></p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>COMPONENTS</span> <span class=o>=</span> <span class=n>ComponentsSettings</span><span class=p>(</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a> <span class=n>libraries</span><span class=o>=</span><span class=p>[</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a> <span class=s2>&quot;mysite.components.forms&quot;</span><span class=p>,</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a> <span class=s2>&quot;mysite.components.buttons&quot;</span><span class=p>,</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a> <span class=s2>&quot;mysite.components.cards&quot;</span><span class=p>,</span>
<a id=__codelineno-0-6 name=__codelineno-0-6 href=#__codelineno-0-6></a> <span class=p>],</span>
<a id=__codelineno-0-7 name=__codelineno-0-7 href=#__codelineno-0-7></a><span class=p>)</span>
</code></pre></div> <p>This would be the equivalent of importing these modules from within Django's <a href=https://docs.djangoproject.com/en/5.1/ref/applications/#django.apps.AppConfig.ready><code>AppConfig.ready()</code></a>:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-1-1 name=__codelineno-1-1 href=#__codelineno-1-1></a><span class=k>class</span> <span class=nc>MyAppConfig</span><span class=p>(</span><span class=n>AppConfig</span><span class=p>):</span>
<a id=__codelineno-1-2 name=__codelineno-1-2 href=#__codelineno-1-2></a> <span class=k>def</span> <span class=nf>ready</span><span class=p>(</span><span class=bp>self</span><span class=p>):</span>
<a id=__codelineno-1-3 name=__codelineno-1-3 href=#__codelineno-1-3></a> <span class=kn>import</span> <span class=s2>&quot;mysite.components.forms&quot;</span>
<a id=__codelineno-1-4 name=__codelineno-1-4 href=#__codelineno-1-4></a> <span class=kn>import</span> <span class=s2>&quot;mysite.components.buttons&quot;</span>
<a id=__codelineno-1-5 name=__codelineno-1-5 href=#__codelineno-1-5></a> <span class=kn>import</span> <span class=s2>&quot;mysite.components.cards&quot;</span>
</code></pre></div> <h5 id=django_components.app_settings.ComponentsSettings.libraries--manually-loading-libraries>Manually loading libraries<a class=headerlink href=#django_components.app_settings.ComponentsSettings.libraries--manually-loading-libraries title="Permanent link">¤</a></h5> <p>In the rare case that you need to manually trigger the import of libraries, you can use the <a href=../api/#django_components.import_libraries><code>import_libraries()</code></a> function:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-2-1 name=__codelineno-2-1 href=#__codelineno-2-1></a><span class=kn>from</span> <span class=nn>django_components</span> <span class=kn>import</span> <span class=n>import_libraries</span>
<a id=__codelineno-2-2 name=__codelineno-2-2 href=#__codelineno-2-2></a>
<a id=__codelineno-2-3 name=__codelineno-2-3 href=#__codelineno-2-3></a><span class=n>import_libraries</span><span class=p>()</span>
</code></pre></div> </div> </div> <div class="doc doc-object doc-attribute"> <h4 id=django_components.app_settings.ComponentsSettings.multiline_tags class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">multiline_tags</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.app_settings.ComponentsSettings.multiline_tags class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>multiline_tags</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/functions.html#bool>bool</a></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>Enable / disable <a href=../../concepts/fundamentals/template_tag_syntax#multiline-tags>multiline support for template tags</a>. If <code>True</code>, template tags like <code>{% component %}</code> or <code>{{ my_var }}</code> can span multiple lines.</p> <p>Defaults to <code>True</code>.</p> <p>Disable this setting if you are making custom modifications to Django's regular expression for parsing templates at <code>django.template.base.tag_re</code>.</p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>COMPONENTS</span> <span class=o>=</span> <span class=n>ComponentsSettings</span><span class=p>(</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a> <span class=n>multiline_tags</span><span class=o>=</span><span class=kc>False</span><span class=p>,</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=p>)</span>
</code></pre></div> </div> </div> <div class="doc doc-object doc-attribute"> <h4 id=django_components.app_settings.ComponentsSettings.reload_on_file_change class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">reload_on_file_change</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.app_settings.ComponentsSettings.reload_on_file_change class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>reload_on_file_change</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/functions.html#bool>bool</a></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>This is relevant if you are using the project structure where HTML, JS, CSS and Python are in separate files and nested in a directory.</p> <p>In this case you may notice that when you are running a development server, the server sometimes does not reload when you change component files.</p> <p>Django's native <a href=https://stackoverflow.com/a/66023029/9788634>live reload</a> logic handles only Python files and HTML template files. It does NOT reload when other file types change or when template files are nested more than one level deep.</p> <p>The setting <code>reload_on_file_change</code> fixes this, reloading the dev server even when your component's HTML, JS, or CSS changes.</p> <p>If <code>True</code>, django_components configures Django to reload when files inside <a href=../settings/#django_components.app_settings.ComponentsSettings.dirs><code>COMPONENTS.dirs</code></a> or <a href=../settings/#django_components.app_settings.ComponentsSettings.app_dirs><code>COMPONENTS.app_dirs</code></a> change.</p> <p>See <a href=../../guides/setup/dev_server_setup/#reload-dev-server-on-component-file-changes>Reload dev server on component file changes</a>.</p> <p>Defaults to <code>False</code>.</p> <div class="admonition warning"> <p class=admonition-title>Warning</p> <p>This setting should be enabled only for the dev environment!</p> </div> </div> </div> <div class="doc doc-object doc-attribute"> <h4 id=django_components.app_settings.ComponentsSettings.reload_on_template_change class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">reload_on_template_change</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.app_settings.ComponentsSettings.reload_on_template_change class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>reload_on_template_change</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/functions.html#bool>bool</a></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>Deprecated. Use <a href=../settings/#django_components.app_settings.ComponentsSettings.reload_on_file_change><code>COMPONENTS.reload_on_file_change</code></a> instead.</p> </div> </div> <div class="doc doc-object doc-attribute"> <h4 id=django_components.app_settings.ComponentsSettings.static_files_allowed class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">static_files_allowed</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.app_settings.ComponentsSettings.static_files_allowed class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>static_files_allowed</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.List href=https://docs.python.org/3.12/library/typing.html#typing.List>List</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Union href=https://docs.python.org/3.12/library/typing.html#typing.Union>Union</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span> <span class=n><a class="autorefs autorefs-external" title=re.Pattern href=https://docs.python.org/3.12/library/re.html#re.Pattern>Pattern</a></span><span class=p>]]]</span> <span class=o>=</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>A list of file extensions (including the leading dot) that define which files within <a href=../settings/#django_components.app_settings.ComponentsSettings.dirs><code>COMPONENTS.dirs</code></a> or <a href=../settings/#django_components.app_settings.ComponentsSettings.app_dirs><code>COMPONENTS.app_dirs</code></a> are treated as <a href=https://docs.djangoproject.com/en/5.1/howto/static-files/ >static files</a>.</p> <p>If a file is matched against any of the patterns, it's considered a static file. Such files are collected when running <a href=https://docs.djangoproject.com/en/5.1/ref/contrib/staticfiles/#collectstatic><code>collectstatic</code></a>, and can be accessed under the <a href=https://docs.djangoproject.com/en/5.1/ref/settings/#static-url>static file endpoint</a>.</p> <p>You can also pass in compiled regexes (<a href=https://docs.python.org/3/library/re.html#re.Pattern><code>re.Pattern</code></a>) for more advanced patterns.</p> <p>By default, JS, CSS, and common image and font file formats are considered static files:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>COMPONENTS</span> <span class=o>=</span> <span class=n>ComponentsSettings</span><span class=p>(</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a> <span class=n>static_files_allowed</span><span class=o>=</span><span class=p>[</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a> <span class=s2>&quot;.css&quot;</span><span class=p>,</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a> <span class=s2>&quot;.js&quot;</span><span class=p>,</span> <span class=s2>&quot;.jsx&quot;</span><span class=p>,</span> <span class=s2>&quot;.ts&quot;</span><span class=p>,</span> <span class=s2>&quot;.tsx&quot;</span><span class=p>,</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a> <span class=c1># Images</span>
<a id=__codelineno-0-6 name=__codelineno-0-6 href=#__codelineno-0-6></a> <span class=s2>&quot;.apng&quot;</span><span class=p>,</span> <span class=s2>&quot;.png&quot;</span><span class=p>,</span> <span class=s2>&quot;.avif&quot;</span><span class=p>,</span> <span class=s2>&quot;.gif&quot;</span><span class=p>,</span> <span class=s2>&quot;.jpg&quot;</span><span class=p>,</span>
<a id=__codelineno-0-7 name=__codelineno-0-7 href=#__codelineno-0-7></a> <span class=s2>&quot;.jpeg&quot;</span><span class=p>,</span> <span class=s2>&quot;.jfif&quot;</span><span class=p>,</span> <span class=s2>&quot;.pjpeg&quot;</span><span class=p>,</span> <span class=s2>&quot;.pjp&quot;</span><span class=p>,</span> <span class=s2>&quot;.svg&quot;</span><span class=p>,</span>
<a id=__codelineno-0-8 name=__codelineno-0-8 href=#__codelineno-0-8></a> <span class=s2>&quot;.webp&quot;</span><span class=p>,</span> <span class=s2>&quot;.bmp&quot;</span><span class=p>,</span> <span class=s2>&quot;.ico&quot;</span><span class=p>,</span> <span class=s2>&quot;.cur&quot;</span><span class=p>,</span> <span class=s2>&quot;.tif&quot;</span><span class=p>,</span> <span class=s2>&quot;.tiff&quot;</span><span class=p>,</span>
<a id=__codelineno-0-9 name=__codelineno-0-9 href=#__codelineno-0-9></a> <span class=c1># Fonts</span>
<a id=__codelineno-0-10 name=__codelineno-0-10 href=#__codelineno-0-10></a> <span class=s2>&quot;.eot&quot;</span><span class=p>,</span> <span class=s2>&quot;.ttf&quot;</span><span class=p>,</span> <span class=s2>&quot;.woff&quot;</span><span class=p>,</span> <span class=s2>&quot;.otf&quot;</span><span class=p>,</span> <span class=s2>&quot;.svg&quot;</span><span class=p>,</span>
<a id=__codelineno-0-11 name=__codelineno-0-11 href=#__codelineno-0-11></a> <span class=p>],</span>
<a id=__codelineno-0-12 name=__codelineno-0-12 href=#__codelineno-0-12></a><span class=p>)</span>
</code></pre></div> <div class="admonition warning"> <p class=admonition-title>Warning</p> <p>Exposing your Python files can be a security vulnerability. See <a href=../../overview/security_notes>Security notes</a>.</p> </div> </div> </div> <div class="doc doc-object doc-attribute"> <h4 id=django_components.app_settings.ComponentsSettings.static_files_forbidden class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">static_files_forbidden</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.app_settings.ComponentsSettings.static_files_forbidden class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>static_files_forbidden</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.List href=https://docs.python.org/3.12/library/typing.html#typing.List>List</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Union href=https://docs.python.org/3.12/library/typing.html#typing.Union>Union</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span> <span class=n><a class="autorefs autorefs-external" title=re.Pattern href=https://docs.python.org/3.12/library/re.html#re.Pattern>Pattern</a></span><span class=p>]]]</span> <span class=o>=</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>A list of file extensions (including the leading dot) that define which files within <a href=../settings/#django_components.app_settings.ComponentsSettings.dirs><code>COMPONENTS.dirs</code></a> or <a href=../settings/#django_components.app_settings.ComponentsSettings.app_dirs><code>COMPONENTS.app_dirs</code></a> will NEVER be treated as <a href=https://docs.djangoproject.com/en/5.1/howto/static-files/ >static files</a>.</p> <p>If a file is matched against any of the patterns, it will never be considered a static file, even if the file matches a pattern in <a href=../settings/#django_components.app_settings.ComponentsSettings.static_files_allowed><code>static_files_allowed</code></a>.</p> <p>Use this setting together with <a href=../settings/#django_components.app_settings.ComponentsSettings.static_files_allowed><code>static_files_allowed</code></a> for a fine control over what file types will be exposed.</p> <p>You can also pass in compiled regexes (<a href=https://docs.python.org/3/library/re.html#re.Pattern><code>re.Pattern</code></a>) for more advanced patterns.</p> <p>By default, any HTML and Python are considered NOT static files:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>COMPONENTS</span> <span class=o>=</span> <span class=n>ComponentsSettings</span><span class=p>(</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a> <span class=n>static_files_forbidden</span><span class=o>=</span><span class=p>[</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a> <span class=s2>&quot;.html&quot;</span><span class=p>,</span> <span class=s2>&quot;.django&quot;</span><span class=p>,</span> <span class=s2>&quot;.dj&quot;</span><span class=p>,</span> <span class=s2>&quot;.tpl&quot;</span><span class=p>,</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a> <span class=c1># Python files</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a> <span class=s2>&quot;.py&quot;</span><span class=p>,</span> <span class=s2>&quot;.pyc&quot;</span><span class=p>,</span>
<a id=__codelineno-0-6 name=__codelineno-0-6 href=#__codelineno-0-6></a> <span class=p>],</span>
<a id=__codelineno-0-7 name=__codelineno-0-7 href=#__codelineno-0-7></a><span class=p>)</span>
</code></pre></div> <div class="admonition warning"> <p class=admonition-title>Warning</p> <p>Exposing your Python files can be a security vulnerability. See <a href=../../overview/security_notes>Security notes</a>.</p> </div> </div> </div> <div class="doc doc-object doc-attribute"> <h4 id=django_components.app_settings.ComponentsSettings.tag_formatter class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">tag_formatter</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.app_settings.ComponentsSettings.tag_formatter class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>tag_formatter</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Union href=https://docs.python.org/3.12/library/typing.html#typing.Union>Union</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-internal" title=django_components.tag_formatter.TagFormatterABC href=#django_components.tag_formatter.TagFormatterABC>TagFormatterABC</a></span><span class=p>,</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]]</span> <span class=o>=</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>Configure what syntax is used inside Django templates to render components. See the <a href=../tag_formatters>available tag formatters</a>.</p> <p>Defaults to <code>"django_components.component_formatter"</code>.</p> <p>Learn more about <a href=../../concepts/advanced/tag_formatter>Customizing component tags with TagFormatter</a>.</p> <p>Can be set either as direct reference:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=kn>from</span> <span class=nn>django_components</span> <span class=kn>import</span> <span class=n>component_formatter</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=n>COMPONENTS</span> <span class=o>=</span> <span class=n>ComponentsSettings</span><span class=p>(</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a> <span class=s2>&quot;tag_formatter&quot;</span><span class=p>:</span> <span class=n>component_formatter</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a><span class=p>)</span>
</code></pre></div> <p>Or as an import string;</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>COMPONENTS</span> <span class=o>=</span> <span class=n>ComponentsSettings</span><span class=p>(</span>
<a id=__codelineno-1-2 name=__codelineno-1-2 href=#__codelineno-1-2></a> <span class=s2>&quot;tag_formatter&quot;</span><span class=p>:</span> <span class=s2>&quot;django_components.component_formatter&quot;</span>
<a id=__codelineno-1-3 name=__codelineno-1-3 href=#__codelineno-1-3></a><span class=p>)</span>
</code></pre></div> <p><strong>Examples:</strong></p> <ul> <li> <p><code>"django_components.component_formatter"</code></p> <p>Set</p> <div class=highlight><pre><span></span><code><a id=__codelineno-2-1 name=__codelineno-2-1 href=#__codelineno-2-1></a><span class=n>COMPONENTS</span> <span class=o>=</span> <span class=n>ComponentsSettings</span><span class=p>(</span>
<a id=__codelineno-2-2 name=__codelineno-2-2 href=#__codelineno-2-2></a> <span class=s2>&quot;tag_formatter&quot;</span><span class=p>:</span> <span class=s2>&quot;django_components.component_formatter&quot;</span>
<a id=__codelineno-2-3 name=__codelineno-2-3 href=#__codelineno-2-3></a><span class=p>)</span>
</code></pre></div> <p>To write components like this:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-3-1 name=__codelineno-3-1 href=#__codelineno-3-1></a><span class=cp>{%</span> <span class=k>component</span> <span class=s2>&quot;button&quot;</span> <span class=nv>href</span><span class=o>=</span><span class=s2>&quot;...&quot;</span> <span class=cp>%}</span>
<a id=__codelineno-3-2 name=__codelineno-3-2 href=#__codelineno-3-2></a><span class=x> Click me!</span>
<a id=__codelineno-3-3 name=__codelineno-3-3 href=#__codelineno-3-3></a><span class=cp>{%</span> <span class=k>endcomponent</span> <span class=cp>%}</span>
</code></pre></div> </li> <li> <p><code>django_components.component_shorthand_formatter</code></p> <p>Set</p> <div class=highlight><pre><span></span><code><a id=__codelineno-4-1 name=__codelineno-4-1 href=#__codelineno-4-1></a><span class=n>COMPONENTS</span> <span class=o>=</span> <span class=n>ComponentsSettings</span><span class=p>(</span>
<a id=__codelineno-4-2 name=__codelineno-4-2 href=#__codelineno-4-2></a> <span class=s2>&quot;tag_formatter&quot;</span><span class=p>:</span> <span class=s2>&quot;django_components.component_shorthand_formatter&quot;</span>
<a id=__codelineno-4-3 name=__codelineno-4-3 href=#__codelineno-4-3></a><span class=p>)</span>
</code></pre></div> <p>To write components like this:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-5-1 name=__codelineno-5-1 href=#__codelineno-5-1></a><span class=cp>{%</span> <span class=k>button</span> <span class=nv>href</span><span class=o>=</span><span class=s2>&quot;...&quot;</span> <span class=cp>%}</span>
<a id=__codelineno-5-2 name=__codelineno-5-2 href=#__codelineno-5-2></a><span class=x> Click me!</span>
<a id=__codelineno-5-3 name=__codelineno-5-3 href=#__codelineno-5-3></a><span class=cp>{%</span> <span class=k>endbutton</span> <span class=cp>%}</span>
</code></pre></div> </li> </ul> </div> </div> <div class="doc doc-object doc-attribute"> <h4 id=django_components.app_settings.ComponentsSettings.template_cache_size class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">template_cache_size</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.app_settings.ComponentsSettings.template_cache_size class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>template_cache_size</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/functions.html#int>int</a></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>Configure the maximum amount of Django templates to be cached.</p> <p>Defaults to <code>128</code>.</p> <p>Each time a <a href=https://docs.djangoproject.com/en/5.1/ref/templates/api/#django.template.Template>Django template</a> is rendered, it is cached to a global in-memory cache (using Python's <a href=https://docs.python.org/3/library/functools.html#functools.lru_cache><code>lru_cache</code></a> decorator). This speeds up the next render of the component. As the same component is often used many times on the same page, these savings add up.</p> <p>By default the cache holds 128 component templates in memory, which should be enough for most sites. But if you have a lot of components, or if you are overriding <a href=../api#django_components.Component.get_template><code>Component.get_template()</code></a> to render many dynamic templates, you can increase this number.</p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>COMPONENTS</span> <span class=o>=</span> <span class=n>ComponentsSettings</span><span class=p>(</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a> <span class=n>template_cache_size</span><span class=o>=</span><span class=mi>256</span><span class=p>,</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=p>)</span>
</code></pre></div> <p>To remove the cache limit altogether and cache everything, set <code>template_cache_size</code> to <code>None</code>.</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>COMPONENTS</span> <span class=o>=</span> <span class=n>ComponentsSettings</span><span class=p>(</span>
<a id=__codelineno-1-2 name=__codelineno-1-2 href=#__codelineno-1-2></a> <span class=n>template_cache_size</span><span class=o>=</span><span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-1-3 name=__codelineno-1-3 href=#__codelineno-1-3></a><span class=p>)</span>
</code></pre></div> <p>If you want to add templates to the cache yourself, you can use <a href=../api/#django_components.cached_template><code>cached_template()</code></a>:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-2-1 name=__codelineno-2-1 href=#__codelineno-2-1></a><span class=kn>from</span> <span class=nn>django_components</span> <span class=kn>import</span> <span class=n>cached_template</span>
<a id=__codelineno-2-2 name=__codelineno-2-2 href=#__codelineno-2-2></a>
<a id=__codelineno-2-3 name=__codelineno-2-3 href=#__codelineno-2-3></a><span class=n>cached_template</span><span class=p>(</span><span class=s2>&quot;Variable: {{ variable }}&quot;</span><span class=p>)</span>
<a id=__codelineno-2-4 name=__codelineno-2-4 href=#__codelineno-2-4></a>
<a id=__codelineno-2-5 name=__codelineno-2-5 href=#__codelineno-2-5></a><span class=c1># You can optionally specify Template class, and other Template inputs:</span>
<a id=__codelineno-2-6 name=__codelineno-2-6 href=#__codelineno-2-6></a><span class=k>class</span> <span class=nc>MyTemplate</span><span class=p>(</span><span class=n>Template</span><span class=p>):</span>
<a id=__codelineno-2-7 name=__codelineno-2-7 href=#__codelineno-2-7></a> <span class=k>pass</span>
<a id=__codelineno-2-8 name=__codelineno-2-8 href=#__codelineno-2-8></a>
<a id=__codelineno-2-9 name=__codelineno-2-9 href=#__codelineno-2-9></a><span class=n>cached_template</span><span class=p>(</span>
<a id=__codelineno-2-10 name=__codelineno-2-10 href=#__codelineno-2-10></a> <span class=s2>&quot;Variable: {{ variable }}&quot;</span><span class=p>,</span>
<a id=__codelineno-2-11 name=__codelineno-2-11 href=#__codelineno-2-11></a> <span class=n>template_cls</span><span class=o>=</span><span class=n>MyTemplate</span><span class=p>,</span>
<a id=__codelineno-2-12 name=__codelineno-2-12 href=#__codelineno-2-12></a> <span class=n>name</span><span class=o>=...</span>
<a id=__codelineno-2-13 name=__codelineno-2-13 href=#__codelineno-2-13></a> <span class=n>origin</span><span class=o>=...</span>
<a id=__codelineno-2-14 name=__codelineno-2-14 href=#__codelineno-2-14></a> <span class=n>engine</span><span class=o>=...</span>
<a id=__codelineno-2-15 name=__codelineno-2-15 href=#__codelineno-2-15></a><span class=p>)</span>
</code></pre></div> </div> </div> </div> </div> </div> <div class="doc doc-object doc-class"> <h3 id=django_components.app_settings.ContextBehavior class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-class"></code> <span class="doc doc-object-name doc-class-name">ContextBehavior</span> <a href=#django_components.app_settings.ContextBehavior class=headerlink title="Permanent link">¤</a></h3> <div class="doc doc-contents "> <p class="doc doc-class-bases"> Bases: <code><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></code>, <code><a class="autorefs autorefs-external" title=enum.Enum href=https://docs.python.org/3.12/library/enum.html#enum.Enum>Enum</a></code></p> <p>Configure how (and whether) the context is passed to the component fills and what variables are available inside the <a href=../template_tags#fill><code>{% fill %}</code></a> tags.</p> <p>Also see <a href=../../concepts/fundamentals/component_context_scope#context-behavior>Component context and scope</a>.</p> <p><strong>Options:</strong></p> <ul> <li><code>django</code>: With this setting, component fills behave as usual Django tags.</li> <li><code>isolated</code>: This setting makes the component fills behave similar to Vue or React.</li> </ul> <p><span class=doc-section-title>Attributes:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.app_settings.ContextBehavior.DJANGO href=#django_components.app_settings.ContextBehavior.DJANGO>DJANGO</a></code></b> <div class=doc-md-description> <p>With this setting, component fills behave as usual Django tags.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.app_settings.ContextBehavior.ISOLATED href=#django_components.app_settings.ContextBehavior.ISOLATED>ISOLATED</a></code></b> <div class=doc-md-description> <p>This setting makes the component fills behave similar to Vue or React, where</p> </div> </li> </ul> <div class="doc doc-children"> <div class="doc doc-object doc-attribute"> <h4 id=django_components.app_settings.ContextBehavior.DJANGO class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">DJANGO</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.app_settings.ContextBehavior.DJANGO class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>DJANGO</span> <span class=o>=</span> <span class=s1>&#39;django&#39;</span>
</code></pre></div> <div class="doc doc-contents "> <p>With this setting, component fills behave as usual Django tags. That is, they enrich the context, and pass it along.</p> <ol> <li>Component fills use the context of the component they are within.</li> <li>Variables from <a href=../api#django_components.Component.get_context_data><code>Component.get_context_data()</code></a> are available to the component fill.</li> </ol> <p><strong>Example:</strong></p> <p>Given this template <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=cp>{%</span> <span class=k>with</span> <span class=nv>cheese</span><span class=o>=</span><span class=s2>&quot;feta&quot;</span> <span class=cp>%}</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a><span class=x> </span><span class=cp>{%</span> <span class=k>component</span> <span class=s1>&#39;my_comp&#39;</span> <span class=cp>%}</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=x> </span><span class=cp>{{</span> <span class=nv>my_var</span> <span class=cp>}}</span><span class=x> # my_var</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a><span class=x> </span><span class=cp>{{</span> <span class=nv>cheese</span> <span class=cp>}}</span><span class=x> # cheese</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a><span class=x> </span><span class=cp>{%</span> <span class=k>endcomponent</span> <span class=cp>%}</span>
<a id=__codelineno-0-6 name=__codelineno-0-6 href=#__codelineno-0-6></a><span class=cp>{%</span> <span class=k>endwith</span> <span class=cp>%}</span>
</code></pre></div></p> <p>and this context returned from the <code>Component.get_context_data()</code> method <div class=highlight><pre><span></span><code><a id=__codelineno-1-1 name=__codelineno-1-1 href=#__codelineno-1-1></a><span class=p>{</span> <span class=s2>&quot;my_var&quot;</span><span class=p>:</span> <span class=mi>123</span> <span class=p>}</span>
</code></pre></div></p> <p>Then if component "my_comp" defines context <div class=highlight><pre><span></span><code><a id=__codelineno-2-1 name=__codelineno-2-1 href=#__codelineno-2-1></a><span class=p>{</span> <span class=s2>&quot;my_var&quot;</span><span class=p>:</span> <span class=mi>456</span> <span class=p>}</span>
</code></pre></div></p> <p>Then this will render: <div class=highlight><pre><span></span><code><a id=__codelineno-3-1 name=__codelineno-3-1 href=#__codelineno-3-1></a><span class=x>456 # my_var</span>
<a id=__codelineno-3-2 name=__codelineno-3-2 href=#__codelineno-3-2></a><span class=x>feta # cheese</span>
</code></pre></div></p> <p>Because "my_comp" overrides the variable "my_var", so <code>{{ my_var }}</code> equals <code>456</code>.</p> <p>And variable "cheese" will equal <code>feta</code>, because the fill CAN access the current context.</p> </div> </div> <div class="doc doc-object doc-attribute"> <h4 id=django_components.app_settings.ContextBehavior.ISOLATED class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">ISOLATED</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.app_settings.ContextBehavior.ISOLATED class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>ISOLATED</span> <span class=o>=</span> <span class=s1>&#39;isolated&#39;</span>
</code></pre></div> <div class="doc doc-contents "> <p>This setting makes the component fills behave similar to Vue or React, where the fills use EXCLUSIVELY the context variables defined in <a href=../api#django_components.Component.get_context_data><code>Component.get_context_data()</code></a>.</p> <p><strong>Example:</strong></p> <p>Given this template <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=cp>{%</span> <span class=k>with</span> <span class=nv>cheese</span><span class=o>=</span><span class=s2>&quot;feta&quot;</span> <span class=cp>%}</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a><span class=x> </span><span class=cp>{%</span> <span class=k>component</span> <span class=s1>&#39;my_comp&#39;</span> <span class=cp>%}</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=x> </span><span class=cp>{{</span> <span class=nv>my_var</span> <span class=cp>}}</span><span class=x> # my_var</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a><span class=x> </span><span class=cp>{{</span> <span class=nv>cheese</span> <span class=cp>}}</span><span class=x> # cheese</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a><span class=x> </span><span class=cp>{%</span> <span class=k>endcomponent</span> <span class=cp>%}</span>
<a id=__codelineno-0-6 name=__codelineno-0-6 href=#__codelineno-0-6></a><span class=cp>{%</span> <span class=k>endwith</span> <span class=cp>%}</span>
</code></pre></div></p> <p>and this context returned from the <code>get_context_data()</code> method <div class=highlight><pre><span></span><code><a id=__codelineno-1-1 name=__codelineno-1-1 href=#__codelineno-1-1></a><span class=p>{</span> <span class=s2>&quot;my_var&quot;</span><span class=p>:</span> <span class=mi>123</span> <span class=p>}</span>
</code></pre></div></p> <p>Then if component "my_comp" defines context <div class=highlight><pre><span></span><code><a id=__codelineno-2-1 name=__codelineno-2-1 href=#__codelineno-2-1></a><span class=p>{</span> <span class=s2>&quot;my_var&quot;</span><span class=p>:</span> <span class=mi>456</span> <span class=p>}</span>
</code></pre></div></p> <p>Then this will render: <div class=highlight><pre><span></span><code><a id=__codelineno-3-1 name=__codelineno-3-1 href=#__codelineno-3-1></a><span class=x>123 # my_var</span>
<a id=__codelineno-3-2 name=__codelineno-3-2 href=#__codelineno-3-2></a><span class=x> # cheese</span>
</code></pre></div></p> <p>Because both variables "my_var" and "cheese" are taken from the root context. Since "cheese" is not defined in root context, it's empty.</p> </div> </div> </div> </div> </div> </div> </div> </div> <div class="doc doc-object doc-module"> <h2 id=django_components.attributes class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-module"></code> <span class="doc doc-object-name doc-module-name">attributes</span> <a href=#django_components.attributes class=headerlink title="Permanent link">¤</a></h2> <div class="doc doc-contents "> <p><span class=doc-section-title>Functions:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.attributes.append_attributes href=#django_components.attributes.append_attributes>append_attributes</a></code></b> <div class=doc-md-description> <p>Merges the key-value pairs and returns a new dictionary.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.attributes.attributes_to_string href=#django_components.attributes.attributes_to_string>attributes_to_string</a></code></b> <div class=doc-md-description> <p>Convert a dict of attributes to a string.</p> </div> </li> </ul> <div class="doc doc-children"> <div class="doc doc-object doc-function"> <h3 id=django_components.attributes.append_attributes class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-function"></code> <span class="doc doc-object-name doc-function-name">append_attributes</span> <a href=#django_components.attributes.append_attributes class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>append_attributes</span><span class=p>(</span><span class=o>*</span><span class=n>args</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Tuple href=https://docs.python.org/3.12/library/typing.html#typing.Tuple>Tuple</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span> <span class=n><a class="autorefs autorefs-external" title=typing.Any href=https://docs.python.org/3.12/library/typing.html#typing.Any>Any</a></span><span class=p>])</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-external" title=typing.Dict href=https://docs.python.org/3.12/library/typing.html#typing.Dict>Dict</a></span>
</code></pre></div> <div class="doc doc-contents "> <p>Merges the key-value pairs and returns a new dictionary.</p> <p>If a key is present multiple times, its values are concatenated with a space character as separator in the final dictionary.</p> <details class=quote> <summary>Source code in <code>src/django_components/attributes.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-71>71</a></span>
<span class=normal><a href=#__codelineno-0-72>72</a></span>
<span class=normal><a href=#__codelineno-0-73>73</a></span>
<span class=normal><a href=#__codelineno-0-74>74</a></span>
<span class=normal><a href=#__codelineno-0-75>75</a></span>
<span class=normal><a href=#__codelineno-0-76>76</a></span>
<span class=normal><a href=#__codelineno-0-77>77</a></span>
<span class=normal><a href=#__codelineno-0-78>78</a></span>
<span class=normal><a href=#__codelineno-0-79>79</a></span>
<span class=normal><a href=#__codelineno-0-80>80</a></span>
<span class=normal><a href=#__codelineno-0-81>81</a></span>
<span class=normal><a href=#__codelineno-0-82>82</a></span>
<span class=normal><a href=#__codelineno-0-83>83</a></span>
<span class=normal><a href=#__codelineno-0-84>84</a></span>
<span class=normal><a href=#__codelineno-0-85>85</a></span>
<span class=normal><a href=#__codelineno-0-86>86</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-71 name=__codelineno-0-71></a><span class=k>def</span> <span class=nf>append_attributes</span><span class=p>(</span><span class=o>*</span><span class=n>args</span><span class=p>:</span> <span class=n>Tuple</span><span class=p>[</span><span class=nb>str</span><span class=p>,</span> <span class=n>Any</span><span class=p>])</span> <span class=o>-&gt;</span> <span class=n>Dict</span><span class=p>:</span>
<a id=__codelineno-0-72 name=__codelineno-0-72></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-73 name=__codelineno-0-73></a><span class=sd> Merges the key-value pairs and returns a new dictionary.</span>
<a id=__codelineno-0-74 name=__codelineno-0-74></a>
<a id=__codelineno-0-75 name=__codelineno-0-75></a><span class=sd> If a key is present multiple times, its values are concatenated with a space</span>
<a id=__codelineno-0-76 name=__codelineno-0-76></a><span class=sd> character as separator in the final dictionary.</span>
<a id=__codelineno-0-77 name=__codelineno-0-77></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-78 name=__codelineno-0-78></a> <span class=n>result</span><span class=p>:</span> <span class=n>Dict</span> <span class=o>=</span> <span class=p>{}</span>
<a id=__codelineno-0-79 name=__codelineno-0-79></a>
<a id=__codelineno-0-80 name=__codelineno-0-80></a> <span class=k>for</span> <span class=n>key</span><span class=p>,</span> <span class=n>value</span> <span class=ow>in</span> <span class=n>args</span><span class=p>:</span>
<a id=__codelineno-0-81 name=__codelineno-0-81></a> <span class=k>if</span> <span class=n>key</span> <span class=ow>in</span> <span class=n>result</span><span class=p>:</span>
<a id=__codelineno-0-82 name=__codelineno-0-82></a> <span class=n>result</span><span class=p>[</span><span class=n>key</span><span class=p>]</span> <span class=o>+=</span> <span class=s2>&quot; &quot;</span> <span class=o>+</span> <span class=n>value</span>
<a id=__codelineno-0-83 name=__codelineno-0-83></a> <span class=k>else</span><span class=p>:</span>
<a id=__codelineno-0-84 name=__codelineno-0-84></a> <span class=n>result</span><span class=p>[</span><span class=n>key</span><span class=p>]</span> <span class=o>=</span> <span class=n>value</span>
<a id=__codelineno-0-85 name=__codelineno-0-85></a>
<a id=__codelineno-0-86 name=__codelineno-0-86></a> <span class=k>return</span> <span class=n>result</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h3 id=django_components.attributes.attributes_to_string class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-function"></code> <span class="doc doc-object-name doc-function-name">attributes_to_string</span> <a href=#django_components.attributes.attributes_to_string class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>attributes_to_string</span><span class=p>(</span><span class=n>attributes</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Mapping href=https://docs.python.org/3.12/library/typing.html#typing.Mapping>Mapping</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span> <span class=n><a class="autorefs autorefs-external" title=typing.Any href=https://docs.python.org/3.12/library/typing.html#typing.Any>Any</a></span><span class=p>])</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span>
</code></pre></div> <div class="doc doc-contents "> <p>Convert a dict of attributes to a string.</p> <details class=quote> <summary>Source code in <code>src/django_components/attributes.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-56>56</a></span>
<span class=normal><a href=#__codelineno-0-57>57</a></span>
<span class=normal><a href=#__codelineno-0-58>58</a></span>
<span class=normal><a href=#__codelineno-0-59>59</a></span>
<span class=normal><a href=#__codelineno-0-60>60</a></span>
<span class=normal><a href=#__codelineno-0-61>61</a></span>
<span class=normal><a href=#__codelineno-0-62>62</a></span>
<span class=normal><a href=#__codelineno-0-63>63</a></span>
<span class=normal><a href=#__codelineno-0-64>64</a></span>
<span class=normal><a href=#__codelineno-0-65>65</a></span>
<span class=normal><a href=#__codelineno-0-66>66</a></span>
<span class=normal><a href=#__codelineno-0-67>67</a></span>
<span class=normal><a href=#__codelineno-0-68>68</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-56 name=__codelineno-0-56></a><span class=k>def</span> <span class=nf>attributes_to_string</span><span class=p>(</span><span class=n>attributes</span><span class=p>:</span> <span class=n>Mapping</span><span class=p>[</span><span class=nb>str</span><span class=p>,</span> <span class=n>Any</span><span class=p>])</span> <span class=o>-&gt;</span> <span class=nb>str</span><span class=p>:</span>
<a id=__codelineno-0-57 name=__codelineno-0-57></a><span class=w> </span><span class=sd>&quot;&quot;&quot;Convert a dict of attributes to a string.&quot;&quot;&quot;</span>
<a id=__codelineno-0-58 name=__codelineno-0-58></a> <span class=n>attr_list</span> <span class=o>=</span> <span class=p>[]</span>
<a id=__codelineno-0-59 name=__codelineno-0-59></a>
<a id=__codelineno-0-60 name=__codelineno-0-60></a> <span class=k>for</span> <span class=n>key</span><span class=p>,</span> <span class=n>value</span> <span class=ow>in</span> <span class=n>attributes</span><span class=o>.</span><span class=n>items</span><span class=p>():</span>
<a id=__codelineno-0-61 name=__codelineno-0-61></a> <span class=k>if</span> <span class=n>value</span> <span class=ow>is</span> <span class=kc>None</span> <span class=ow>or</span> <span class=n>value</span> <span class=ow>is</span> <span class=kc>False</span><span class=p>:</span>
<a id=__codelineno-0-62 name=__codelineno-0-62></a> <span class=k>continue</span>
<a id=__codelineno-0-63 name=__codelineno-0-63></a> <span class=k>if</span> <span class=n>value</span> <span class=ow>is</span> <span class=kc>True</span><span class=p>:</span>
<a id=__codelineno-0-64 name=__codelineno-0-64></a> <span class=n>attr_list</span><span class=o>.</span><span class=n>append</span><span class=p>(</span><span class=n>conditional_escape</span><span class=p>(</span><span class=n>key</span><span class=p>))</span>
<a id=__codelineno-0-65 name=__codelineno-0-65></a> <span class=k>else</span><span class=p>:</span>
<a id=__codelineno-0-66 name=__codelineno-0-66></a> <span class=n>attr_list</span><span class=o>.</span><span class=n>append</span><span class=p>(</span><span class=n>format_html</span><span class=p>(</span><span class=s1>&#39;</span><span class=si>{}</span><span class=s1>=&quot;</span><span class=si>{}</span><span class=s1>&quot;&#39;</span><span class=p>,</span> <span class=n>key</span><span class=p>,</span> <span class=n>value</span><span class=p>))</span>
<a id=__codelineno-0-67 name=__codelineno-0-67></a>
<a id=__codelineno-0-68 name=__codelineno-0-68></a> <span class=k>return</span> <span class=n>mark_safe</span><span class=p>(</span><span class=n>SafeString</span><span class=p>(</span><span class=s2>&quot; &quot;</span><span class=p>)</span><span class=o>.</span><span class=n>join</span><span class=p>(</span><span class=n>attr_list</span><span class=p>))</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> </div> </div> </div> <div class="doc doc-object doc-module"> <h2 id=django_components.autodiscovery class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-module"></code> <span class="doc doc-object-name doc-module-name">autodiscovery</span> <a href=#django_components.autodiscovery class=headerlink title="Permanent link">¤</a></h2> <div class="doc doc-contents "> <p><span class=doc-section-title>Functions:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.autodiscovery.autodiscover href=#django_components.autodiscovery.autodiscover>autodiscover</a></code></b> <div class=doc-md-description> <p>Search for all python files in</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.autodiscovery.import_libraries href=#django_components.autodiscovery.import_libraries>import_libraries</a></code></b> <div class=doc-md-description> <p>Import modules set in</p> </div> </li> </ul> <div class="doc doc-children"> <div class="doc doc-object doc-function"> <h3 id=django_components.autodiscovery.autodiscover class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-function"></code> <span class="doc doc-object-name doc-function-name">autodiscover</span> <a href=#django_components.autodiscovery.autodiscover class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>autodiscover</span><span class=p>(</span><span class=n>map_module</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Callable href=https://docs.python.org/3.12/library/typing.html#typing.Callable>Callable</a></span><span class=p>[[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>],</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-external" title=typing.List href=https://docs.python.org/3.12/library/typing.html#typing.List>List</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]</span>
</code></pre></div> <div class="doc doc-contents "> <p>Search for all python files in <a href=../settings#django_components.app_settings.ComponentsSettings.dirs><code>COMPONENTS.dirs</code></a> and <a href=../settings#django_components.app_settings.ComponentsSettings.app_dirs><code>COMPONENTS.app_dirs</code></a> and import them.</p> <p>See <a href=../../concepts/fundamentals/autodiscovery>Autodiscovery</a>.</p> <p><span class=doc-section-title>Parameters:</span></p> <ul> <li class="doc-section-item field-body"> <b><code>map_module</code></b> (<code><a class="autorefs autorefs-external" title=typing.Callable href=https://docs.python.org/3.12/library/typing.html#typing.Callable>Callable</a>[[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>], <a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>]</code>, default: <code>None</code> ) <div class=doc-md-description> <p>Map the module paths with <code>map_module</code> function. This serves as an escape hatch for when you need to use this function in tests.</p> </div> </li> </ul> <p><span class=doc-section-title>Returns:</span></p> <ul> <li class="doc-section-item field-body"> <code><a class="autorefs autorefs-external" title=typing.List href=https://docs.python.org/3.12/library/typing.html#typing.List>List</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>]</code> <div class=doc-md-description> <p>List[str]: A list of module paths of imported files.</p> </div> </li> </ul> <p>To get the same list of modules that <code>autodiscover()</code> would return, but without importing them, use <a href=../api#django_components.get_component_files><code>get_component_files()</code></a>:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=kn>from</span> <span class=nn>django_components</span> <span class=kn>import</span> <span class=n>get_component_files</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=n>modules</span> <span class=o>=</span> <span class=n>get_component_files</span><span class=p>(</span><span class=s2>&quot;.py&quot;</span><span class=p>)</span>
</code></pre></div> <details class=quote> <summary>Source code in <code>src/django_components/autodiscovery.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-8> 8</a></span>
<span class=normal><a href=#__codelineno-0-9> 9</a></span>
<span class=normal><a href=#__codelineno-0-10>10</a></span>
<span class=normal><a href=#__codelineno-0-11>11</a></span>
<span class=normal><a href=#__codelineno-0-12>12</a></span>
<span class=normal><a href=#__codelineno-0-13>13</a></span>
<span class=normal><a href=#__codelineno-0-14>14</a></span>
<span class=normal><a href=#__codelineno-0-15>15</a></span>
<span class=normal><a href=#__codelineno-0-16>16</a></span>
<span class=normal><a href=#__codelineno-0-17>17</a></span>
<span class=normal><a href=#__codelineno-0-18>18</a></span>
<span class=normal><a href=#__codelineno-0-19>19</a></span>
<span class=normal><a href=#__codelineno-0-20>20</a></span>
<span class=normal><a href=#__codelineno-0-21>21</a></span>
<span class=normal><a href=#__codelineno-0-22>22</a></span>
<span class=normal><a href=#__codelineno-0-23>23</a></span>
<span class=normal><a href=#__codelineno-0-24>24</a></span>
<span class=normal><a href=#__codelineno-0-25>25</a></span>
<span class=normal><a href=#__codelineno-0-26>26</a></span>
<span class=normal><a href=#__codelineno-0-27>27</a></span>
<span class=normal><a href=#__codelineno-0-28>28</a></span>
<span class=normal><a href=#__codelineno-0-29>29</a></span>
<span class=normal><a href=#__codelineno-0-30>30</a></span>
<span class=normal><a href=#__codelineno-0-31>31</a></span>
<span class=normal><a href=#__codelineno-0-32>32</a></span>
<span class=normal><a href=#__codelineno-0-33>33</a></span>
<span class=normal><a href=#__codelineno-0-34>34</a></span>
<span class=normal><a href=#__codelineno-0-35>35</a></span>
<span class=normal><a href=#__codelineno-0-36>36</a></span>
<span class=normal><a href=#__codelineno-0-37>37</a></span>
<span class=normal><a href=#__codelineno-0-38>38</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-8 name=__codelineno-0-8></a><span class=k>def</span> <span class=nf>autodiscover</span><span class=p>(</span>
<a id=__codelineno-0-9 name=__codelineno-0-9></a> <span class=n>map_module</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>Callable</span><span class=p>[[</span><span class=nb>str</span><span class=p>],</span> <span class=nb>str</span><span class=p>]]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-10 name=__codelineno-0-10></a><span class=p>)</span> <span class=o>-&gt;</span> <span class=n>List</span><span class=p>[</span><span class=nb>str</span><span class=p>]:</span>
<a id=__codelineno-0-11 name=__codelineno-0-11></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-12 name=__codelineno-0-12></a><span class=sd> Search for all python files in</span>
<a id=__codelineno-0-13 name=__codelineno-0-13></a><span class=sd> [`COMPONENTS.dirs`](../settings#django_components.app_settings.ComponentsSettings.dirs)</span>
<a id=__codelineno-0-14 name=__codelineno-0-14></a><span class=sd> and</span>
<a id=__codelineno-0-15 name=__codelineno-0-15></a><span class=sd> [`COMPONENTS.app_dirs`](../settings#django_components.app_settings.ComponentsSettings.app_dirs)</span>
<a id=__codelineno-0-16 name=__codelineno-0-16></a><span class=sd> and import them.</span>
<a id=__codelineno-0-17 name=__codelineno-0-17></a>
<a id=__codelineno-0-18 name=__codelineno-0-18></a><span class=sd> See [Autodiscovery](../../concepts/fundamentals/autodiscovery).</span>
<a id=__codelineno-0-19 name=__codelineno-0-19></a>
<a id=__codelineno-0-20 name=__codelineno-0-20></a><span class=sd> Args:</span>
<a id=__codelineno-0-21 name=__codelineno-0-21></a><span class=sd> map_module (Callable[[str], str], optional): Map the module paths with `map_module` function.\</span>
<a id=__codelineno-0-22 name=__codelineno-0-22></a><span class=sd> This serves as an escape hatch for when you need to use this function in tests.</span>
<a id=__codelineno-0-23 name=__codelineno-0-23></a>
<a id=__codelineno-0-24 name=__codelineno-0-24></a><span class=sd> Returns:</span>
<a id=__codelineno-0-25 name=__codelineno-0-25></a><span class=sd> List[str]: A list of module paths of imported files.</span>
<a id=__codelineno-0-26 name=__codelineno-0-26></a>
<a id=__codelineno-0-27 name=__codelineno-0-27></a><span class=sd> To get the same list of modules that `autodiscover()` would return, but without importing them, use</span>
<a id=__codelineno-0-28 name=__codelineno-0-28></a><span class=sd> [`get_component_files()`](../api#django_components.get_component_files):</span>
<a id=__codelineno-0-29 name=__codelineno-0-29></a>
<a id=__codelineno-0-30 name=__codelineno-0-30></a><span class=sd> ```python</span>
<a id=__codelineno-0-31 name=__codelineno-0-31></a><span class=sd> from django_components import get_component_files</span>
<a id=__codelineno-0-32 name=__codelineno-0-32></a>
<a id=__codelineno-0-33 name=__codelineno-0-33></a><span class=sd> modules = get_component_files(&quot;.py&quot;)</span>
<a id=__codelineno-0-34 name=__codelineno-0-34></a><span class=sd> ```</span>
<a id=__codelineno-0-35 name=__codelineno-0-35></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-36 name=__codelineno-0-36></a> <span class=n>modules</span> <span class=o>=</span> <span class=n>get_component_files</span><span class=p>(</span><span class=s2>&quot;.py&quot;</span><span class=p>)</span>
<a id=__codelineno-0-37 name=__codelineno-0-37></a> <span class=n>logger</span><span class=o>.</span><span class=n>debug</span><span class=p>(</span><span class=sa>f</span><span class=s2>&quot;Autodiscover found </span><span class=si>{</span><span class=nb>len</span><span class=p>(</span><span class=n>modules</span><span class=p>)</span><span class=si>}</span><span class=s2> files in component directories.&quot;</span><span class=p>)</span>
<a id=__codelineno-0-38 name=__codelineno-0-38></a> <span class=k>return</span> <span class=n>_import_modules</span><span class=p>([</span><span class=n>entry</span><span class=o>.</span><span class=n>dot_path</span> <span class=k>for</span> <span class=n>entry</span> <span class=ow>in</span> <span class=n>modules</span><span class=p>],</span> <span class=n>map_module</span><span class=p>)</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h3 id=django_components.autodiscovery.import_libraries class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-function"></code> <span class="doc doc-object-name doc-function-name">import_libraries</span> <a href=#django_components.autodiscovery.import_libraries class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>import_libraries</span><span class=p>(</span><span class=n>map_module</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Callable href=https://docs.python.org/3.12/library/typing.html#typing.Callable>Callable</a></span><span class=p>[[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>],</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-external" title=typing.List href=https://docs.python.org/3.12/library/typing.html#typing.List>List</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]</span>
</code></pre></div> <div class="doc doc-contents "> <p>Import modules set in <a href=../settings#django_components.app_settings.ComponentsSettings.libraries><code>COMPONENTS.libraries</code></a> setting.</p> <p>See <a href=../../concepts/fundamentals/autodiscovery>Autodiscovery</a>.</p> <p><span class=doc-section-title>Parameters:</span></p> <ul> <li class="doc-section-item field-body"> <b><code>map_module</code></b> (<code><a class="autorefs autorefs-external" title=typing.Callable href=https://docs.python.org/3.12/library/typing.html#typing.Callable>Callable</a>[[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>], <a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>]</code>, default: <code>None</code> ) <div class=doc-md-description> <p>Map the module paths with <code>map_module</code> function. This serves as an escape hatch for when you need to use this function in tests.</p> </div> </li> </ul> <p><span class=doc-section-title>Returns:</span></p> <ul> <li class="doc-section-item field-body"> <code><a class="autorefs autorefs-external" title=typing.List href=https://docs.python.org/3.12/library/typing.html#typing.List>List</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>]</code> <div class=doc-md-description> <p>List[str]: A list of module paths of imported files.</p> </div> </li> </ul> <p><strong>Examples:</strong></p> <p>Normal usage - load libraries after Django has loaded <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=kn>from</span> <span class=nn>django_components</span> <span class=kn>import</span> <span class=n>import_libraries</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=k>class</span> <span class=nc>MyAppConfig</span><span class=p>(</span><span class=n>AppConfig</span><span class=p>):</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a> <span class=k>def</span> <span class=nf>ready</span><span class=p>(</span><span class=bp>self</span><span class=p>):</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a> <span class=n>import_libraries</span><span class=p>()</span>
</code></pre></div></p> <p>Potential usage in tests <div class=highlight><pre><span></span><code><a id=__codelineno-1-1 name=__codelineno-1-1 href=#__codelineno-1-1></a><span class=kn>from</span> <span class=nn>django_components</span> <span class=kn>import</span> <span class=n>import_libraries</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=n>import_libraries</span><span class=p>(</span><span class=k>lambda</span> <span class=n>path</span><span class=p>:</span> <span class=n>path</span><span class=o>.</span><span class=n>replace</span><span class=p>(</span><span class=s2>&quot;tests.&quot;</span><span class=p>,</span> <span class=s2>&quot;myapp.&quot;</span><span class=p>))</span>
</code></pre></div></p> <details class=quote> <summary>Source code in <code>src/django_components/autodiscovery.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-41>41</a></span>
<span class=normal><a href=#__codelineno-0-42>42</a></span>
<span class=normal><a href=#__codelineno-0-43>43</a></span>
<span class=normal><a href=#__codelineno-0-44>44</a></span>
<span class=normal><a href=#__codelineno-0-45>45</a></span>
<span class=normal><a href=#__codelineno-0-46>46</a></span>
<span class=normal><a href=#__codelineno-0-47>47</a></span>
<span class=normal><a href=#__codelineno-0-48>48</a></span>
<span class=normal><a href=#__codelineno-0-49>49</a></span>
<span class=normal><a href=#__codelineno-0-50>50</a></span>
<span class=normal><a href=#__codelineno-0-51>51</a></span>
<span class=normal><a href=#__codelineno-0-52>52</a></span>
<span class=normal><a href=#__codelineno-0-53>53</a></span>
<span class=normal><a href=#__codelineno-0-54>54</a></span>
<span class=normal><a href=#__codelineno-0-55>55</a></span>
<span class=normal><a href=#__codelineno-0-56>56</a></span>
<span class=normal><a href=#__codelineno-0-57>57</a></span>
<span class=normal><a href=#__codelineno-0-58>58</a></span>
<span class=normal><a href=#__codelineno-0-59>59</a></span>
<span class=normal><a href=#__codelineno-0-60>60</a></span>
<span class=normal><a href=#__codelineno-0-61>61</a></span>
<span class=normal><a href=#__codelineno-0-62>62</a></span>
<span class=normal><a href=#__codelineno-0-63>63</a></span>
<span class=normal><a href=#__codelineno-0-64>64</a></span>
<span class=normal><a href=#__codelineno-0-65>65</a></span>
<span class=normal><a href=#__codelineno-0-66>66</a></span>
<span class=normal><a href=#__codelineno-0-67>67</a></span>
<span class=normal><a href=#__codelineno-0-68>68</a></span>
<span class=normal><a href=#__codelineno-0-69>69</a></span>
<span class=normal><a href=#__codelineno-0-70>70</a></span>
<span class=normal><a href=#__codelineno-0-71>71</a></span>
<span class=normal><a href=#__codelineno-0-72>72</a></span>
<span class=normal><a href=#__codelineno-0-73>73</a></span>
<span class=normal><a href=#__codelineno-0-74>74</a></span>
<span class=normal><a href=#__codelineno-0-75>75</a></span>
<span class=normal><a href=#__codelineno-0-76>76</a></span>
<span class=normal><a href=#__codelineno-0-77>77</a></span>
<span class=normal><a href=#__codelineno-0-78>78</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-41 name=__codelineno-0-41></a><span class=k>def</span> <span class=nf>import_libraries</span><span class=p>(</span>
<a id=__codelineno-0-42 name=__codelineno-0-42></a> <span class=n>map_module</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>Callable</span><span class=p>[[</span><span class=nb>str</span><span class=p>],</span> <span class=nb>str</span><span class=p>]]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-43 name=__codelineno-0-43></a><span class=p>)</span> <span class=o>-&gt;</span> <span class=n>List</span><span class=p>[</span><span class=nb>str</span><span class=p>]:</span>
<a id=__codelineno-0-44 name=__codelineno-0-44></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-45 name=__codelineno-0-45></a><span class=sd> Import modules set in</span>
<a id=__codelineno-0-46 name=__codelineno-0-46></a><span class=sd> [`COMPONENTS.libraries`](../settings#django_components.app_settings.ComponentsSettings.libraries)</span>
<a id=__codelineno-0-47 name=__codelineno-0-47></a><span class=sd> setting.</span>
<a id=__codelineno-0-48 name=__codelineno-0-48></a>
<a id=__codelineno-0-49 name=__codelineno-0-49></a><span class=sd> See [Autodiscovery](../../concepts/fundamentals/autodiscovery).</span>
<a id=__codelineno-0-50 name=__codelineno-0-50></a>
<a id=__codelineno-0-51 name=__codelineno-0-51></a><span class=sd> Args:</span>
<a id=__codelineno-0-52 name=__codelineno-0-52></a><span class=sd> map_module (Callable[[str], str], optional): Map the module paths with `map_module` function.\</span>
<a id=__codelineno-0-53 name=__codelineno-0-53></a><span class=sd> This serves as an escape hatch for when you need to use this function in tests.</span>
<a id=__codelineno-0-54 name=__codelineno-0-54></a>
<a id=__codelineno-0-55 name=__codelineno-0-55></a><span class=sd> Returns:</span>
<a id=__codelineno-0-56 name=__codelineno-0-56></a><span class=sd> List[str]: A list of module paths of imported files.</span>
<a id=__codelineno-0-57 name=__codelineno-0-57></a>
<a id=__codelineno-0-58 name=__codelineno-0-58></a><span class=sd> **Examples:**</span>
<a id=__codelineno-0-59 name=__codelineno-0-59></a>
<a id=__codelineno-0-60 name=__codelineno-0-60></a><span class=sd> Normal usage - load libraries after Django has loaded</span>
<a id=__codelineno-0-61 name=__codelineno-0-61></a><span class=sd> ```python</span>
<a id=__codelineno-0-62 name=__codelineno-0-62></a><span class=sd> from django_components import import_libraries</span>
<a id=__codelineno-0-63 name=__codelineno-0-63></a>
<a id=__codelineno-0-64 name=__codelineno-0-64></a><span class=sd> class MyAppConfig(AppConfig):</span>
<a id=__codelineno-0-65 name=__codelineno-0-65></a><span class=sd> def ready(self):</span>
<a id=__codelineno-0-66 name=__codelineno-0-66></a><span class=sd> import_libraries()</span>
<a id=__codelineno-0-67 name=__codelineno-0-67></a><span class=sd> ```</span>
<a id=__codelineno-0-68 name=__codelineno-0-68></a>
<a id=__codelineno-0-69 name=__codelineno-0-69></a><span class=sd> Potential usage in tests</span>
<a id=__codelineno-0-70 name=__codelineno-0-70></a><span class=sd> ```python</span>
<a id=__codelineno-0-71 name=__codelineno-0-71></a><span class=sd> from django_components import import_libraries</span>
<a id=__codelineno-0-72 name=__codelineno-0-72></a>
<a id=__codelineno-0-73 name=__codelineno-0-73></a><span class=sd> import_libraries(lambda path: path.replace(&quot;tests.&quot;, &quot;myapp.&quot;))</span>
<a id=__codelineno-0-74 name=__codelineno-0-74></a><span class=sd> ```</span>
<a id=__codelineno-0-75 name=__codelineno-0-75></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-76 name=__codelineno-0-76></a> <span class=kn>from</span> <span class=nn>django_components.app_settings</span> <span class=kn>import</span> <span class=n>app_settings</span>
<a id=__codelineno-0-77 name=__codelineno-0-77></a>
<a id=__codelineno-0-78 name=__codelineno-0-78></a> <span class=k>return</span> <span class=n>_import_modules</span><span class=p>(</span><span class=n>app_settings</span><span class=o>.</span><span class=n>LIBRARIES</span><span class=p>,</span> <span class=n>map_module</span><span class=p>)</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> </div> </div> </div> <div class="doc doc-object doc-module"> <h2 id=django_components.component class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-module"></code> <span class="doc doc-object-name doc-module-name">component</span> <a href=#django_components.component class=headerlink title="Permanent link">¤</a></h2> <div class="doc doc-contents "> <p><span class=doc-section-title>Classes:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.component.Component href=#django_components.component.Component>Component</a></code></b> <div class=doc-md-description> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.component.ComponentNode href=#django_components.component.ComponentNode>ComponentNode</a></code></b> <div class=doc-md-description> <p>Django.template.Node subclass that renders a django-components component</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.component.ComponentVars href=#django_components.component.ComponentVars>ComponentVars</a></code></b> <div class=doc-md-description> <p>Type for the variables available inside the component templates.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.component.ComponentView href=#django_components.component.ComponentView>ComponentView</a></code></b> <div class=doc-md-description> <p>Subclass of <code>django.views.View</code> where the <code>Component</code> instance is available</p> </div> </li> </ul> <div class="doc doc-children"> <div class="doc doc-object doc-class"> <h3 id=django_components.component.Component class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-class"></code> <span class="doc doc-object-name doc-class-name">Component</span> <a href=#django_components.component.Component class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>Component</span><span class=p>(</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a> <span class=n>registered_name</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a> <span class=n>component_id</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a> <span class=n>outer_context</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><span title=django.template.context.Context>Context</span></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a> <span class=n>registry</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-internal" title=django_components.component_registry.ComponentRegistry href=#django_components.component_registry.ComponentRegistry>ComponentRegistry</a></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-6 name=__codelineno-0-6 href=#__codelineno-0-6></a><span class=p>)</span>
</code></pre></div> <div class="doc doc-contents "> <p class="doc doc-class-bases"> Bases: <code><a class="autorefs autorefs-external" title=typing.Generic href=https://docs.python.org/3.12/library/typing.html#typing.Generic>Generic</a>[<span title=django_components.component.ArgsType>ArgsType</span>, <span title=django_components.component.KwargsType>KwargsType</span>, <span title=django_components.component.SlotsType>SlotsType</span>, <span title=django_components.component.DataType>DataType</span>, <span title=django_components.component.JsDataType>JsDataType</span>, <span title=django_components.component.CssDataType>CssDataType</span>]</code></p> <p><span class=doc-section-title>Methods:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.component.Component.as_view href=#django_components.component.Component.as_view>as_view</a></code></b> <div class=doc-md-description> <p>Shortcut for calling <code>Component.View.as_view</code> and passing component instance to it.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.component.Component.get_template href=#django_components.component.Component.get_template>get_template</a></code></b> <div class=doc-md-description> <p>Inlined Django template associated with this component. Can be a plain string or a Template instance.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.component.Component.get_template_name href=#django_components.component.Component.get_template_name>get_template_name</a></code></b> <div class=doc-md-description> <p>Filepath to the Django template associated with this component.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.component.Component.inject href=#django_components.component.Component.inject>inject</a></code></b> <div class=doc-md-description> <p>Use this method to retrieve the data that was passed to a <code>{% provide %}</code> tag</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.component.Component.on_render_after href=#django_components.component.Component.on_render_after>on_render_after</a></code></b> <div class=doc-md-description> <p>Hook that runs just after the component's template was rendered.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.component.Component.on_render_before href=#django_components.component.Component.on_render_before>on_render_before</a></code></b> <div class=doc-md-description> <p>Hook that runs just before the component's template is rendered.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.component.Component.render href=#django_components.component.Component.render>render</a></code></b> <div class=doc-md-description> <p>Render the component into a string.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.component.Component.render_to_response href=#django_components.component.Component.render_to_response>render_to_response</a></code></b> <div class=doc-md-description> <p>Render the component and wrap the content in the response class.</p> </div> </li> </ul> <p><span class=doc-section-title>Attributes:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.component.Component.Media href=#django_components.component.Component.Media>Media</a></code></b> <div class=doc-md-description> <p>Defines JS and CSS media files associated with this component.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.component.Component.css href=#django_components.component.Component.css>css</a></code></b> (<code><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>]</code>) <div class=doc-md-description> <p>Inlined CSS associated with this component.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.component.Component.input href=#django_components.component.Component.input>input</a></code></b> (<code><span title=django_components.component.RenderInput>RenderInput</span>[<span title=django_components.component.ArgsType>ArgsType</span>, <span title=django_components.component.KwargsType>KwargsType</span>, <span title=django_components.component.SlotsType>SlotsType</span>]</code>) <div class=doc-md-description> <p>Input holds the data (like arg, kwargs, slots) that were passsed to</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.component.Component.is_filled href=#django_components.component.Component.is_filled>is_filled</a></code></b> (<code><a class="autorefs autorefs-internal" title=django_components.slots.SlotIsFilled href=#django_components.slots.SlotIsFilled>SlotIsFilled</a></code>) <div class=doc-md-description> <p>Dictionary describing which slots have or have not been filled.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.component.Component.js href=#django_components.component.Component.js>js</a></code></b> (<code><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>]</code>) <div class=doc-md-description> <p>Inlined JS associated with this component.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.component.Component.media href=#django_components.component.Component.media>media</a></code></b> (<code><a class="autorefs autorefs-internal" title=django_components.component.Component.Media href=#django_components.component.Component.Media>Media</a></code>) <div class=doc-md-description> <p>Normalized definition of JS and CSS media files associated with this component.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.component.Component.response_class href=#django_components.component.Component.response_class>response_class</a></code></b> <div class=doc-md-description> <p>This allows to configure what class is used to generate response from <code>render_to_response</code></p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.component.Component.template href=#django_components.component.Component.template>template</a></code></b> (<code><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a>[<a class="autorefs autorefs-external" title=typing.Union href=https://docs.python.org/3.12/library/typing.html#typing.Union>Union</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>, <span title=django.template.base.Template>Template</span>]]</code>) <div class=doc-md-description> <p>Inlined Django template associated with this component. Can be a plain string or a Template instance.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.component.Component.template_name href=#django_components.component.Component.template_name>template_name</a></code></b> (<code><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>]</code>) <div class=doc-md-description> <p>Filepath to the Django template associated with this component.</p> </div> </li> </ul> <details class=quote> <summary>Source code in <code>src/django_components/component.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-287>287</a></span>
<span class=normal><a href=#__codelineno-0-288>288</a></span>
<span class=normal><a href=#__codelineno-0-289>289</a></span>
<span class=normal><a href=#__codelineno-0-290>290</a></span>
<span class=normal><a href=#__codelineno-0-291>291</a></span>
<span class=normal><a href=#__codelineno-0-292>292</a></span>
<span class=normal><a href=#__codelineno-0-293>293</a></span>
<span class=normal><a href=#__codelineno-0-294>294</a></span>
<span class=normal><a href=#__codelineno-0-295>295</a></span>
<span class=normal><a href=#__codelineno-0-296>296</a></span>
<span class=normal><a href=#__codelineno-0-297>297</a></span>
<span class=normal><a href=#__codelineno-0-298>298</a></span>
<span class=normal><a href=#__codelineno-0-299>299</a></span>
<span class=normal><a href=#__codelineno-0-300>300</a></span>
<span class=normal><a href=#__codelineno-0-301>301</a></span>
<span class=normal><a href=#__codelineno-0-302>302</a></span>
<span class=normal><a href=#__codelineno-0-303>303</a></span>
<span class=normal><a href=#__codelineno-0-304>304</a></span>
<span class=normal><a href=#__codelineno-0-305>305</a></span>
<span class=normal><a href=#__codelineno-0-306>306</a></span>
<span class=normal><a href=#__codelineno-0-307>307</a></span>
<span class=normal><a href=#__codelineno-0-308>308</a></span>
<span class=normal><a href=#__codelineno-0-309>309</a></span>
<span class=normal><a href=#__codelineno-0-310>310</a></span>
<span class=normal><a href=#__codelineno-0-311>311</a></span>
<span class=normal><a href=#__codelineno-0-312>312</a></span>
<span class=normal><a href=#__codelineno-0-313>313</a></span>
<span class=normal><a href=#__codelineno-0-314>314</a></span>
<span class=normal><a href=#__codelineno-0-315>315</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-287 name=__codelineno-0-287></a><span class=k>def</span> <span class=fm>__init__</span><span class=p>(</span>
<a id=__codelineno-0-288 name=__codelineno-0-288></a> <span class=bp>self</span><span class=p>,</span>
<a id=__codelineno-0-289 name=__codelineno-0-289></a> <span class=n>registered_name</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=nb>str</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-290 name=__codelineno-0-290></a> <span class=n>component_id</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=nb>str</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-291 name=__codelineno-0-291></a> <span class=n>outer_context</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>Context</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-292 name=__codelineno-0-292></a> <span class=n>registry</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>ComponentRegistry</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span> <span class=c1># noqa F811</span>
<a id=__codelineno-0-293 name=__codelineno-0-293></a><span class=p>):</span>
<a id=__codelineno-0-294 name=__codelineno-0-294></a> <span class=c1># When user first instantiates the component class before calling</span>
<a id=__codelineno-0-295 name=__codelineno-0-295></a> <span class=c1># `render` or `render_to_response`, then we want to allow the render</span>
<a id=__codelineno-0-296 name=__codelineno-0-296></a> <span class=c1># function to make use of the instantiated object.</span>
<a id=__codelineno-0-297 name=__codelineno-0-297></a> <span class=c1>#</span>
<a id=__codelineno-0-298 name=__codelineno-0-298></a> <span class=c1># So while `MyComp.render()` creates a new instance of MyComp internally,</span>
<a id=__codelineno-0-299 name=__codelineno-0-299></a> <span class=c1># if we do `MyComp(registered_name=&quot;abc&quot;).render()`, then we use the</span>
<a id=__codelineno-0-300 name=__codelineno-0-300></a> <span class=c1># already-instantiated object.</span>
<a id=__codelineno-0-301 name=__codelineno-0-301></a> <span class=c1>#</span>
<a id=__codelineno-0-302 name=__codelineno-0-302></a> <span class=c1># To achieve that, we want to re-assign the class methods as instance methods.</span>
<a id=__codelineno-0-303 name=__codelineno-0-303></a> <span class=c1># For that we have to &quot;unwrap&quot; the class methods via __func__.</span>
<a id=__codelineno-0-304 name=__codelineno-0-304></a> <span class=c1># See https://stackoverflow.com/a/76706399/9788634</span>
<a id=__codelineno-0-305 name=__codelineno-0-305></a> <span class=bp>self</span><span class=o>.</span><span class=n>render_to_response</span> <span class=o>=</span> <span class=n>types</span><span class=o>.</span><span class=n>MethodType</span><span class=p>(</span><span class=bp>self</span><span class=o>.</span><span class=vm>__class__</span><span class=o>.</span><span class=n>render_to_response</span><span class=o>.</span><span class=vm>__func__</span><span class=p>,</span> <span class=bp>self</span><span class=p>)</span> <span class=c1># type: ignore</span>
<a id=__codelineno-0-306 name=__codelineno-0-306></a> <span class=bp>self</span><span class=o>.</span><span class=n>render</span> <span class=o>=</span> <span class=n>types</span><span class=o>.</span><span class=n>MethodType</span><span class=p>(</span><span class=bp>self</span><span class=o>.</span><span class=vm>__class__</span><span class=o>.</span><span class=n>render</span><span class=o>.</span><span class=vm>__func__</span><span class=p>,</span> <span class=bp>self</span><span class=p>)</span> <span class=c1># type: ignore</span>
<a id=__codelineno-0-307 name=__codelineno-0-307></a> <span class=bp>self</span><span class=o>.</span><span class=n>as_view</span> <span class=o>=</span> <span class=n>types</span><span class=o>.</span><span class=n>MethodType</span><span class=p>(</span><span class=bp>self</span><span class=o>.</span><span class=vm>__class__</span><span class=o>.</span><span class=n>as_view</span><span class=o>.</span><span class=vm>__func__</span><span class=p>,</span> <span class=bp>self</span><span class=p>)</span> <span class=c1># type: ignore</span>
<a id=__codelineno-0-308 name=__codelineno-0-308></a>
<a id=__codelineno-0-309 name=__codelineno-0-309></a> <span class=bp>self</span><span class=o>.</span><span class=n>registered_name</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=nb>str</span><span class=p>]</span> <span class=o>=</span> <span class=n>registered_name</span>
<a id=__codelineno-0-310 name=__codelineno-0-310></a> <span class=bp>self</span><span class=o>.</span><span class=n>outer_context</span><span class=p>:</span> <span class=n>Context</span> <span class=o>=</span> <span class=n>outer_context</span> <span class=ow>or</span> <span class=n>Context</span><span class=p>()</span>
<a id=__codelineno-0-311 name=__codelineno-0-311></a> <span class=bp>self</span><span class=o>.</span><span class=n>component_id</span> <span class=o>=</span> <span class=n>component_id</span> <span class=ow>or</span> <span class=n>gen_id</span><span class=p>()</span>
<a id=__codelineno-0-312 name=__codelineno-0-312></a> <span class=bp>self</span><span class=o>.</span><span class=n>registry</span> <span class=o>=</span> <span class=n>registry</span> <span class=ow>or</span> <span class=n>registry_</span>
<a id=__codelineno-0-313 name=__codelineno-0-313></a> <span class=bp>self</span><span class=o>.</span><span class=n>_render_stack</span><span class=p>:</span> <span class=n>Deque</span><span class=p>[</span><span class=n>RenderStackItem</span><span class=p>[</span><span class=n>ArgsType</span><span class=p>,</span> <span class=n>KwargsType</span><span class=p>,</span> <span class=n>SlotsType</span><span class=p>]]</span> <span class=o>=</span> <span class=n>deque</span><span class=p>()</span>
<a id=__codelineno-0-314 name=__codelineno-0-314></a> <span class=c1># None == uninitialized, False == No types, Tuple == types</span>
<a id=__codelineno-0-315 name=__codelineno-0-315></a> <span class=bp>self</span><span class=o>.</span><span class=n>_types</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>Union</span><span class=p>[</span><span class=n>Tuple</span><span class=p>[</span><span class=n>Any</span><span class=p>,</span> <span class=n>Any</span><span class=p>,</span> <span class=n>Any</span><span class=p>,</span> <span class=n>Any</span><span class=p>,</span> <span class=n>Any</span><span class=p>,</span> <span class=n>Any</span><span class=p>],</span> <span class=n>Literal</span><span class=p>[</span><span class=kc>False</span><span class=p>]]]</span> <span class=o>=</span> <span class=kc>None</span>
</code></pre></div></td></tr></table></div> </details> <div class="doc doc-children"> <div class="doc doc-object doc-attribute"> <h4 id=django_components.component.Component.Media class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">Media</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.component.Component.Media class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>Media</span> <span class=o>=</span> <span class=n><a class="autorefs autorefs-internal" title=django_components.component_media.ComponentMediaInput href=#django_components.component_media.ComponentMediaInput>ComponentMediaInput</a></span>
</code></pre></div> <div class="doc doc-contents "> <p>Defines JS and CSS media files associated with this component.</p> </div> </div> <div class="doc doc-object doc-attribute"> <h4 id=django_components.component.Component.css class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">css</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.component.Component.css class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>css</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>Inlined CSS associated with this component.</p> </div> </div> <div class="doc doc-object doc-attribute"> <h4 id=django_components.component.Component.input class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">input</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-property"><code>property</code></small> </span> <a href=#django_components.component.Component.input class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nb>input</span><span class=p>:</span> <span class=n><span title=django_components.component.RenderInput>RenderInput</span></span><span class=p>[</span><span class=n><span title=django_components.component.ArgsType>ArgsType</span></span><span class=p>,</span> <span class=n><span title=django_components.component.KwargsType>KwargsType</span></span><span class=p>,</span> <span class=n><span title=django_components.component.SlotsType>SlotsType</span></span><span class=p>]</span>
</code></pre></div> <div class="doc doc-contents "> <p>Input holds the data (like arg, kwargs, slots) that were passsed to the current execution of the <code>render</code> method.</p> </div> </div> <div class="doc doc-object doc-attribute"> <h4 id=django_components.component.Component.is_filled class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">is_filled</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-property"><code>property</code></small> </span> <a href=#django_components.component.Component.is_filled class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>is_filled</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-internal" title=django_components.slots.SlotIsFilled href=#django_components.slots.SlotIsFilled>SlotIsFilled</a></span>
</code></pre></div> <div class="doc doc-contents "> <p>Dictionary describing which slots have or have not been filled.</p> <p>This attribute is available for use only within the template as <code>{{ component_vars.is_filled.slot_name }}</code>, and within <code>on_render_before</code> and <code>on_render_after</code> hooks.</p> </div> </div> <div class="doc doc-object doc-attribute"> <h4 id=django_components.component.Component.js class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">js</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.component.Component.js class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>js</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>Inlined JS associated with this component.</p> </div> </div> <div class="doc doc-object doc-attribute"> <h4 id=django_components.component.Component.media class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">media</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.component.Component.media class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>media</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-internal" title=django_components.component.Component.Media href=#django_components.component.Component.Media>Media</a></span>
</code></pre></div> <div class="doc doc-contents "> <p>Normalized definition of JS and CSS media files associated with this component.</p> <p>NOTE: This field is generated from Component.Media class.</p> </div> </div> <div class="doc doc-object doc-attribute"> <h4 id=django_components.component.Component.response_class class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">response_class</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.component.Component.response_class class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>response_class</span> <span class=o>=</span> <span class=n><a class="autorefs autorefs-external" title=django.http.HttpResponse href=https://docs.djangoproject.com/en/5.0/ref/request-response/#django.http.HttpResponse>HttpResponse</a></span>
</code></pre></div> <div class="doc doc-contents "> <p>This allows to configure what class is used to generate response from <code>render_to_response</code></p> </div> </div> <div class="doc doc-object doc-attribute"> <h4 id=django_components.component.Component.template class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">template</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.component.Component.template class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>template</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Union href=https://docs.python.org/3.12/library/typing.html#typing.Union>Union</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span> <span class=n><span title=django.template.base.Template>Template</span></span><span class=p>]]</span> <span class=o>=</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>Inlined Django template associated with this component. Can be a plain string or a Template instance.</p> <p>Only one of <code>template_name</code>, <code>get_template_name</code>, <code>template</code> or <code>get_template</code> must be defined.</p> </div> </div> <div class="doc doc-object doc-attribute"> <h4 id=django_components.component.Component.template_name class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">template_name</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.component.Component.template_name class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>template_name</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>Filepath to the Django template associated with this component.</p> <p>The filepath must be relative to either the file where the component class was defined, or one of the roots of <code>STATIFILES_DIRS</code>.</p> <p>Only one of <code>template_name</code>, <code>get_template_name</code>, <code>template</code> or <code>get_template</code> must be defined.</p> </div> </div> <div class="doc doc-object doc-function"> <h4 id=django_components.component.Component.as_view class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">as_view</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-classmethod"><code>classmethod</code></small> </span> <a href=#django_components.component.Component.as_view class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>as_view</span><span class=p>(</span><span class=o>**</span><span class=n>initkwargs</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Any href=https://docs.python.org/3.12/library/typing.html#typing.Any>Any</a></span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><span title=django_components.component.ViewFn>ViewFn</span></span>
</code></pre></div> <div class="doc doc-contents "> <p>Shortcut for calling <code>Component.View.as_view</code> and passing component instance to it.</p> <details class=quote> <summary>Source code in <code>src/django_components/component.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-460>460</a></span>
<span class=normal><a href=#__codelineno-0-461>461</a></span>
<span class=normal><a href=#__codelineno-0-462>462</a></span>
<span class=normal><a href=#__codelineno-0-463>463</a></span>
<span class=normal><a href=#__codelineno-0-464>464</a></span>
<span class=normal><a href=#__codelineno-0-465>465</a></span>
<span class=normal><a href=#__codelineno-0-466>466</a></span>
<span class=normal><a href=#__codelineno-0-467>467</a></span>
<span class=normal><a href=#__codelineno-0-468>468</a></span>
<span class=normal><a href=#__codelineno-0-469>469</a></span>
<span class=normal><a href=#__codelineno-0-470>470</a></span>
<span class=normal><a href=#__codelineno-0-471>471</a></span>
<span class=normal><a href=#__codelineno-0-472>472</a></span>
<span class=normal><a href=#__codelineno-0-473>473</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-460 name=__codelineno-0-460></a><span class=nd>@classmethod</span>
<a id=__codelineno-0-461 name=__codelineno-0-461></a><span class=k>def</span> <span class=nf>as_view</span><span class=p>(</span><span class=bp>cls</span><span class=p>,</span> <span class=o>**</span><span class=n>initkwargs</span><span class=p>:</span> <span class=n>Any</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n>ViewFn</span><span class=p>:</span>
<a id=__codelineno-0-462 name=__codelineno-0-462></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-463 name=__codelineno-0-463></a><span class=sd> Shortcut for calling `Component.View.as_view` and passing component instance to it.</span>
<a id=__codelineno-0-464 name=__codelineno-0-464></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-465 name=__codelineno-0-465></a> <span class=c1># This method may be called as class method or as instance method.</span>
<a id=__codelineno-0-466 name=__codelineno-0-466></a> <span class=c1># If called as class method, create a new instance.</span>
<a id=__codelineno-0-467 name=__codelineno-0-467></a> <span class=k>if</span> <span class=nb>isinstance</span><span class=p>(</span><span class=bp>cls</span><span class=p>,</span> <span class=n>Component</span><span class=p>):</span>
<a id=__codelineno-0-468 name=__codelineno-0-468></a> <span class=n>comp</span><span class=p>:</span> <span class=n>Component</span> <span class=o>=</span> <span class=bp>cls</span>
<a id=__codelineno-0-469 name=__codelineno-0-469></a> <span class=k>else</span><span class=p>:</span>
<a id=__codelineno-0-470 name=__codelineno-0-470></a> <span class=n>comp</span> <span class=o>=</span> <span class=bp>cls</span><span class=p>()</span>
<a id=__codelineno-0-471 name=__codelineno-0-471></a>
<a id=__codelineno-0-472 name=__codelineno-0-472></a> <span class=c1># Allow the View class to access this component via `self.component`</span>
<a id=__codelineno-0-473 name=__codelineno-0-473></a> <span class=k>return</span> <span class=n>comp</span><span class=o>.</span><span class=n>View</span><span class=o>.</span><span class=n>as_view</span><span class=p>(</span><span class=o>**</span><span class=n>initkwargs</span><span class=p>,</span> <span class=n>component</span><span class=o>=</span><span class=n>comp</span><span class=p>)</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h4 id=django_components.component.Component.get_template class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">get_template</span> <a href=#django_components.component.Component.get_template class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>get_template</span><span class=p>(</span><span class=n>context</span><span class=p>:</span> <span class=n><span title=django.template.context.Context>Context</span></span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Union href=https://docs.python.org/3.12/library/typing.html#typing.Union>Union</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span> <span class=n><span title=django.template.base.Template>Template</span></span><span class=p>]]</span>
</code></pre></div> <div class="doc doc-contents "> <p>Inlined Django template associated with this component. Can be a plain string or a Template instance.</p> <p>Only one of <code>template_name</code>, <code>get_template_name</code>, <code>template</code> or <code>get_template</code> must be defined.</p> <details class=quote> <summary>Source code in <code>src/django_components/component.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-227>227</a></span>
<span class=normal><a href=#__codelineno-0-228>228</a></span>
<span class=normal><a href=#__codelineno-0-229>229</a></span>
<span class=normal><a href=#__codelineno-0-230>230</a></span>
<span class=normal><a href=#__codelineno-0-231>231</a></span>
<span class=normal><a href=#__codelineno-0-232>232</a></span>
<span class=normal><a href=#__codelineno-0-233>233</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-227 name=__codelineno-0-227></a><span class=k>def</span> <span class=nf>get_template</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>context</span><span class=p>:</span> <span class=n>Context</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n>Optional</span><span class=p>[</span><span class=n>Union</span><span class=p>[</span><span class=nb>str</span><span class=p>,</span> <span class=n>Template</span><span class=p>]]:</span>
<a id=__codelineno-0-228 name=__codelineno-0-228></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-229 name=__codelineno-0-229></a><span class=sd> Inlined Django template associated with this component. Can be a plain string or a Template instance.</span>
<a id=__codelineno-0-230 name=__codelineno-0-230></a>
<a id=__codelineno-0-231 name=__codelineno-0-231></a><span class=sd> Only one of `template_name`, `get_template_name`, `template` or `get_template` must be defined.</span>
<a id=__codelineno-0-232 name=__codelineno-0-232></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-233 name=__codelineno-0-233></a> <span class=k>return</span> <span class=kc>None</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h4 id=django_components.component.Component.get_template_name class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">get_template_name</span> <a href=#django_components.component.Component.get_template_name class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>get_template_name</span><span class=p>(</span><span class=n>context</span><span class=p>:</span> <span class=n><span title=django.template.context.Context>Context</span></span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]</span>
</code></pre></div> <div class="doc doc-contents "> <p>Filepath to the Django template associated with this component.</p> <p>The filepath must be relative to either the file where the component class was defined, or one of the roots of <code>STATIFILES_DIRS</code>.</p> <p>Only one of <code>template_name</code>, <code>get_template_name</code>, <code>template</code> or <code>get_template</code> must be defined.</p> <details class=quote> <summary>Source code in <code>src/django_components/component.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-209>209</a></span>
<span class=normal><a href=#__codelineno-0-210>210</a></span>
<span class=normal><a href=#__codelineno-0-211>211</a></span>
<span class=normal><a href=#__codelineno-0-212>212</a></span>
<span class=normal><a href=#__codelineno-0-213>213</a></span>
<span class=normal><a href=#__codelineno-0-214>214</a></span>
<span class=normal><a href=#__codelineno-0-215>215</a></span>
<span class=normal><a href=#__codelineno-0-216>216</a></span>
<span class=normal><a href=#__codelineno-0-217>217</a></span>
<span class=normal><a href=#__codelineno-0-218>218</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-209 name=__codelineno-0-209></a><span class=k>def</span> <span class=nf>get_template_name</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>context</span><span class=p>:</span> <span class=n>Context</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-0-210 name=__codelineno-0-210></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-211 name=__codelineno-0-211></a><span class=sd> Filepath to the Django template associated with this component.</span>
<a id=__codelineno-0-212 name=__codelineno-0-212></a>
<a id=__codelineno-0-213 name=__codelineno-0-213></a><span class=sd> The filepath must be relative to either the file where the component class was defined,</span>
<a id=__codelineno-0-214 name=__codelineno-0-214></a><span class=sd> or one of the roots of `STATIFILES_DIRS`.</span>
<a id=__codelineno-0-215 name=__codelineno-0-215></a>
<a id=__codelineno-0-216 name=__codelineno-0-216></a><span class=sd> Only one of `template_name`, `get_template_name`, `template` or `get_template` must be defined.</span>
<a id=__codelineno-0-217 name=__codelineno-0-217></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-218 name=__codelineno-0-218></a> <span class=k>return</span> <span class=kc>None</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h4 id=django_components.component.Component.inject class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">inject</span> <a href=#django_components.component.Component.inject class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>inject</span><span class=p>(</span><span class=n>key</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span> <span class=n>default</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Any href=https://docs.python.org/3.12/library/typing.html#typing.Any>Any</a></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-external" title=typing.Any href=https://docs.python.org/3.12/library/typing.html#typing.Any>Any</a></span>
</code></pre></div> <div class="doc doc-contents "> <p>Use this method to retrieve the data that was passed to a <code>{% provide %}</code> tag with the corresponding key.</p> <p>To retrieve the data, <code>inject()</code> must be called inside a component that's inside the <code>{% provide %}</code> tag.</p> <p>You may also pass a default that will be used if the <code>provide</code> tag with given key was NOT found.</p> <p>This method mut be used inside the <code>get_context_data()</code> method and raises an error if called elsewhere.</p> <p>Example:</p> <p>Given this template: <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=cp>{%</span> <span class=k>provide</span> <span class=s2>&quot;provider&quot;</span> <span class=nv>hello</span><span class=o>=</span><span class=s2>&quot;world&quot;</span> <span class=cp>%}</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a><span class=x> </span><span class=cp>{%</span> <span class=k>component</span> <span class=s2>&quot;my_comp&quot;</span> <span class=cp>%}</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=x> </span><span class=cp>{%</span> <span class=k>endcomponent</span> <span class=cp>%}</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a><span class=cp>{%</span> <span class=k>endprovide</span> <span class=cp>%}</span>
</code></pre></div></p> <p>And given this definition of "my_comp" component: <div class=highlight><pre><span></span><code><a id=__codelineno-1-1 name=__codelineno-1-1 href=#__codelineno-1-1></a><span class=kn>from</span> <span class=nn>django_components</span> <span class=kn>import</span> <span class=n>Component</span><span class=p>,</span> <span class=n>register</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=nd>@register</span><span class=p>(</span><span class=s2>&quot;my_comp&quot;</span><span class=p>)</span>
<a id=__codelineno-1-4 name=__codelineno-1-4 href=#__codelineno-1-4></a><span class=k>class</span> <span class=nc>MyComp</span><span class=p>(</span><span class=n>Component</span><span class=p>):</span>
<a id=__codelineno-1-5 name=__codelineno-1-5 href=#__codelineno-1-5></a> <span class=n>template</span> <span class=o>=</span> <span class=s2>&quot;hi {{ data.hello }}!&quot;</span>
<a id=__codelineno-1-6 name=__codelineno-1-6 href=#__codelineno-1-6></a> <span class=k>def</span> <span class=nf>get_context_data</span><span class=p>(</span><span class=bp>self</span><span class=p>):</span>
<a id=__codelineno-1-7 name=__codelineno-1-7 href=#__codelineno-1-7></a> <span class=n>data</span> <span class=o>=</span> <span class=bp>self</span><span class=o>.</span><span class=n>inject</span><span class=p>(</span><span class=s2>&quot;provider&quot;</span><span class=p>)</span>
<a id=__codelineno-1-8 name=__codelineno-1-8 href=#__codelineno-1-8></a> <span class=k>return</span> <span class=p>{</span><span class=s2>&quot;data&quot;</span><span class=p>:</span> <span class=n>data</span><span class=p>}</span>
</code></pre></div></p> <p>This renders into: <div class=highlight><pre><span></span><code><a id=__codelineno-2-1 name=__codelineno-2-1 href=#__codelineno-2-1></a>hi world!
</code></pre></div></p> <p>As the <code>{{ data.hello }}</code> is taken from the "provider".</p> <details class=quote> <summary>Source code in <code>src/django_components/component.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-410>410</a></span>
<span class=normal><a href=#__codelineno-0-411>411</a></span>
<span class=normal><a href=#__codelineno-0-412>412</a></span>
<span class=normal><a href=#__codelineno-0-413>413</a></span>
<span class=normal><a href=#__codelineno-0-414>414</a></span>
<span class=normal><a href=#__codelineno-0-415>415</a></span>
<span class=normal><a href=#__codelineno-0-416>416</a></span>
<span class=normal><a href=#__codelineno-0-417>417</a></span>
<span class=normal><a href=#__codelineno-0-418>418</a></span>
<span class=normal><a href=#__codelineno-0-419>419</a></span>
<span class=normal><a href=#__codelineno-0-420>420</a></span>
<span class=normal><a href=#__codelineno-0-421>421</a></span>
<span class=normal><a href=#__codelineno-0-422>422</a></span>
<span class=normal><a href=#__codelineno-0-423>423</a></span>
<span class=normal><a href=#__codelineno-0-424>424</a></span>
<span class=normal><a href=#__codelineno-0-425>425</a></span>
<span class=normal><a href=#__codelineno-0-426>426</a></span>
<span class=normal><a href=#__codelineno-0-427>427</a></span>
<span class=normal><a href=#__codelineno-0-428>428</a></span>
<span class=normal><a href=#__codelineno-0-429>429</a></span>
<span class=normal><a href=#__codelineno-0-430>430</a></span>
<span class=normal><a href=#__codelineno-0-431>431</a></span>
<span class=normal><a href=#__codelineno-0-432>432</a></span>
<span class=normal><a href=#__codelineno-0-433>433</a></span>
<span class=normal><a href=#__codelineno-0-434>434</a></span>
<span class=normal><a href=#__codelineno-0-435>435</a></span>
<span class=normal><a href=#__codelineno-0-436>436</a></span>
<span class=normal><a href=#__codelineno-0-437>437</a></span>
<span class=normal><a href=#__codelineno-0-438>438</a></span>
<span class=normal><a href=#__codelineno-0-439>439</a></span>
<span class=normal><a href=#__codelineno-0-440>440</a></span>
<span class=normal><a href=#__codelineno-0-441>441</a></span>
<span class=normal><a href=#__codelineno-0-442>442</a></span>
<span class=normal><a href=#__codelineno-0-443>443</a></span>
<span class=normal><a href=#__codelineno-0-444>444</a></span>
<span class=normal><a href=#__codelineno-0-445>445</a></span>
<span class=normal><a href=#__codelineno-0-446>446</a></span>
<span class=normal><a href=#__codelineno-0-447>447</a></span>
<span class=normal><a href=#__codelineno-0-448>448</a></span>
<span class=normal><a href=#__codelineno-0-449>449</a></span>
<span class=normal><a href=#__codelineno-0-450>450</a></span>
<span class=normal><a href=#__codelineno-0-451>451</a></span>
<span class=normal><a href=#__codelineno-0-452>452</a></span>
<span class=normal><a href=#__codelineno-0-453>453</a></span>
<span class=normal><a href=#__codelineno-0-454>454</a></span>
<span class=normal><a href=#__codelineno-0-455>455</a></span>
<span class=normal><a href=#__codelineno-0-456>456</a></span>
<span class=normal><a href=#__codelineno-0-457>457</a></span>
<span class=normal><a href=#__codelineno-0-458>458</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-410 name=__codelineno-0-410></a><span class=k>def</span> <span class=nf>inject</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>key</span><span class=p>:</span> <span class=nb>str</span><span class=p>,</span> <span class=n>default</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>Any</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n>Any</span><span class=p>:</span>
<a id=__codelineno-0-411 name=__codelineno-0-411></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-412 name=__codelineno-0-412></a><span class=sd> Use this method to retrieve the data that was passed to a `{% provide %}` tag</span>
<a id=__codelineno-0-413 name=__codelineno-0-413></a><span class=sd> with the corresponding key.</span>
<a id=__codelineno-0-414 name=__codelineno-0-414></a>
<a id=__codelineno-0-415 name=__codelineno-0-415></a><span class=sd> To retrieve the data, `inject()` must be called inside a component that&#39;s</span>
<a id=__codelineno-0-416 name=__codelineno-0-416></a><span class=sd> inside the `{% provide %}` tag.</span>
<a id=__codelineno-0-417 name=__codelineno-0-417></a>
<a id=__codelineno-0-418 name=__codelineno-0-418></a><span class=sd> You may also pass a default that will be used if the `provide` tag with given</span>
<a id=__codelineno-0-419 name=__codelineno-0-419></a><span class=sd> key was NOT found.</span>
<a id=__codelineno-0-420 name=__codelineno-0-420></a>
<a id=__codelineno-0-421 name=__codelineno-0-421></a><span class=sd> This method mut be used inside the `get_context_data()` method and raises</span>
<a id=__codelineno-0-422 name=__codelineno-0-422></a><span class=sd> an error if called elsewhere.</span>
<a id=__codelineno-0-423 name=__codelineno-0-423></a>
<a id=__codelineno-0-424 name=__codelineno-0-424></a><span class=sd> Example:</span>
<a id=__codelineno-0-425 name=__codelineno-0-425></a>
<a id=__codelineno-0-426 name=__codelineno-0-426></a><span class=sd> Given this template:</span>
<a id=__codelineno-0-427 name=__codelineno-0-427></a><span class=sd> ```django</span>
<a id=__codelineno-0-428 name=__codelineno-0-428></a><span class=sd> {% provide &quot;provider&quot; hello=&quot;world&quot; %}</span>
<a id=__codelineno-0-429 name=__codelineno-0-429></a><span class=sd> {% component &quot;my_comp&quot; %}</span>
<a id=__codelineno-0-430 name=__codelineno-0-430></a><span class=sd> {% endcomponent %}</span>
<a id=__codelineno-0-431 name=__codelineno-0-431></a><span class=sd> {% endprovide %}</span>
<a id=__codelineno-0-432 name=__codelineno-0-432></a><span class=sd> ```</span>
<a id=__codelineno-0-433 name=__codelineno-0-433></a>
<a id=__codelineno-0-434 name=__codelineno-0-434></a><span class=sd> And given this definition of &quot;my_comp&quot; component:</span>
<a id=__codelineno-0-435 name=__codelineno-0-435></a><span class=sd> ```py</span>
<a id=__codelineno-0-436 name=__codelineno-0-436></a><span class=sd> from django_components import Component, register</span>
<a id=__codelineno-0-437 name=__codelineno-0-437></a>
<a id=__codelineno-0-438 name=__codelineno-0-438></a><span class=sd> @register(&quot;my_comp&quot;)</span>
<a id=__codelineno-0-439 name=__codelineno-0-439></a><span class=sd> class MyComp(Component):</span>
<a id=__codelineno-0-440 name=__codelineno-0-440></a><span class=sd> template = &quot;hi {{ data.hello }}!&quot;</span>
<a id=__codelineno-0-441 name=__codelineno-0-441></a><span class=sd> def get_context_data(self):</span>
<a id=__codelineno-0-442 name=__codelineno-0-442></a><span class=sd> data = self.inject(&quot;provider&quot;)</span>
<a id=__codelineno-0-443 name=__codelineno-0-443></a><span class=sd> return {&quot;data&quot;: data}</span>
<a id=__codelineno-0-444 name=__codelineno-0-444></a><span class=sd> ```</span>
<a id=__codelineno-0-445 name=__codelineno-0-445></a>
<a id=__codelineno-0-446 name=__codelineno-0-446></a><span class=sd> This renders into:</span>
<a id=__codelineno-0-447 name=__codelineno-0-447></a><span class=sd> ```</span>
<a id=__codelineno-0-448 name=__codelineno-0-448></a><span class=sd> hi world!</span>
<a id=__codelineno-0-449 name=__codelineno-0-449></a><span class=sd> ```</span>
<a id=__codelineno-0-450 name=__codelineno-0-450></a>
<a id=__codelineno-0-451 name=__codelineno-0-451></a><span class=sd> As the `{{ data.hello }}` is taken from the &quot;provider&quot;.</span>
<a id=__codelineno-0-452 name=__codelineno-0-452></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-453 name=__codelineno-0-453></a> <span class=k>if</span> <span class=bp>self</span><span class=o>.</span><span class=n>input</span> <span class=ow>is</span> <span class=kc>None</span><span class=p>:</span>
<a id=__codelineno-0-454 name=__codelineno-0-454></a> <span class=k>raise</span> <span class=ne>RuntimeError</span><span class=p>(</span>
<a id=__codelineno-0-455 name=__codelineno-0-455></a> <span class=sa>f</span><span class=s2>&quot;Method &#39;inject()&#39; of component &#39;</span><span class=si>{</span><span class=bp>self</span><span class=o>.</span><span class=n>name</span><span class=si>}</span><span class=s2>&#39; was called outside of &#39;get_context_data()&#39;&quot;</span>
<a id=__codelineno-0-456 name=__codelineno-0-456></a> <span class=p>)</span>
<a id=__codelineno-0-457 name=__codelineno-0-457></a>
<a id=__codelineno-0-458 name=__codelineno-0-458></a> <span class=k>return</span> <span class=n>get_injected_context_var</span><span class=p>(</span><span class=bp>self</span><span class=o>.</span><span class=n>name</span><span class=p>,</span> <span class=bp>self</span><span class=o>.</span><span class=n>input</span><span class=o>.</span><span class=n>context</span><span class=p>,</span> <span class=n>key</span><span class=p>,</span> <span class=n>default</span><span class=p>)</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h4 id=django_components.component.Component.on_render_after class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">on_render_after</span> <a href=#django_components.component.Component.on_render_after class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>on_render_after</span><span class=p>(</span><span class=n>context</span><span class=p>:</span> <span class=n><span title=django.template.context.Context>Context</span></span><span class=p>,</span> <span class=n>template</span><span class=p>:</span> <span class=n><span title=django.template.base.Template>Template</span></span><span class=p>,</span> <span class=n>content</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><span title=django_components.slots.SlotResult>SlotResult</span></span><span class=p>]</span>
</code></pre></div> <div class="doc doc-contents "> <p>Hook that runs just after the component's template was rendered. It receives the rendered output as the last argument.</p> <p>You can use this hook to access the context or the template, but modifying them won't have any effect.</p> <p>To override the content that gets rendered, you can return a string or SafeString from this hook.</p> <details class=quote> <summary>Source code in <code>src/django_components/component.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-268>268</a></span>
<span class=normal><a href=#__codelineno-0-269>269</a></span>
<span class=normal><a href=#__codelineno-0-270>270</a></span>
<span class=normal><a href=#__codelineno-0-271>271</a></span>
<span class=normal><a href=#__codelineno-0-272>272</a></span>
<span class=normal><a href=#__codelineno-0-273>273</a></span>
<span class=normal><a href=#__codelineno-0-274>274</a></span>
<span class=normal><a href=#__codelineno-0-275>275</a></span>
<span class=normal><a href=#__codelineno-0-276>276</a></span>
<span class=normal><a href=#__codelineno-0-277>277</a></span>
<span class=normal><a href=#__codelineno-0-278>278</a></span>
<span class=normal><a href=#__codelineno-0-279>279</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-268 name=__codelineno-0-268></a><span class=k>def</span> <span class=nf>on_render_after</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>context</span><span class=p>:</span> <span class=n>Context</span><span class=p>,</span> <span class=n>template</span><span class=p>:</span> <span class=n>Template</span><span class=p>,</span> <span class=n>content</span><span class=p>:</span> <span class=nb>str</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n>Optional</span><span class=p>[</span><span class=n>SlotResult</span><span class=p>]:</span>
<a id=__codelineno-0-269 name=__codelineno-0-269></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-270 name=__codelineno-0-270></a><span class=sd> Hook that runs just after the component&#39;s template was rendered.</span>
<a id=__codelineno-0-271 name=__codelineno-0-271></a><span class=sd> It receives the rendered output as the last argument.</span>
<a id=__codelineno-0-272 name=__codelineno-0-272></a>
<a id=__codelineno-0-273 name=__codelineno-0-273></a><span class=sd> You can use this hook to access the context or the template, but modifying</span>
<a id=__codelineno-0-274 name=__codelineno-0-274></a><span class=sd> them won&#39;t have any effect.</span>
<a id=__codelineno-0-275 name=__codelineno-0-275></a>
<a id=__codelineno-0-276 name=__codelineno-0-276></a><span class=sd> To override the content that gets rendered, you can return a string or SafeString</span>
<a id=__codelineno-0-277 name=__codelineno-0-277></a><span class=sd> from this hook.</span>
<a id=__codelineno-0-278 name=__codelineno-0-278></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-279 name=__codelineno-0-279></a> <span class=k>pass</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h4 id=django_components.component.Component.on_render_before class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">on_render_before</span> <a href=#django_components.component.Component.on_render_before class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>on_render_before</span><span class=p>(</span><span class=n>context</span><span class=p>:</span> <span class=n><span title=django.template.context.Context>Context</span></span><span class=p>,</span> <span class=n>template</span><span class=p>:</span> <span class=n><span title=django.template.base.Template>Template</span></span><span class=p>)</span> <span class=o>-&gt;</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>Hook that runs just before the component's template is rendered.</p> <p>You can use this hook to access or modify the context or the template.</p> <details class=quote> <summary>Source code in <code>src/django_components/component.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-260>260</a></span>
<span class=normal><a href=#__codelineno-0-261>261</a></span>
<span class=normal><a href=#__codelineno-0-262>262</a></span>
<span class=normal><a href=#__codelineno-0-263>263</a></span>
<span class=normal><a href=#__codelineno-0-264>264</a></span>
<span class=normal><a href=#__codelineno-0-265>265</a></span>
<span class=normal><a href=#__codelineno-0-266>266</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-260 name=__codelineno-0-260></a><span class=k>def</span> <span class=nf>on_render_before</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>context</span><span class=p>:</span> <span class=n>Context</span><span class=p>,</span> <span class=n>template</span><span class=p>:</span> <span class=n>Template</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=kc>None</span><span class=p>:</span>
<a id=__codelineno-0-261 name=__codelineno-0-261></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-262 name=__codelineno-0-262></a><span class=sd> Hook that runs just before the component&#39;s template is rendered.</span>
<a id=__codelineno-0-263 name=__codelineno-0-263></a>
<a id=__codelineno-0-264 name=__codelineno-0-264></a><span class=sd> You can use this hook to access or modify the context or the template.</span>
<a id=__codelineno-0-265 name=__codelineno-0-265></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-266 name=__codelineno-0-266></a> <span class=k>pass</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h4 id=django_components.component.Component.render class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">render</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-classmethod"><code>classmethod</code></small> </span> <a href=#django_components.component.Component.render class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>render</span><span class=p>(</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a> <span class=n>context</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Union href=https://docs.python.org/3.12/library/typing.html#typing.Union>Union</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Dict href=https://docs.python.org/3.12/library/typing.html#typing.Dict>Dict</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span> <span class=n><a class="autorefs autorefs-external" title=typing.Any href=https://docs.python.org/3.12/library/typing.html#typing.Any>Any</a></span><span class=p>],</span> <span class=n><span title=django.template.context.Context>Context</span></span><span class=p>]]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a> <span class=n>args</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><span title=django_components.component.ArgsType>ArgsType</span></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a> <span class=n>kwargs</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><span title=django_components.component.KwargsType>KwargsType</span></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a> <span class=n>slots</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><span title=django_components.component.SlotsType>SlotsType</span></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-6 name=__codelineno-0-6 href=#__codelineno-0-6></a> <span class=n>escape_slots_content</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/functions.html#bool>bool</a></span> <span class=o>=</span> <span class=kc>True</span><span class=p>,</span>
<a id=__codelineno-0-7 name=__codelineno-0-7 href=#__codelineno-0-7></a> <span class=nb>type</span><span class=p>:</span> <span class=n><span title=django_components.dependencies.RenderType>RenderType</span></span> <span class=o>=</span> <span class=s2>&quot;document&quot;</span><span class=p>,</span>
<a id=__codelineno-0-8 name=__codelineno-0-8 href=#__codelineno-0-8></a> <span class=n>render_dependencies</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/functions.html#bool>bool</a></span> <span class=o>=</span> <span class=kc>True</span><span class=p>,</span>
<a id=__codelineno-0-9 name=__codelineno-0-9 href=#__codelineno-0-9></a><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span>
</code></pre></div> <div class="doc doc-contents "> <p>Render the component into a string.</p> <p>Inputs: - <code>args</code> - Positional args for the component. This is the same as calling the component as <code>{% component "my_comp" arg1 arg2 ... %}</code> - <code>kwargs</code> - Kwargs for the component. This is the same as calling the component as <code>{% component "my_comp" key1=val1 key2=val2 ... %}</code> - <code>slots</code> - Component slot fills. This is the same as pasing <code>{% fill %}</code> tags to the component. Accepts a dictionary of <code>{ slot_name: slot_content }</code> where <code>slot_content</code> can be a string or render function. - <code>escape_slots_content</code> - Whether the content from <code>slots</code> should be escaped. - <code>context</code> - A context (dictionary or Django's Context) within which the component is rendered. The keys on the context can be accessed from within the template. - NOTE: In "isolated" mode, context is NOT accessible, and data MUST be passed via component's args and kwargs. - <code>type</code> - Configure how to handle JS and CSS dependencies. - <code>"document"</code> (default) - JS dependencies are inserted into <code>{% component_js_dependencies %}</code>, or to the end of the <code>&lt;body&gt;</code> tag. CSS dependencies are inserted into <code>{% component_css_dependencies %}</code>, or the end of the <code>&lt;head&gt;</code> tag. - <code>render_dependencies</code> - Set this to <code>False</code> if you want to insert the resulting HTML into another component.</p> <p>Example: <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>MyComponent</span><span class=o>.</span><span class=n>render</span><span class=p>(</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a> <span class=n>args</span><span class=o>=</span><span class=p>[</span><span class=mi>1</span><span class=p>,</span> <span class=s2>&quot;two&quot;</span><span class=p>,</span> <span class=p>{}],</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a> <span class=n>kwargs</span><span class=o>=</span><span class=p>{</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a> <span class=s2>&quot;key&quot;</span><span class=p>:</span> <span class=mi>123</span><span class=p>,</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a> <span class=p>},</span>
<a id=__codelineno-0-6 name=__codelineno-0-6 href=#__codelineno-0-6></a> <span class=n>slots</span><span class=o>=</span><span class=p>{</span>
<a id=__codelineno-0-7 name=__codelineno-0-7 href=#__codelineno-0-7></a> <span class=s2>&quot;header&quot;</span><span class=p>:</span> <span class=s1>&#39;STATIC TEXT HERE&#39;</span><span class=p>,</span>
<a id=__codelineno-0-8 name=__codelineno-0-8 href=#__codelineno-0-8></a> <span class=s2>&quot;footer&quot;</span><span class=p>:</span> <span class=k>lambda</span> <span class=n>ctx</span><span class=p>,</span> <span class=n>slot_kwargs</span><span class=p>,</span> <span class=n>slot_ref</span><span class=p>:</span> <span class=sa>f</span><span class=s1>&#39;CTX: </span><span class=si>{</span><span class=n>ctx</span><span class=p>[</span><span class=s1>&#39;hello&#39;</span><span class=p>]</span><span class=si>}</span><span class=s1> SLOT_DATA: </span><span class=si>{</span><span class=n>slot_kwargs</span><span class=p>[</span><span class=s1>&#39;abc&#39;</span><span class=p>]</span><span class=si>}</span><span class=s1>&#39;</span><span class=p>,</span>
<a id=__codelineno-0-9 name=__codelineno-0-9 href=#__codelineno-0-9></a> <span class=p>},</span>
<a id=__codelineno-0-10 name=__codelineno-0-10 href=#__codelineno-0-10></a> <span class=n>escape_slots_content</span><span class=o>=</span><span class=kc>False</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> <details class=quote> <summary>Source code in <code>src/django_components/component.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-549>549</a></span>
<span class=normal><a href=#__codelineno-0-550>550</a></span>
<span class=normal><a href=#__codelineno-0-551>551</a></span>
<span class=normal><a href=#__codelineno-0-552>552</a></span>
<span class=normal><a href=#__codelineno-0-553>553</a></span>
<span class=normal><a href=#__codelineno-0-554>554</a></span>
<span class=normal><a href=#__codelineno-0-555>555</a></span>
<span class=normal><a href=#__codelineno-0-556>556</a></span>
<span class=normal><a href=#__codelineno-0-557>557</a></span>
<span class=normal><a href=#__codelineno-0-558>558</a></span>
<span class=normal><a href=#__codelineno-0-559>559</a></span>
<span class=normal><a href=#__codelineno-0-560>560</a></span>
<span class=normal><a href=#__codelineno-0-561>561</a></span>
<span class=normal><a href=#__codelineno-0-562>562</a></span>
<span class=normal><a href=#__codelineno-0-563>563</a></span>
<span class=normal><a href=#__codelineno-0-564>564</a></span>
<span class=normal><a href=#__codelineno-0-565>565</a></span>
<span class=normal><a href=#__codelineno-0-566>566</a></span>
<span class=normal><a href=#__codelineno-0-567>567</a></span>
<span class=normal><a href=#__codelineno-0-568>568</a></span>
<span class=normal><a href=#__codelineno-0-569>569</a></span>
<span class=normal><a href=#__codelineno-0-570>570</a></span>
<span class=normal><a href=#__codelineno-0-571>571</a></span>
<span class=normal><a href=#__codelineno-0-572>572</a></span>
<span class=normal><a href=#__codelineno-0-573>573</a></span>
<span class=normal><a href=#__codelineno-0-574>574</a></span>
<span class=normal><a href=#__codelineno-0-575>575</a></span>
<span class=normal><a href=#__codelineno-0-576>576</a></span>
<span class=normal><a href=#__codelineno-0-577>577</a></span>
<span class=normal><a href=#__codelineno-0-578>578</a></span>
<span class=normal><a href=#__codelineno-0-579>579</a></span>
<span class=normal><a href=#__codelineno-0-580>580</a></span>
<span class=normal><a href=#__codelineno-0-581>581</a></span>
<span class=normal><a href=#__codelineno-0-582>582</a></span>
<span class=normal><a href=#__codelineno-0-583>583</a></span>
<span class=normal><a href=#__codelineno-0-584>584</a></span>
<span class=normal><a href=#__codelineno-0-585>585</a></span>
<span class=normal><a href=#__codelineno-0-586>586</a></span>
<span class=normal><a href=#__codelineno-0-587>587</a></span>
<span class=normal><a href=#__codelineno-0-588>588</a></span>
<span class=normal><a href=#__codelineno-0-589>589</a></span>
<span class=normal><a href=#__codelineno-0-590>590</a></span>
<span class=normal><a href=#__codelineno-0-591>591</a></span>
<span class=normal><a href=#__codelineno-0-592>592</a></span>
<span class=normal><a href=#__codelineno-0-593>593</a></span>
<span class=normal><a href=#__codelineno-0-594>594</a></span>
<span class=normal><a href=#__codelineno-0-595>595</a></span>
<span class=normal><a href=#__codelineno-0-596>596</a></span>
<span class=normal><a href=#__codelineno-0-597>597</a></span>
<span class=normal><a href=#__codelineno-0-598>598</a></span>
<span class=normal><a href=#__codelineno-0-599>599</a></span>
<span class=normal><a href=#__codelineno-0-600>600</a></span>
<span class=normal><a href=#__codelineno-0-601>601</a></span>
<span class=normal><a href=#__codelineno-0-602>602</a></span>
<span class=normal><a href=#__codelineno-0-603>603</a></span>
<span class=normal><a href=#__codelineno-0-604>604</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-549 name=__codelineno-0-549></a><span class=nd>@classmethod</span>
<a id=__codelineno-0-550 name=__codelineno-0-550></a><span class=k>def</span> <span class=nf>render</span><span class=p>(</span>
<a id=__codelineno-0-551 name=__codelineno-0-551></a> <span class=bp>cls</span><span class=p>,</span>
<a id=__codelineno-0-552 name=__codelineno-0-552></a> <span class=n>context</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>Union</span><span class=p>[</span><span class=n>Dict</span><span class=p>[</span><span class=nb>str</span><span class=p>,</span> <span class=n>Any</span><span class=p>],</span> <span class=n>Context</span><span class=p>]]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-553 name=__codelineno-0-553></a> <span class=n>args</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>ArgsType</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-554 name=__codelineno-0-554></a> <span class=n>kwargs</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>KwargsType</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-555 name=__codelineno-0-555></a> <span class=n>slots</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>SlotsType</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-556 name=__codelineno-0-556></a> <span class=n>escape_slots_content</span><span class=p>:</span> <span class=nb>bool</span> <span class=o>=</span> <span class=kc>True</span><span class=p>,</span>
<a id=__codelineno-0-557 name=__codelineno-0-557></a> <span class=nb>type</span><span class=p>:</span> <span class=n>RenderType</span> <span class=o>=</span> <span class=s2>&quot;document&quot;</span><span class=p>,</span>
<a id=__codelineno-0-558 name=__codelineno-0-558></a> <span class=n>render_dependencies</span><span class=p>:</span> <span class=nb>bool</span> <span class=o>=</span> <span class=kc>True</span><span class=p>,</span>
<a id=__codelineno-0-559 name=__codelineno-0-559></a><span class=p>)</span> <span class=o>-&gt;</span> <span class=nb>str</span><span class=p>:</span>
<a id=__codelineno-0-560 name=__codelineno-0-560></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-561 name=__codelineno-0-561></a><span class=sd> Render the component into a string.</span>
<a id=__codelineno-0-562 name=__codelineno-0-562></a>
<a id=__codelineno-0-563 name=__codelineno-0-563></a><span class=sd> Inputs:</span>
<a id=__codelineno-0-564 name=__codelineno-0-564></a><span class=sd> - `args` - Positional args for the component. This is the same as calling the component</span>
<a id=__codelineno-0-565 name=__codelineno-0-565></a><span class=sd> as `{% component &quot;my_comp&quot; arg1 arg2 ... %}`</span>
<a id=__codelineno-0-566 name=__codelineno-0-566></a><span class=sd> - `kwargs` - Kwargs for the component. This is the same as calling the component</span>
<a id=__codelineno-0-567 name=__codelineno-0-567></a><span class=sd> as `{% component &quot;my_comp&quot; key1=val1 key2=val2 ... %}`</span>
<a id=__codelineno-0-568 name=__codelineno-0-568></a><span class=sd> - `slots` - Component slot fills. This is the same as pasing `{% fill %}` tags to the component.</span>
<a id=__codelineno-0-569 name=__codelineno-0-569></a><span class=sd> Accepts a dictionary of `{ slot_name: slot_content }` where `slot_content` can be a string</span>
<a id=__codelineno-0-570 name=__codelineno-0-570></a><span class=sd> or render function.</span>
<a id=__codelineno-0-571 name=__codelineno-0-571></a><span class=sd> - `escape_slots_content` - Whether the content from `slots` should be escaped.</span>
<a id=__codelineno-0-572 name=__codelineno-0-572></a><span class=sd> - `context` - A context (dictionary or Django&#39;s Context) within which the component</span>
<a id=__codelineno-0-573 name=__codelineno-0-573></a><span class=sd> is rendered. The keys on the context can be accessed from within the template.</span>
<a id=__codelineno-0-574 name=__codelineno-0-574></a><span class=sd> - NOTE: In &quot;isolated&quot; mode, context is NOT accessible, and data MUST be passed via</span>
<a id=__codelineno-0-575 name=__codelineno-0-575></a><span class=sd> component&#39;s args and kwargs.</span>
<a id=__codelineno-0-576 name=__codelineno-0-576></a><span class=sd> - `type` - Configure how to handle JS and CSS dependencies.</span>
<a id=__codelineno-0-577 name=__codelineno-0-577></a><span class=sd> - `&quot;document&quot;` (default) - JS dependencies are inserted into `{% component_js_dependencies %}`,</span>
<a id=__codelineno-0-578 name=__codelineno-0-578></a><span class=sd> or to the end of the `&lt;body&gt;` tag. CSS dependencies are inserted into</span>
<a id=__codelineno-0-579 name=__codelineno-0-579></a><span class=sd> `{% component_css_dependencies %}`, or the end of the `&lt;head&gt;` tag.</span>
<a id=__codelineno-0-580 name=__codelineno-0-580></a><span class=sd> - `render_dependencies` - Set this to `False` if you want to insert the resulting HTML into another component.</span>
<a id=__codelineno-0-581 name=__codelineno-0-581></a>
<a id=__codelineno-0-582 name=__codelineno-0-582></a><span class=sd> Example:</span>
<a id=__codelineno-0-583 name=__codelineno-0-583></a><span class=sd> ```py</span>
<a id=__codelineno-0-584 name=__codelineno-0-584></a><span class=sd> MyComponent.render(</span>
<a id=__codelineno-0-585 name=__codelineno-0-585></a><span class=sd> args=[1, &quot;two&quot;, {}],</span>
<a id=__codelineno-0-586 name=__codelineno-0-586></a><span class=sd> kwargs={</span>
<a id=__codelineno-0-587 name=__codelineno-0-587></a><span class=sd> &quot;key&quot;: 123,</span>
<a id=__codelineno-0-588 name=__codelineno-0-588></a><span class=sd> },</span>
<a id=__codelineno-0-589 name=__codelineno-0-589></a><span class=sd> slots={</span>
<a id=__codelineno-0-590 name=__codelineno-0-590></a><span class=sd> &quot;header&quot;: &#39;STATIC TEXT HERE&#39;,</span>
<a id=__codelineno-0-591 name=__codelineno-0-591></a><span class=sd> &quot;footer&quot;: lambda ctx, slot_kwargs, slot_ref: f&#39;CTX: {ctx[&#39;hello&#39;]} SLOT_DATA: {slot_kwargs[&#39;abc&#39;]}&#39;,</span>
<a id=__codelineno-0-592 name=__codelineno-0-592></a><span class=sd> },</span>
<a id=__codelineno-0-593 name=__codelineno-0-593></a><span class=sd> escape_slots_content=False,</span>
<a id=__codelineno-0-594 name=__codelineno-0-594></a><span class=sd> )</span>
<a id=__codelineno-0-595 name=__codelineno-0-595></a><span class=sd> ```</span>
<a id=__codelineno-0-596 name=__codelineno-0-596></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-597 name=__codelineno-0-597></a> <span class=c1># This method may be called as class method or as instance method.</span>
<a id=__codelineno-0-598 name=__codelineno-0-598></a> <span class=c1># If called as class method, create a new instance.</span>
<a id=__codelineno-0-599 name=__codelineno-0-599></a> <span class=k>if</span> <span class=nb>isinstance</span><span class=p>(</span><span class=bp>cls</span><span class=p>,</span> <span class=n>Component</span><span class=p>):</span>
<a id=__codelineno-0-600 name=__codelineno-0-600></a> <span class=n>comp</span><span class=p>:</span> <span class=n>Component</span> <span class=o>=</span> <span class=bp>cls</span>
<a id=__codelineno-0-601 name=__codelineno-0-601></a> <span class=k>else</span><span class=p>:</span>
<a id=__codelineno-0-602 name=__codelineno-0-602></a> <span class=n>comp</span> <span class=o>=</span> <span class=bp>cls</span><span class=p>()</span>
<a id=__codelineno-0-603 name=__codelineno-0-603></a>
<a id=__codelineno-0-604 name=__codelineno-0-604></a> <span class=k>return</span> <span class=n>comp</span><span class=o>.</span><span class=n>_render</span><span class=p>(</span><span class=n>context</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>escape_slots_content</span><span class=p>,</span> <span class=nb>type</span><span class=p>,</span> <span class=n>render_dependencies</span><span class=p>)</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h4 id=django_components.component.Component.render_to_response class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">render_to_response</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-classmethod"><code>classmethod</code></small> </span> <a href=#django_components.component.Component.render_to_response class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>render_to_response</span><span class=p>(</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a> <span class=n>context</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Union href=https://docs.python.org/3.12/library/typing.html#typing.Union>Union</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Dict href=https://docs.python.org/3.12/library/typing.html#typing.Dict>Dict</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span> <span class=n><a class="autorefs autorefs-external" title=typing.Any href=https://docs.python.org/3.12/library/typing.html#typing.Any>Any</a></span><span class=p>],</span> <span class=n><span title=django.template.context.Context>Context</span></span><span class=p>]]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a> <span class=n>slots</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><span title=django_components.component.SlotsType>SlotsType</span></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a> <span class=n>escape_slots_content</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/functions.html#bool>bool</a></span> <span class=o>=</span> <span class=kc>True</span><span class=p>,</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a> <span class=n>args</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><span title=django_components.component.ArgsType>ArgsType</span></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-6 name=__codelineno-0-6 href=#__codelineno-0-6></a> <span class=n>kwargs</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><span title=django_components.component.KwargsType>KwargsType</span></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-7 name=__codelineno-0-7 href=#__codelineno-0-7></a> <span class=nb>type</span><span class=p>:</span> <span class=n><span title=django_components.dependencies.RenderType>RenderType</span></span> <span class=o>=</span> <span class=s2>&quot;document&quot;</span><span class=p>,</span>
<a id=__codelineno-0-8 name=__codelineno-0-8 href=#__codelineno-0-8></a> <span class=o>*</span><span class=n>response_args</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Any href=https://docs.python.org/3.12/library/typing.html#typing.Any>Any</a></span><span class=p>,</span>
<a id=__codelineno-0-9 name=__codelineno-0-9 href=#__codelineno-0-9></a> <span class=o>**</span><span class=n>response_kwargs</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Any href=https://docs.python.org/3.12/library/typing.html#typing.Any>Any</a></span>
<a id=__codelineno-0-10 name=__codelineno-0-10 href=#__codelineno-0-10></a><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-external" title=django.http.HttpResponse href=https://docs.djangoproject.com/en/5.0/ref/request-response/#django.http.HttpResponse>HttpResponse</a></span>
</code></pre></div> <div class="doc doc-contents "> <p>Render the component and wrap the content in the response class.</p> <p>The response class is taken from <code>Component.response_class</code>. Defaults to <code>django.http.HttpResponse</code>.</p> <p>This is the interface for the <code>django.views.View</code> class which allows us to use components as Django views with <code>component.as_view()</code>.</p> <p>Inputs: - <code>args</code> - Positional args for the component. This is the same as calling the component as <code>{% component "my_comp" arg1 arg2 ... %}</code> - <code>kwargs</code> - Kwargs for the component. This is the same as calling the component as <code>{% component "my_comp" key1=val1 key2=val2 ... %}</code> - <code>slots</code> - Component slot fills. This is the same as pasing <code>{% fill %}</code> tags to the component. Accepts a dictionary of <code>{ slot_name: slot_content }</code> where <code>slot_content</code> can be a string or render function. - <code>escape_slots_content</code> - Whether the content from <code>slots</code> should be escaped. - <code>context</code> - A context (dictionary or Django's Context) within which the component is rendered. The keys on the context can be accessed from within the template. - NOTE: In "isolated" mode, context is NOT accessible, and data MUST be passed via component's args and kwargs. - <code>type</code> - Configure how to handle JS and CSS dependencies. - <code>"document"</code> (default) - JS dependencies are inserted into <code>{% component_js_dependencies %}</code>, or to the end of the <code>&lt;body&gt;</code> tag. CSS dependencies are inserted into <code>{% component_css_dependencies %}</code>, or the end of the <code>&lt;head&gt;</code> tag.</p> <p>Any additional args and kwargs are passed to the <code>response_class</code>.</p> <p>Example: <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>MyComponent</span><span class=o>.</span><span class=n>render_to_response</span><span class=p>(</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a> <span class=n>args</span><span class=o>=</span><span class=p>[</span><span class=mi>1</span><span class=p>,</span> <span class=s2>&quot;two&quot;</span><span class=p>,</span> <span class=p>{}],</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a> <span class=n>kwargs</span><span class=o>=</span><span class=p>{</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a> <span class=s2>&quot;key&quot;</span><span class=p>:</span> <span class=mi>123</span><span class=p>,</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a> <span class=p>},</span>
<a id=__codelineno-0-6 name=__codelineno-0-6 href=#__codelineno-0-6></a> <span class=n>slots</span><span class=o>=</span><span class=p>{</span>
<a id=__codelineno-0-7 name=__codelineno-0-7 href=#__codelineno-0-7></a> <span class=s2>&quot;header&quot;</span><span class=p>:</span> <span class=s1>&#39;STATIC TEXT HERE&#39;</span><span class=p>,</span>
<a id=__codelineno-0-8 name=__codelineno-0-8 href=#__codelineno-0-8></a> <span class=s2>&quot;footer&quot;</span><span class=p>:</span> <span class=k>lambda</span> <span class=n>ctx</span><span class=p>,</span> <span class=n>slot_kwargs</span><span class=p>,</span> <span class=n>slot_ref</span><span class=p>:</span> <span class=sa>f</span><span class=s1>&#39;CTX: </span><span class=si>{</span><span class=n>ctx</span><span class=p>[</span><span class=s1>&#39;hello&#39;</span><span class=p>]</span><span class=si>}</span><span class=s1> SLOT_DATA: </span><span class=si>{</span><span class=n>slot_kwargs</span><span class=p>[</span><span class=s1>&#39;abc&#39;</span><span class=p>]</span><span class=si>}</span><span class=s1>&#39;</span><span class=p>,</span>
<a id=__codelineno-0-9 name=__codelineno-0-9 href=#__codelineno-0-9></a> <span class=p>},</span>
<a id=__codelineno-0-10 name=__codelineno-0-10 href=#__codelineno-0-10></a> <span class=n>escape_slots_content</span><span class=o>=</span><span class=kc>False</span><span class=p>,</span>
<a id=__codelineno-0-11 name=__codelineno-0-11 href=#__codelineno-0-11></a> <span class=c1># HttpResponse input</span>
<a id=__codelineno-0-12 name=__codelineno-0-12 href=#__codelineno-0-12></a> <span class=n>status</span><span class=o>=</span><span class=mi>201</span><span class=p>,</span>
<a id=__codelineno-0-13 name=__codelineno-0-13 href=#__codelineno-0-13></a> <span class=n>headers</span><span class=o>=</span><span class=p>{</span><span class=o>...</span><span class=p>},</span>
<a id=__codelineno-0-14 name=__codelineno-0-14 href=#__codelineno-0-14></a><span class=p>)</span>
<a id=__codelineno-0-15 name=__codelineno-0-15 href=#__codelineno-0-15></a><span class=c1># HttpResponse(content=..., status=201, headers=...)</span>
</code></pre></div></p> <details class=quote> <summary>Source code in <code>src/django_components/component.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-479>479</a></span>
<span class=normal><a href=#__codelineno-0-480>480</a></span>
<span class=normal><a href=#__codelineno-0-481>481</a></span>
<span class=normal><a href=#__codelineno-0-482>482</a></span>
<span class=normal><a href=#__codelineno-0-483>483</a></span>
<span class=normal><a href=#__codelineno-0-484>484</a></span>
<span class=normal><a href=#__codelineno-0-485>485</a></span>
<span class=normal><a href=#__codelineno-0-486>486</a></span>
<span class=normal><a href=#__codelineno-0-487>487</a></span>
<span class=normal><a href=#__codelineno-0-488>488</a></span>
<span class=normal><a href=#__codelineno-0-489>489</a></span>
<span class=normal><a href=#__codelineno-0-490>490</a></span>
<span class=normal><a href=#__codelineno-0-491>491</a></span>
<span class=normal><a href=#__codelineno-0-492>492</a></span>
<span class=normal><a href=#__codelineno-0-493>493</a></span>
<span class=normal><a href=#__codelineno-0-494>494</a></span>
<span class=normal><a href=#__codelineno-0-495>495</a></span>
<span class=normal><a href=#__codelineno-0-496>496</a></span>
<span class=normal><a href=#__codelineno-0-497>497</a></span>
<span class=normal><a href=#__codelineno-0-498>498</a></span>
<span class=normal><a href=#__codelineno-0-499>499</a></span>
<span class=normal><a href=#__codelineno-0-500>500</a></span>
<span class=normal><a href=#__codelineno-0-501>501</a></span>
<span class=normal><a href=#__codelineno-0-502>502</a></span>
<span class=normal><a href=#__codelineno-0-503>503</a></span>
<span class=normal><a href=#__codelineno-0-504>504</a></span>
<span class=normal><a href=#__codelineno-0-505>505</a></span>
<span class=normal><a href=#__codelineno-0-506>506</a></span>
<span class=normal><a href=#__codelineno-0-507>507</a></span>
<span class=normal><a href=#__codelineno-0-508>508</a></span>
<span class=normal><a href=#__codelineno-0-509>509</a></span>
<span class=normal><a href=#__codelineno-0-510>510</a></span>
<span class=normal><a href=#__codelineno-0-511>511</a></span>
<span class=normal><a href=#__codelineno-0-512>512</a></span>
<span class=normal><a href=#__codelineno-0-513>513</a></span>
<span class=normal><a href=#__codelineno-0-514>514</a></span>
<span class=normal><a href=#__codelineno-0-515>515</a></span>
<span class=normal><a href=#__codelineno-0-516>516</a></span>
<span class=normal><a href=#__codelineno-0-517>517</a></span>
<span class=normal><a href=#__codelineno-0-518>518</a></span>
<span class=normal><a href=#__codelineno-0-519>519</a></span>
<span class=normal><a href=#__codelineno-0-520>520</a></span>
<span class=normal><a href=#__codelineno-0-521>521</a></span>
<span class=normal><a href=#__codelineno-0-522>522</a></span>
<span class=normal><a href=#__codelineno-0-523>523</a></span>
<span class=normal><a href=#__codelineno-0-524>524</a></span>
<span class=normal><a href=#__codelineno-0-525>525</a></span>
<span class=normal><a href=#__codelineno-0-526>526</a></span>
<span class=normal><a href=#__codelineno-0-527>527</a></span>
<span class=normal><a href=#__codelineno-0-528>528</a></span>
<span class=normal><a href=#__codelineno-0-529>529</a></span>
<span class=normal><a href=#__codelineno-0-530>530</a></span>
<span class=normal><a href=#__codelineno-0-531>531</a></span>
<span class=normal><a href=#__codelineno-0-532>532</a></span>
<span class=normal><a href=#__codelineno-0-533>533</a></span>
<span class=normal><a href=#__codelineno-0-534>534</a></span>
<span class=normal><a href=#__codelineno-0-535>535</a></span>
<span class=normal><a href=#__codelineno-0-536>536</a></span>
<span class=normal><a href=#__codelineno-0-537>537</a></span>
<span class=normal><a href=#__codelineno-0-538>538</a></span>
<span class=normal><a href=#__codelineno-0-539>539</a></span>
<span class=normal><a href=#__codelineno-0-540>540</a></span>
<span class=normal><a href=#__codelineno-0-541>541</a></span>
<span class=normal><a href=#__codelineno-0-542>542</a></span>
<span class=normal><a href=#__codelineno-0-543>543</a></span>
<span class=normal><a href=#__codelineno-0-544>544</a></span>
<span class=normal><a href=#__codelineno-0-545>545</a></span>
<span class=normal><a href=#__codelineno-0-546>546</a></span>
<span class=normal><a href=#__codelineno-0-547>547</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-479 name=__codelineno-0-479></a><span class=nd>@classmethod</span>
<a id=__codelineno-0-480 name=__codelineno-0-480></a><span class=k>def</span> <span class=nf>render_to_response</span><span class=p>(</span>
<a id=__codelineno-0-481 name=__codelineno-0-481></a> <span class=bp>cls</span><span class=p>,</span>
<a id=__codelineno-0-482 name=__codelineno-0-482></a> <span class=n>context</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>Union</span><span class=p>[</span><span class=n>Dict</span><span class=p>[</span><span class=nb>str</span><span class=p>,</span> <span class=n>Any</span><span class=p>],</span> <span class=n>Context</span><span class=p>]]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-483 name=__codelineno-0-483></a> <span class=n>slots</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>SlotsType</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-484 name=__codelineno-0-484></a> <span class=n>escape_slots_content</span><span class=p>:</span> <span class=nb>bool</span> <span class=o>=</span> <span class=kc>True</span><span class=p>,</span>
<a id=__codelineno-0-485 name=__codelineno-0-485></a> <span class=n>args</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>ArgsType</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-486 name=__codelineno-0-486></a> <span class=n>kwargs</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>KwargsType</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-487 name=__codelineno-0-487></a> <span class=nb>type</span><span class=p>:</span> <span class=n>RenderType</span> <span class=o>=</span> <span class=s2>&quot;document&quot;</span><span class=p>,</span>
<a id=__codelineno-0-488 name=__codelineno-0-488></a> <span class=o>*</span><span class=n>response_args</span><span class=p>:</span> <span class=n>Any</span><span class=p>,</span>
<a id=__codelineno-0-489 name=__codelineno-0-489></a> <span class=o>**</span><span class=n>response_kwargs</span><span class=p>:</span> <span class=n>Any</span><span class=p>,</span>
<a id=__codelineno-0-490 name=__codelineno-0-490></a><span class=p>)</span> <span class=o>-&gt;</span> <span class=n>HttpResponse</span><span class=p>:</span>
<a id=__codelineno-0-491 name=__codelineno-0-491></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-492 name=__codelineno-0-492></a><span class=sd> Render the component and wrap the content in the response class.</span>
<a id=__codelineno-0-493 name=__codelineno-0-493></a>
<a id=__codelineno-0-494 name=__codelineno-0-494></a><span class=sd> The response class is taken from `Component.response_class`. Defaults to `django.http.HttpResponse`.</span>
<a id=__codelineno-0-495 name=__codelineno-0-495></a>
<a id=__codelineno-0-496 name=__codelineno-0-496></a><span class=sd> This is the interface for the `django.views.View` class which allows us to</span>
<a id=__codelineno-0-497 name=__codelineno-0-497></a><span class=sd> use components as Django views with `component.as_view()`.</span>
<a id=__codelineno-0-498 name=__codelineno-0-498></a>
<a id=__codelineno-0-499 name=__codelineno-0-499></a><span class=sd> Inputs:</span>
<a id=__codelineno-0-500 name=__codelineno-0-500></a><span class=sd> - `args` - Positional args for the component. This is the same as calling the component</span>
<a id=__codelineno-0-501 name=__codelineno-0-501></a><span class=sd> as `{% component &quot;my_comp&quot; arg1 arg2 ... %}`</span>
<a id=__codelineno-0-502 name=__codelineno-0-502></a><span class=sd> - `kwargs` - Kwargs for the component. This is the same as calling the component</span>
<a id=__codelineno-0-503 name=__codelineno-0-503></a><span class=sd> as `{% component &quot;my_comp&quot; key1=val1 key2=val2 ... %}`</span>
<a id=__codelineno-0-504 name=__codelineno-0-504></a><span class=sd> - `slots` - Component slot fills. This is the same as pasing `{% fill %}` tags to the component.</span>
<a id=__codelineno-0-505 name=__codelineno-0-505></a><span class=sd> Accepts a dictionary of `{ slot_name: slot_content }` where `slot_content` can be a string</span>
<a id=__codelineno-0-506 name=__codelineno-0-506></a><span class=sd> or render function.</span>
<a id=__codelineno-0-507 name=__codelineno-0-507></a><span class=sd> - `escape_slots_content` - Whether the content from `slots` should be escaped.</span>
<a id=__codelineno-0-508 name=__codelineno-0-508></a><span class=sd> - `context` - A context (dictionary or Django&#39;s Context) within which the component</span>
<a id=__codelineno-0-509 name=__codelineno-0-509></a><span class=sd> is rendered. The keys on the context can be accessed from within the template.</span>
<a id=__codelineno-0-510 name=__codelineno-0-510></a><span class=sd> - NOTE: In &quot;isolated&quot; mode, context is NOT accessible, and data MUST be passed via</span>
<a id=__codelineno-0-511 name=__codelineno-0-511></a><span class=sd> component&#39;s args and kwargs.</span>
<a id=__codelineno-0-512 name=__codelineno-0-512></a><span class=sd> - `type` - Configure how to handle JS and CSS dependencies.</span>
<a id=__codelineno-0-513 name=__codelineno-0-513></a><span class=sd> - `&quot;document&quot;` (default) - JS dependencies are inserted into `{% component_js_dependencies %}`,</span>
<a id=__codelineno-0-514 name=__codelineno-0-514></a><span class=sd> or to the end of the `&lt;body&gt;` tag. CSS dependencies are inserted into</span>
<a id=__codelineno-0-515 name=__codelineno-0-515></a><span class=sd> `{% component_css_dependencies %}`, or the end of the `&lt;head&gt;` tag.</span>
<a id=__codelineno-0-516 name=__codelineno-0-516></a>
<a id=__codelineno-0-517 name=__codelineno-0-517></a><span class=sd> Any additional args and kwargs are passed to the `response_class`.</span>
<a id=__codelineno-0-518 name=__codelineno-0-518></a>
<a id=__codelineno-0-519 name=__codelineno-0-519></a><span class=sd> Example:</span>
<a id=__codelineno-0-520 name=__codelineno-0-520></a><span class=sd> ```py</span>
<a id=__codelineno-0-521 name=__codelineno-0-521></a><span class=sd> MyComponent.render_to_response(</span>
<a id=__codelineno-0-522 name=__codelineno-0-522></a><span class=sd> args=[1, &quot;two&quot;, {}],</span>
<a id=__codelineno-0-523 name=__codelineno-0-523></a><span class=sd> kwargs={</span>
<a id=__codelineno-0-524 name=__codelineno-0-524></a><span class=sd> &quot;key&quot;: 123,</span>
<a id=__codelineno-0-525 name=__codelineno-0-525></a><span class=sd> },</span>
<a id=__codelineno-0-526 name=__codelineno-0-526></a><span class=sd> slots={</span>
<a id=__codelineno-0-527 name=__codelineno-0-527></a><span class=sd> &quot;header&quot;: &#39;STATIC TEXT HERE&#39;,</span>
<a id=__codelineno-0-528 name=__codelineno-0-528></a><span class=sd> &quot;footer&quot;: lambda ctx, slot_kwargs, slot_ref: f&#39;CTX: {ctx[&#39;hello&#39;]} SLOT_DATA: {slot_kwargs[&#39;abc&#39;]}&#39;,</span>
<a id=__codelineno-0-529 name=__codelineno-0-529></a><span class=sd> },</span>
<a id=__codelineno-0-530 name=__codelineno-0-530></a><span class=sd> escape_slots_content=False,</span>
<a id=__codelineno-0-531 name=__codelineno-0-531></a><span class=sd> # HttpResponse input</span>
<a id=__codelineno-0-532 name=__codelineno-0-532></a><span class=sd> status=201,</span>
<a id=__codelineno-0-533 name=__codelineno-0-533></a><span class=sd> headers={...},</span>
<a id=__codelineno-0-534 name=__codelineno-0-534></a><span class=sd> )</span>
<a id=__codelineno-0-535 name=__codelineno-0-535></a><span class=sd> # HttpResponse(content=..., status=201, headers=...)</span>
<a id=__codelineno-0-536 name=__codelineno-0-536></a><span class=sd> ```</span>
<a id=__codelineno-0-537 name=__codelineno-0-537></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-538 name=__codelineno-0-538></a> <span class=n>content</span> <span class=o>=</span> <span class=bp>cls</span><span class=o>.</span><span class=n>render</span><span class=p>(</span>
<a id=__codelineno-0-539 name=__codelineno-0-539></a> <span class=n>args</span><span class=o>=</span><span class=n>args</span><span class=p>,</span>
<a id=__codelineno-0-540 name=__codelineno-0-540></a> <span class=n>kwargs</span><span class=o>=</span><span class=n>kwargs</span><span class=p>,</span>
<a id=__codelineno-0-541 name=__codelineno-0-541></a> <span class=n>context</span><span class=o>=</span><span class=n>context</span><span class=p>,</span>
<a id=__codelineno-0-542 name=__codelineno-0-542></a> <span class=n>slots</span><span class=o>=</span><span class=n>slots</span><span class=p>,</span>
<a id=__codelineno-0-543 name=__codelineno-0-543></a> <span class=n>escape_slots_content</span><span class=o>=</span><span class=n>escape_slots_content</span><span class=p>,</span>
<a id=__codelineno-0-544 name=__codelineno-0-544></a> <span class=nb>type</span><span class=o>=</span><span class=nb>type</span><span class=p>,</span>
<a id=__codelineno-0-545 name=__codelineno-0-545></a> <span class=n>render_dependencies</span><span class=o>=</span><span class=kc>True</span><span class=p>,</span>
<a id=__codelineno-0-546 name=__codelineno-0-546></a> <span class=p>)</span>
<a id=__codelineno-0-547 name=__codelineno-0-547></a> <span class=k>return</span> <span class=bp>cls</span><span class=o>.</span><span class=n>response_class</span><span class=p>(</span><span class=n>content</span><span class=p>,</span> <span class=o>*</span><span class=n>response_args</span><span class=p>,</span> <span class=o>**</span><span class=n>response_kwargs</span><span class=p>)</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> </div> </div> </div> <div class="doc doc-object doc-class"> <h3 id=django_components.component.ComponentNode class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-class"></code> <span class="doc doc-object-name doc-class-name">ComponentNode</span> <a href=#django_components.component.ComponentNode class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>ComponentNode</span><span class=p>(</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a> <span class=n>name</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a> <span class=n>args</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.List href=https://docs.python.org/3.12/library/typing.html#typing.List>List</a></span><span class=p>[</span><span class=n><span title=django_components.expression.Expression>Expression</span></span><span class=p>],</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a> <span class=n>kwargs</span><span class=p>:</span> <span class=n><span title=django_components.expression.RuntimeKwargs>RuntimeKwargs</span></span><span class=p>,</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a> <span class=n>registry</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-internal" title=django_components.component_registry.ComponentRegistry href=#django_components.component_registry.ComponentRegistry>ComponentRegistry</a></span><span class=p>,</span>
<a id=__codelineno-0-6 name=__codelineno-0-6 href=#__codelineno-0-6></a> <span class=n>isolated_context</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/functions.html#bool>bool</a></span> <span class=o>=</span> <span class=kc>False</span><span class=p>,</span>
<a id=__codelineno-0-7 name=__codelineno-0-7 href=#__codelineno-0-7></a> <span class=n>nodelist</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><span title=django.template.base.NodeList>NodeList</span></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-8 name=__codelineno-0-8 href=#__codelineno-0-8></a> <span class=n>node_id</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-9 name=__codelineno-0-9 href=#__codelineno-0-9></a><span class=p>)</span>
</code></pre></div> <div class="doc doc-contents "> <p class="doc doc-class-bases"> Bases: <code><a class="autorefs autorefs-internal" title=django_components.node.BaseNode href=#django_components.node.BaseNode>BaseNode</a></code></p> <p>Django.template.Node subclass that renders a django-components component</p> <details class=quote> <summary>Source code in <code>src/django_components/component.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-859>859</a></span>
<span class=normal><a href=#__codelineno-0-860>860</a></span>
<span class=normal><a href=#__codelineno-0-861>861</a></span>
<span class=normal><a href=#__codelineno-0-862>862</a></span>
<span class=normal><a href=#__codelineno-0-863>863</a></span>
<span class=normal><a href=#__codelineno-0-864>864</a></span>
<span class=normal><a href=#__codelineno-0-865>865</a></span>
<span class=normal><a href=#__codelineno-0-866>866</a></span>
<span class=normal><a href=#__codelineno-0-867>867</a></span>
<span class=normal><a href=#__codelineno-0-868>868</a></span>
<span class=normal><a href=#__codelineno-0-869>869</a></span>
<span class=normal><a href=#__codelineno-0-870>870</a></span>
<span class=normal><a href=#__codelineno-0-871>871</a></span>
<span class=normal><a href=#__codelineno-0-872>872</a></span>
<span class=normal><a href=#__codelineno-0-873>873</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-859 name=__codelineno-0-859></a><span class=k>def</span> <span class=fm>__init__</span><span class=p>(</span>
<a id=__codelineno-0-860 name=__codelineno-0-860></a> <span class=bp>self</span><span class=p>,</span>
<a id=__codelineno-0-861 name=__codelineno-0-861></a> <span class=n>name</span><span class=p>:</span> <span class=nb>str</span><span class=p>,</span>
<a id=__codelineno-0-862 name=__codelineno-0-862></a> <span class=n>args</span><span class=p>:</span> <span class=n>List</span><span class=p>[</span><span class=n>Expression</span><span class=p>],</span>
<a id=__codelineno-0-863 name=__codelineno-0-863></a> <span class=n>kwargs</span><span class=p>:</span> <span class=n>RuntimeKwargs</span><span class=p>,</span>
<a id=__codelineno-0-864 name=__codelineno-0-864></a> <span class=n>registry</span><span class=p>:</span> <span class=n>ComponentRegistry</span><span class=p>,</span> <span class=c1># noqa F811</span>
<a id=__codelineno-0-865 name=__codelineno-0-865></a> <span class=n>isolated_context</span><span class=p>:</span> <span class=nb>bool</span> <span class=o>=</span> <span class=kc>False</span><span class=p>,</span>
<a id=__codelineno-0-866 name=__codelineno-0-866></a> <span class=n>nodelist</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>NodeList</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-867 name=__codelineno-0-867></a> <span class=n>node_id</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=nb>str</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-868 name=__codelineno-0-868></a><span class=p>)</span> <span class=o>-&gt;</span> <span class=kc>None</span><span class=p>:</span>
<a id=__codelineno-0-869 name=__codelineno-0-869></a> <span class=nb>super</span><span class=p>()</span><span class=o>.</span><span class=fm>__init__</span><span class=p>(</span><span class=n>nodelist</span><span class=o>=</span><span class=n>nodelist</span> <span class=ow>or</span> <span class=n>NodeList</span><span class=p>(),</span> <span class=n>args</span><span class=o>=</span><span class=n>args</span><span class=p>,</span> <span class=n>kwargs</span><span class=o>=</span><span class=n>kwargs</span><span class=p>,</span> <span class=n>node_id</span><span class=o>=</span><span class=n>node_id</span><span class=p>)</span>
<a id=__codelineno-0-870 name=__codelineno-0-870></a>
<a id=__codelineno-0-871 name=__codelineno-0-871></a> <span class=bp>self</span><span class=o>.</span><span class=n>name</span> <span class=o>=</span> <span class=n>name</span>
<a id=__codelineno-0-872 name=__codelineno-0-872></a> <span class=bp>self</span><span class=o>.</span><span class=n>isolated_context</span> <span class=o>=</span> <span class=n>isolated_context</span>
<a id=__codelineno-0-873 name=__codelineno-0-873></a> <span class=bp>self</span><span class=o>.</span><span class=n>registry</span> <span class=o>=</span> <span class=n>registry</span>
</code></pre></div></td></tr></table></div> </details> <div class="doc doc-children"> </div> </div> </div> <div class="doc doc-object doc-class"> <h3 id=django_components.component.ComponentVars class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-class"></code> <span class="doc doc-object-name doc-class-name">ComponentVars</span> <a href=#django_components.component.ComponentVars class=headerlink title="Permanent link">¤</a></h3> <div class="doc doc-contents "> <p class="doc doc-class-bases"> Bases: <code><a class="autorefs autorefs-external" title=typing.NamedTuple href=https://docs.python.org/3.12/library/typing.html#typing.NamedTuple>NamedTuple</a></code></p> <p>Type for the variables available inside the component templates.</p> <p>All variables here are scoped under <code>component_vars.</code>, so e.g. attribute <code>is_filled</code> on this class is accessible inside the template as:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=cp>{{</span> <span class=nv>component_vars.is_filled</span> <span class=cp>}}</span>
</code></pre></div> <p><span class=doc-section-title>Attributes:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.component.ComponentVars.is_filled href=#django_components.component.ComponentVars.is_filled>is_filled</a></code></b> (<code><a class="autorefs autorefs-external" title=typing.Dict href=https://docs.python.org/3.12/library/typing.html#typing.Dict>Dict</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>, <a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/functions.html#bool>bool</a>]</code>) <div class=doc-md-description> <p>Dictonary describing which component slots are filled (<code>True</code>) or are not (<code>False</code>).</p> </div> </li> </ul> <div class="doc doc-children"> <div class="doc doc-object doc-attribute"> <h4 id=django_components.component.ComponentVars.is_filled class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">is_filled</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.component.ComponentVars.is_filled class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>is_filled</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Dict href=https://docs.python.org/3.12/library/typing.html#typing.Dict>Dict</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/functions.html#bool>bool</a></span><span class=p>]</span>
</code></pre></div> <div class="doc doc-contents "> <p>Dictonary describing which component slots are filled (<code>True</code>) or are not (<code>False</code>).</p> <p><i>New in version 0.70</i></p> <p>Use as <code>{{ component_vars.is_filled }}</code></p> <p>Example:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=c>{# Render wrapping HTML only if the slot is defined #}</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a><span class=cp>{%</span> <span class=k>if</span> <span class=nv>component_vars.is_filled.my_slot</span> <span class=cp>%}</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=x> &lt;div class=&quot;slot-wrapper&quot;&gt;</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a><span class=x> </span><span class=cp>{%</span> <span class=k>slot</span> <span class=s2>&quot;my_slot&quot;</span> <span class=o>/</span> <span class=cp>%}</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a><span class=x> &lt;/div&gt;</span>
<a id=__codelineno-0-6 name=__codelineno-0-6 href=#__codelineno-0-6></a><span class=cp>{%</span> <span class=k>endif</span> <span class=cp>%}</span>
</code></pre></div> </div> </div> </div> </div> </div> <div class="doc doc-object doc-class"> <h3 id=django_components.component.ComponentView class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-class"></code> <span class="doc doc-object-name doc-class-name">ComponentView</span> <a href=#django_components.component.ComponentView class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>ComponentView</span><span class=p>(</span><span class=n>component</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-internal" title=django_components.component.Component href=#django_components.component.Component>Component</a></span><span class=p>,</span> <span class=o>**</span><span class=n>kwargs</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Any href=https://docs.python.org/3.12/library/typing.html#typing.Any>Any</a></span><span class=p>)</span>
</code></pre></div> <div class="doc doc-contents "> <p class="doc doc-class-bases"> Bases: <code><span title=django.views.View>View</span></code></p> <p>Subclass of <code>django.views.View</code> where the <code>Component</code> instance is available via <code>self.component</code>.</p> <details class=quote> <summary>Source code in <code>src/django_components/component.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-186>186</a></span>
<span class=normal><a href=#__codelineno-0-187>187</a></span>
<span class=normal><a href=#__codelineno-0-188>188</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-186 name=__codelineno-0-186></a><span class=k>def</span> <span class=fm>__init__</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>component</span><span class=p>:</span> <span class=s2>&quot;Component&quot;</span><span class=p>,</span> <span class=o>**</span><span class=n>kwargs</span><span class=p>:</span> <span class=n>Any</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=kc>None</span><span class=p>:</span>
<a id=__codelineno-0-187 name=__codelineno-0-187></a> <span class=nb>super</span><span class=p>()</span><span class=o>.</span><span class=fm>__init__</span><span class=p>(</span><span class=o>**</span><span class=n>kwargs</span><span class=p>)</span>
<a id=__codelineno-0-188 name=__codelineno-0-188></a> <span class=bp>self</span><span class=o>.</span><span class=n>component</span> <span class=o>=</span> <span class=n>component</span>
</code></pre></div></td></tr></table></div> </details> <div class="doc doc-children"> </div> </div> </div> </div> </div> </div> <div class="doc doc-object doc-module"> <h2 id=django_components.component_media class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-module"></code> <span class="doc doc-object-name doc-module-name">component_media</span> <a href=#django_components.component_media class=headerlink title="Permanent link">¤</a></h2> <div class="doc doc-contents "> <p><span class=doc-section-title>Classes:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.component_media.ComponentMediaInput href=#django_components.component_media.ComponentMediaInput>ComponentMediaInput</a></code></b> <div class=doc-md-description> <p>Defines JS and CSS media files associated with this component.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.component_media.MediaMeta href=#django_components.component_media.MediaMeta>MediaMeta</a></code></b> <div class=doc-md-description> <p>Metaclass for handling media files for components.</p> </div> </li> </ul> <div class="doc doc-children"> <div class="doc doc-object doc-class"> <h3 id=django_components.component_media.ComponentMediaInput class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-class"></code> <span class="doc doc-object-name doc-class-name">ComponentMediaInput</span> <a href=#django_components.component_media.ComponentMediaInput class=headerlink title="Permanent link">¤</a></h3> <div class="doc doc-contents "> <p>Defines JS and CSS media files associated with this component.</p> <div class="doc doc-children"> </div> </div> </div> <div class="doc doc-object doc-class"> <h3 id=django_components.component_media.MediaMeta class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-class"></code> <span class="doc doc-object-name doc-class-name">MediaMeta</span> <a href=#django_components.component_media.MediaMeta class=headerlink title="Permanent link">¤</a></h3> <div class="doc doc-contents "> <p class="doc doc-class-bases"> Bases: <code><span title=django.forms.widgets.MediaDefiningClass>MediaDefiningClass</span></code></p> <p>Metaclass for handling media files for components.</p> <p>Similar to <code>MediaDefiningClass</code>, this class supports the use of <code>Media</code> attribute to define associated JS/CSS files, which are then available under <code>media</code> attribute as a instance of <code>Media</code> class.</p> <p>This subclass has following changes:</p> <h6 id=django_components.component_media.MediaMeta--1-support-for-multiple-interfaces-of-jscss>1. Support for multiple interfaces of JS/CSS<a class=headerlink href=#django_components.component_media.MediaMeta--1-support-for-multiple-interfaces-of-jscss title="Permanent link">¤</a></h6> <ol> <li> <p>As plain strings <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=k>class</span> <span class=nc>MyComponent</span><span class=p>(</span><span class=n>Component</span><span class=p>):</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a> <span class=k>class</span> <span class=nc>Media</span><span class=p>:</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a> <span class=n>js</span> <span class=o>=</span> <span class=s2>&quot;path/to/script.js&quot;</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a> <span class=n>css</span> <span class=o>=</span> <span class=s2>&quot;path/to/style.css&quot;</span>
</code></pre></div></p> </li> <li> <p>As lists <div class=highlight><pre><span></span><code><a id=__codelineno-1-1 name=__codelineno-1-1 href=#__codelineno-1-1></a><span class=k>class</span> <span class=nc>MyComponent</span><span class=p>(</span><span class=n>Component</span><span class=p>):</span>
<a id=__codelineno-1-2 name=__codelineno-1-2 href=#__codelineno-1-2></a> <span class=k>class</span> <span class=nc>Media</span><span class=p>:</span>
<a id=__codelineno-1-3 name=__codelineno-1-3 href=#__codelineno-1-3></a> <span class=n>js</span> <span class=o>=</span> <span class=p>[</span><span class=s2>&quot;path/to/script1.js&quot;</span><span class=p>,</span> <span class=s2>&quot;path/to/script2.js&quot;</span><span class=p>]</span>
<a id=__codelineno-1-4 name=__codelineno-1-4 href=#__codelineno-1-4></a> <span class=n>css</span> <span class=o>=</span> <span class=p>[</span><span class=s2>&quot;path/to/style1.css&quot;</span><span class=p>,</span> <span class=s2>&quot;path/to/style2.css&quot;</span><span class=p>]</span>
</code></pre></div></p> </li> <li> <p>[CSS ONLY] Dicts of strings <div class=highlight><pre><span></span><code><a id=__codelineno-2-1 name=__codelineno-2-1 href=#__codelineno-2-1></a><span class=k>class</span> <span class=nc>MyComponent</span><span class=p>(</span><span class=n>Component</span><span class=p>):</span>
<a id=__codelineno-2-2 name=__codelineno-2-2 href=#__codelineno-2-2></a> <span class=k>class</span> <span class=nc>Media</span><span class=p>:</span>
<a id=__codelineno-2-3 name=__codelineno-2-3 href=#__codelineno-2-3></a> <span class=n>css</span> <span class=o>=</span> <span class=p>{</span>
<a id=__codelineno-2-4 name=__codelineno-2-4 href=#__codelineno-2-4></a> <span class=s2>&quot;all&quot;</span><span class=p>:</span> <span class=s2>&quot;path/to/style1.css&quot;</span><span class=p>,</span>
<a id=__codelineno-2-5 name=__codelineno-2-5 href=#__codelineno-2-5></a> <span class=s2>&quot;print&quot;</span><span class=p>:</span> <span class=s2>&quot;path/to/style2.css&quot;</span><span class=p>,</span>
<a id=__codelineno-2-6 name=__codelineno-2-6 href=#__codelineno-2-6></a> <span class=p>}</span>
</code></pre></div></p> </li> <li> <p>[CSS ONLY] Dicts of lists <div class=highlight><pre><span></span><code><a id=__codelineno-3-1 name=__codelineno-3-1 href=#__codelineno-3-1></a><span class=k>class</span> <span class=nc>MyComponent</span><span class=p>(</span><span class=n>Component</span><span class=p>):</span>
<a id=__codelineno-3-2 name=__codelineno-3-2 href=#__codelineno-3-2></a> <span class=k>class</span> <span class=nc>Media</span><span class=p>:</span>
<a id=__codelineno-3-3 name=__codelineno-3-3 href=#__codelineno-3-3></a> <span class=n>css</span> <span class=o>=</span> <span class=p>{</span>
<a id=__codelineno-3-4 name=__codelineno-3-4 href=#__codelineno-3-4></a> <span class=s2>&quot;all&quot;</span><span class=p>:</span> <span class=p>[</span><span class=s2>&quot;path/to/style1.css&quot;</span><span class=p>],</span>
<a id=__codelineno-3-5 name=__codelineno-3-5 href=#__codelineno-3-5></a> <span class=s2>&quot;print&quot;</span><span class=p>:</span> <span class=p>[</span><span class=s2>&quot;path/to/style2.css&quot;</span><span class=p>],</span>
<a id=__codelineno-3-6 name=__codelineno-3-6 href=#__codelineno-3-6></a> <span class=p>}</span>
</code></pre></div></p> </li> </ol> <h6 id=django_components.component_media.MediaMeta--2-media-are-first-resolved-relative-to-class-definition-file>2. Media are first resolved relative to class definition file<a class=headerlink href=#django_components.component_media.MediaMeta--2-media-are-first-resolved-relative-to-class-definition-file title="Permanent link">¤</a></h6> <p>E.g. if in a directory <code>my_comp</code> you have <code>script.js</code> and <code>my_comp.py</code>, and <code>my_comp.py</code> looks like this:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-4-1 name=__codelineno-4-1 href=#__codelineno-4-1></a><span class=k>class</span> <span class=nc>MyComponent</span><span class=p>(</span><span class=n>Component</span><span class=p>):</span>
<a id=__codelineno-4-2 name=__codelineno-4-2 href=#__codelineno-4-2></a> <span class=k>class</span> <span class=nc>Media</span><span class=p>:</span>
<a id=__codelineno-4-3 name=__codelineno-4-3 href=#__codelineno-4-3></a> <span class=n>js</span> <span class=o>=</span> <span class=s2>&quot;script.js&quot;</span>
</code></pre></div> <p>Then <code>script.js</code> will be resolved as <code>my_comp/script.js</code>.</p> <h6 id=django_components.component_media.MediaMeta--3-media-can-be-defined-as-str-bytes-pathlike-safestring-or-function-of-thereof>3. Media can be defined as str, bytes, PathLike, SafeString, or function of thereof<a class=headerlink href=#django_components.component_media.MediaMeta--3-media-can-be-defined-as-str-bytes-pathlike-safestring-or-function-of-thereof title="Permanent link">¤</a></h6> <p>E.g.:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-5-1 name=__codelineno-5-1 href=#__codelineno-5-1></a><span class=k>def</span> <span class=nf>lazy_eval_css</span><span class=p>():</span>
<a id=__codelineno-5-2 name=__codelineno-5-2 href=#__codelineno-5-2></a> <span class=c1># do something</span>
<a id=__codelineno-5-3 name=__codelineno-5-3 href=#__codelineno-5-3></a> <span class=k>return</span> <span class=n>path</span>
<a id=__codelineno-5-4 name=__codelineno-5-4 href=#__codelineno-5-4></a>
<a id=__codelineno-5-5 name=__codelineno-5-5 href=#__codelineno-5-5></a><span class=k>class</span> <span class=nc>MyComponent</span><span class=p>(</span><span class=n>Component</span><span class=p>):</span>
<a id=__codelineno-5-6 name=__codelineno-5-6 href=#__codelineno-5-6></a> <span class=k>class</span> <span class=nc>Media</span><span class=p>:</span>
<a id=__codelineno-5-7 name=__codelineno-5-7 href=#__codelineno-5-7></a> <span class=n>js</span> <span class=o>=</span> <span class=sa>b</span><span class=s2>&quot;script.js&quot;</span>
<a id=__codelineno-5-8 name=__codelineno-5-8 href=#__codelineno-5-8></a> <span class=n>css</span> <span class=o>=</span> <span class=n>lazy_eval_css</span>
</code></pre></div> <h6 id=django_components.component_media.MediaMeta--4-subclass-media-class-with-media_class>4. Subclass <code>Media</code> class with <code>media_class</code><a class=headerlink href=#django_components.component_media.MediaMeta--4-subclass-media-class-with-media_class title="Permanent link">¤</a></h6> <p>Normal <code>MediaDefiningClass</code> creates an instance of <code>Media</code> class under the <code>media</code> attribute. This class allows to override which class will be instantiated with <code>media_class</code> attribute:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-6-1 name=__codelineno-6-1 href=#__codelineno-6-1></a><span class=k>class</span> <span class=nc>MyMedia</span><span class=p>(</span><span class=n>Media</span><span class=p>):</span>
<a id=__codelineno-6-2 name=__codelineno-6-2 href=#__codelineno-6-2></a> <span class=k>def</span> <span class=nf>render_js</span><span class=p>(</span><span class=bp>self</span><span class=p>):</span>
<a id=__codelineno-6-3 name=__codelineno-6-3 href=#__codelineno-6-3></a> <span class=o>...</span>
<a id=__codelineno-6-4 name=__codelineno-6-4 href=#__codelineno-6-4></a>
<a id=__codelineno-6-5 name=__codelineno-6-5 href=#__codelineno-6-5></a><span class=k>class</span> <span class=nc>MyComponent</span><span class=p>(</span><span class=n>Component</span><span class=p>):</span>
<a id=__codelineno-6-6 name=__codelineno-6-6 href=#__codelineno-6-6></a> <span class=n>media_class</span> <span class=o>=</span> <span class=n>MyMedia</span>
<a id=__codelineno-6-7 name=__codelineno-6-7 href=#__codelineno-6-7></a> <span class=k>def</span> <span class=nf>get_context_data</span><span class=p>(</span><span class=bp>self</span><span class=p>):</span>
<a id=__codelineno-6-8 name=__codelineno-6-8 href=#__codelineno-6-8></a> <span class=k>assert</span> <span class=nb>isinstance</span><span class=p>(</span><span class=bp>self</span><span class=o>.</span><span class=n>media</span><span class=p>,</span> <span class=n>MyMedia</span><span class=p>)</span>
</code></pre></div> <div class="doc doc-children"> </div> </div> </div> </div> </div> </div> <div class="doc doc-object doc-module"> <h2 id=django_components.component_registry class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-module"></code> <span class="doc doc-object-name doc-module-name">component_registry</span> <a href=#django_components.component_registry class=headerlink title="Permanent link">¤</a></h2> <div class="doc doc-contents "> <p><span class=doc-section-title>Classes:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.component_registry.AlreadyRegistered href=#django_components.component_registry.AlreadyRegistered>AlreadyRegistered</a></code></b> <div class=doc-md-description> <p>Raised when you try to register a <a href=../api#django_components#Component>Component</a>,</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.component_registry.ComponentRegistry href=#django_components.component_registry.ComponentRegistry>ComponentRegistry</a></code></b> <div class=doc-md-description> <p>Manages <a href=../api#django_components.Component>components</a> and makes them available</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.component_registry.NotRegistered href=#django_components.component_registry.NotRegistered>NotRegistered</a></code></b> <div class=doc-md-description> <p>Raised when you try to access a <a href=../api#django_components#Component>Component</a>,</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.component_registry.RegistrySettings href=#django_components.component_registry.RegistrySettings>RegistrySettings</a></code></b> <div class=doc-md-description> <p>Configuration for a <a href=../api#django_components.ComponentRegistry><code>ComponentRegistry</code></a>.</p> </div> </li> </ul> <p><span class=doc-section-title>Functions:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.component_registry.register href=#django_components.component_registry.register>register</a></code></b> <div class=doc-md-description> <p>Class decorator for registering a <a href=./#django_components.Component>component</a></p> </div> </li> </ul> <p><span class=doc-section-title>Attributes:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.component_registry.registry href=#django_components.component_registry.registry>registry</a></code></b> (<code><a class="autorefs autorefs-internal" title=django_components.component_registry.ComponentRegistry href=#django_components.component_registry.ComponentRegistry>ComponentRegistry</a></code>) <div class=doc-md-description> <p>The default and global <a href=./#django_components.ComponentRegistry>component registry</a>.</p> </div> </li> </ul> <div class="doc doc-children"> <div class="doc doc-object doc-attribute"> <h3 id=django_components.component_registry.registry class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">registry</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-module-attribute"><code>module-attribute</code></small> </span> <a href=#django_components.component_registry.registry class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>registry</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-internal" title=django_components.component_registry.ComponentRegistry href=#django_components.component_registry.ComponentRegistry>ComponentRegistry</a></span> <span class=o>=</span> <span class=n><a class="autorefs autorefs-internal" title=django_components.component_registry.ComponentRegistry href=#django_components.component_registry.ComponentRegistry>ComponentRegistry</a></span><span class=p>()</span>
</code></pre></div> <div class="doc doc-contents "> <p>The default and global <a href=./#django_components.ComponentRegistry>component registry</a>. Use this instance to directly register or remove components:</p> <p>See <a href=../../concepts/advanced/component_registry>Registering components</a>.</p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=c1># Register components</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a><span class=n>registry</span><span class=o>.</span><span class=n>register</span><span class=p>(</span><span class=s2>&quot;button&quot;</span><span class=p>,</span> <span class=n>ButtonComponent</span><span class=p>)</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=n>registry</span><span class=o>.</span><span class=n>register</span><span class=p>(</span><span class=s2>&quot;card&quot;</span><span class=p>,</span> <span class=n>CardComponent</span><span class=p>)</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a><span class=c1># Get single</span>
<a id=__codelineno-0-6 name=__codelineno-0-6 href=#__codelineno-0-6></a><span class=n>registry</span><span class=o>.</span><span class=n>get</span><span class=p>(</span><span class=s2>&quot;button&quot;</span><span class=p>)</span>
<a id=__codelineno-0-7 name=__codelineno-0-7 href=#__codelineno-0-7></a>
<a id=__codelineno-0-8 name=__codelineno-0-8 href=#__codelineno-0-8></a><span class=c1># Get all</span>
<a id=__codelineno-0-9 name=__codelineno-0-9 href=#__codelineno-0-9></a><span class=n>registry</span><span class=o>.</span><span class=n>all</span><span class=p>()</span>
<a id=__codelineno-0-10 name=__codelineno-0-10 href=#__codelineno-0-10></a>
<a id=__codelineno-0-11 name=__codelineno-0-11 href=#__codelineno-0-11></a><span class=c1># Unregister single</span>
<a id=__codelineno-0-12 name=__codelineno-0-12 href=#__codelineno-0-12></a><span class=n>registry</span><span class=o>.</span><span class=n>unregister</span><span class=p>(</span><span class=s2>&quot;button&quot;</span><span class=p>)</span>
<a id=__codelineno-0-13 name=__codelineno-0-13 href=#__codelineno-0-13></a>
<a id=__codelineno-0-14 name=__codelineno-0-14 href=#__codelineno-0-14></a><span class=c1># Unregister all</span>
<a id=__codelineno-0-15 name=__codelineno-0-15 href=#__codelineno-0-15></a><span class=n>registry</span><span class=o>.</span><span class=n>clear</span><span class=p>()</span>
</code></pre></div> </div> </div> <div class="doc doc-object doc-class"> <h3 id=django_components.component_registry.AlreadyRegistered class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-class"></code> <span class="doc doc-object-name doc-class-name">AlreadyRegistered</span> <a href=#django_components.component_registry.AlreadyRegistered class=headerlink title="Permanent link">¤</a></h3> <div class="doc doc-contents "> <p class="doc doc-class-bases"> Bases: <code><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/exceptions.html#Exception>Exception</a></code></p> <p>Raised when you try to register a <a href=../api#django_components#Component>Component</a>, but it's already registered with given <a href=../api#django_components.ComponentRegistry>ComponentRegistry</a>.</p> </div> </div> <div class="doc doc-object doc-class"> <h3 id=django_components.component_registry.ComponentRegistry class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-class"></code> <span class="doc doc-object-name doc-class-name">ComponentRegistry</span> <a href=#django_components.component_registry.ComponentRegistry class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>ComponentRegistry</span><span class=p>(</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a> <span class=n>library</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><span title=django.template.Library>Library</span></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span> <span class=n>settings</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Union href=https://docs.python.org/3.12/library/typing.html#typing.Union>Union</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-internal" title=django_components.component_registry.RegistrySettings href=#django_components.component_registry.RegistrySettings>RegistrySettings</a></span><span class=p>,</span> <span class=n><a class="autorefs autorefs-external" title=typing.Callable href=https://docs.python.org/3.12/library/typing.html#typing.Callable>Callable</a></span><span class=p>[[</span><span class=n><a class="autorefs autorefs-internal" title=django_components.component_registry.ComponentRegistry href=#django_components.component_registry.ComponentRegistry>ComponentRegistry</a></span><span class=p>],</span> <span class=n><a class="autorefs autorefs-internal" title=django_components.component_registry.RegistrySettings href=#django_components.component_registry.RegistrySettings>RegistrySettings</a></span><span class=p>]]]</span> <span class=o>=</span> <span class=kc>None</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=p>)</span>
</code></pre></div> <div class="doc doc-contents "> <p>Manages <a href=../api#django_components.Component>components</a> and makes them available in the template, by default as <a href=../template_tags#component><code>{% component %}</code></a> tags.</p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=cp>{%</span> <span class=k>component</span> <span class=s2>&quot;my_comp&quot;</span> <span class=nv>key</span><span class=o>=</span><span class=nv>value</span> <span class=cp>%}</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a><span class=cp>{%</span> <span class=k>endcomponent</span> <span class=cp>%}</span>
</code></pre></div> <p>To enable a component to be used in a template, the component must be registered with a component registry.</p> <p>When you register a component to a registry, behind the scenes the registry automatically adds the component's template tag (e.g. <code>{% component %}</code> to the <a href=https://docs.djangoproject.com/en/5.1/howto/custom-template-tags/#code-layout><code>Library</code></a>. And the opposite happens when you unregister a component - the tag is removed.</p> <p>See <a href=../../concepts/advanced/component_registry>Registering components</a>.</p> <p><span class=doc-section-title>Parameters:</span></p> <ul> <li class="doc-section-item field-body"> <b><code>library</code></b> (<code><span title=django.template.Library>Library</span></code>, default: <code>None</code> ) <div class=doc-md-description> <p>Django <a href=https://docs.djangoproject.com/en/5.1/howto/custom-template-tags/#code-layout><code>Library</code></a> associated with this registry. If omitted, the default Library instance from django_components is used.</p> </div> </li> <li class="doc-section-item field-body"> <b><code>settings</code></b> (<code><a class="autorefs autorefs-external" title=typing.Union href=https://docs.python.org/3.12/library/typing.html#typing.Union>Union</a>[<a class="autorefs autorefs-internal" title=django_components.component_registry.RegistrySettings href=#django_components.component_registry.RegistrySettings>RegistrySettings</a>, <a class="autorefs autorefs-external" title=typing.Callable href=https://docs.python.org/3.12/library/typing.html#typing.Callable>Callable</a>[[<a class="autorefs autorefs-internal" title=django_components.component_registry.ComponentRegistry href=#django_components.component_registry.ComponentRegistry>ComponentRegistry</a>], <a class="autorefs autorefs-internal" title=django_components.component_registry.RegistrySettings href=#django_components.component_registry.RegistrySettings>RegistrySettings</a>]]</code>, default: <code>None</code> ) <div class=doc-md-description> <p>Configure how the components registered with this registry will behave when rendered. See <a href=../api#django_components.RegistrySettings><code>RegistrySettings</code></a>. Can be either a static value or a callable that returns the settings. If omitted, the settings from <a href=../settings#django_components.app_settings.ComponentsSettings><code>COMPONENTS</code></a> are used.</p> </div> </li> </ul> <p><strong>Notes:</strong></p> <ul> <li>The default registry is available as <a href=../api#django_components.registry><code>django_components.registry</code></a>.</li> <li>The default registry is used when registering components with <a href=../api#django_components.register><code>@register</code></a> decorator.</li> </ul> <p><strong>Example:</strong></p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=c1># Use with default Library</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a><span class=n>registry</span> <span class=o>=</span> <span class=n>ComponentRegistry</span><span class=p>()</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a><span class=c1># Or a custom one</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a><span class=n>my_lib</span> <span class=o>=</span> <span class=n>Library</span><span class=p>()</span>
<a id=__codelineno-0-6 name=__codelineno-0-6 href=#__codelineno-0-6></a><span class=n>registry</span> <span class=o>=</span> <span class=n>ComponentRegistry</span><span class=p>(</span><span class=n>library</span><span class=o>=</span><span class=n>my_lib</span><span class=p>)</span>
<a id=__codelineno-0-7 name=__codelineno-0-7 href=#__codelineno-0-7></a>
<a id=__codelineno-0-8 name=__codelineno-0-8 href=#__codelineno-0-8></a><span class=c1># Usage</span>
<a id=__codelineno-0-9 name=__codelineno-0-9 href=#__codelineno-0-9></a><span class=n>registry</span><span class=o>.</span><span class=n>register</span><span class=p>(</span><span class=s2>&quot;button&quot;</span><span class=p>,</span> <span class=n>ButtonComponent</span><span class=p>)</span>
<a id=__codelineno-0-10 name=__codelineno-0-10 href=#__codelineno-0-10></a><span class=n>registry</span><span class=o>.</span><span class=n>register</span><span class=p>(</span><span class=s2>&quot;card&quot;</span><span class=p>,</span> <span class=n>CardComponent</span><span class=p>)</span>
<a id=__codelineno-0-11 name=__codelineno-0-11 href=#__codelineno-0-11></a><span class=n>registry</span><span class=o>.</span><span class=n>all</span><span class=p>()</span>
<a id=__codelineno-0-12 name=__codelineno-0-12 href=#__codelineno-0-12></a><span class=n>registry</span><span class=o>.</span><span class=n>clear</span><span class=p>()</span>
<a id=__codelineno-0-13 name=__codelineno-0-13 href=#__codelineno-0-13></a><span class=n>registry</span><span class=o>.</span><span class=n>get</span><span class=p>()</span>
</code></pre></div> <h4 id=django_components.component_registry.ComponentRegistry--using-registry-to-share-components>Using registry to share components<a class=headerlink href=#django_components.component_registry.ComponentRegistry--using-registry-to-share-components title="Permanent link">¤</a></h4> <p>You can use component registry for isolating or "packaging" components:</p> <ol> <li> <p>Create new instance of <code>ComponentRegistry</code> and Library: <div class=highlight><pre><span></span><code><a id=__codelineno-1-1 name=__codelineno-1-1 href=#__codelineno-1-1></a><span class=x>my_comps = Library()</span>
<a id=__codelineno-1-2 name=__codelineno-1-2 href=#__codelineno-1-2></a><span class=x>my_comps_reg = ComponentRegistry(library=my_comps)</span>
</code></pre></div></p> </li> <li> <p>Register components to the registry: <div class=highlight><pre><span></span><code><a id=__codelineno-2-1 name=__codelineno-2-1 href=#__codelineno-2-1></a><span class=x>my_comps_reg.register(&quot;my_button&quot;, ButtonComponent)</span>
<a id=__codelineno-2-2 name=__codelineno-2-2 href=#__codelineno-2-2></a><span class=x>my_comps_reg.register(&quot;my_card&quot;, CardComponent)</span>
</code></pre></div></p> </li> <li> <p>In your target project, load the Library associated with the registry: <div class=highlight><pre><span></span><code><a id=__codelineno-3-1 name=__codelineno-3-1 href=#__codelineno-3-1></a><span class=cp>{%</span> <span class=k>load</span> <span class=nv>my_comps</span> <span class=cp>%}</span>
</code></pre></div></p> </li> <li> <p>Use the registered components in your templates: <div class=highlight><pre><span></span><code><a id=__codelineno-4-1 name=__codelineno-4-1 href=#__codelineno-4-1></a><span class=cp>{%</span> <span class=k>component</span> <span class=s2>&quot;button&quot;</span> <span class=cp>%}</span>
<a id=__codelineno-4-2 name=__codelineno-4-2 href=#__codelineno-4-2></a><span class=cp>{%</span> <span class=k>endcomponent</span> <span class=cp>%}</span>
</code></pre></div></p> </li> </ol> <p><span class=doc-section-title>Methods:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.component_registry.ComponentRegistry.all href=#django_components.component_registry.ComponentRegistry.all>all</a></code></b> <div class=doc-md-description> <p>Retrieve all registered <a href=../api#django_components.Component><code>Component</code></a> classes.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.component_registry.ComponentRegistry.clear href=#django_components.component_registry.ComponentRegistry.clear>clear</a></code></b> <div class=doc-md-description> <p>Clears the registry, unregistering all components.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.component_registry.ComponentRegistry.get href=#django_components.component_registry.ComponentRegistry.get>get</a></code></b> <div class=doc-md-description> <p>Retrieve a <a href=../api#django_components.Component><code>Component</code></a></p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.component_registry.ComponentRegistry.register href=#django_components.component_registry.ComponentRegistry.register>register</a></code></b> <div class=doc-md-description> <p>Register a <a href=../api#django_components.Component><code>Component</code></a> class</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.component_registry.ComponentRegistry.unregister href=#django_components.component_registry.ComponentRegistry.unregister>unregister</a></code></b> <div class=doc-md-description> <p>Unregister the <a href=../api#django_components.Component><code>Component</code></a> class</p> </div> </li> </ul> <p><span class=doc-section-title>Attributes:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.component_registry.ComponentRegistry.library href=#django_components.component_registry.ComponentRegistry.library>library</a></code></b> (<code><span title=django.template.Library>Library</span></code>) <div class=doc-md-description> <p>The template tag <a href=https://docs.djangoproject.com/en/5.1/howto/custom-template-tags/#code-layout><code>Library</code></a></p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.component_registry.ComponentRegistry.settings href=#django_components.component_registry.ComponentRegistry.settings>settings</a></code></b> (<code><span title=django_components.component_registry.InternalRegistrySettings>InternalRegistrySettings</span></code>) <div class=doc-md-description> <p><a href=../api#django_components.RegistrySettings>Registry settings</a> configured for this registry.</p> </div> </li> </ul> <details class=quote> <summary>Source code in <code>src/django_components/component_registry.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-217>217</a></span>
<span class=normal><a href=#__codelineno-0-218>218</a></span>
<span class=normal><a href=#__codelineno-0-219>219</a></span>
<span class=normal><a href=#__codelineno-0-220>220</a></span>
<span class=normal><a href=#__codelineno-0-221>221</a></span>
<span class=normal><a href=#__codelineno-0-222>222</a></span>
<span class=normal><a href=#__codelineno-0-223>223</a></span>
<span class=normal><a href=#__codelineno-0-224>224</a></span>
<span class=normal><a href=#__codelineno-0-225>225</a></span>
<span class=normal><a href=#__codelineno-0-226>226</a></span>
<span class=normal><a href=#__codelineno-0-227>227</a></span>
<span class=normal><a href=#__codelineno-0-228>228</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-217 name=__codelineno-0-217></a><span class=k>def</span> <span class=fm>__init__</span><span class=p>(</span>
<a id=__codelineno-0-218 name=__codelineno-0-218></a> <span class=bp>self</span><span class=p>,</span>
<a id=__codelineno-0-219 name=__codelineno-0-219></a> <span class=n>library</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>Library</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-220 name=__codelineno-0-220></a> <span class=n>settings</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>Union</span><span class=p>[</span><span class=n>RegistrySettings</span><span class=p>,</span> <span class=n>Callable</span><span class=p>[[</span><span class=s2>&quot;ComponentRegistry&quot;</span><span class=p>],</span> <span class=n>RegistrySettings</span><span class=p>]]]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-221 name=__codelineno-0-221></a><span class=p>)</span> <span class=o>-&gt;</span> <span class=kc>None</span><span class=p>:</span>
<a id=__codelineno-0-222 name=__codelineno-0-222></a> <span class=bp>self</span><span class=o>.</span><span class=n>_registry</span><span class=p>:</span> <span class=n>Dict</span><span class=p>[</span><span class=nb>str</span><span class=p>,</span> <span class=n>ComponentRegistryEntry</span><span class=p>]</span> <span class=o>=</span> <span class=p>{}</span> <span class=c1># component name -&gt; component_entry mapping</span>
<a id=__codelineno-0-223 name=__codelineno-0-223></a> <span class=bp>self</span><span class=o>.</span><span class=n>_tags</span><span class=p>:</span> <span class=n>Dict</span><span class=p>[</span><span class=nb>str</span><span class=p>,</span> <span class=n>Set</span><span class=p>[</span><span class=nb>str</span><span class=p>]]</span> <span class=o>=</span> <span class=p>{}</span> <span class=c1># tag -&gt; list[component names]</span>
<a id=__codelineno-0-224 name=__codelineno-0-224></a> <span class=bp>self</span><span class=o>.</span><span class=n>_library</span> <span class=o>=</span> <span class=n>library</span>
<a id=__codelineno-0-225 name=__codelineno-0-225></a> <span class=bp>self</span><span class=o>.</span><span class=n>_settings_input</span> <span class=o>=</span> <span class=n>settings</span>
<a id=__codelineno-0-226 name=__codelineno-0-226></a> <span class=bp>self</span><span class=o>.</span><span class=n>_settings</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>Callable</span><span class=p>[[],</span> <span class=n>InternalRegistrySettings</span><span class=p>]]</span> <span class=o>=</span> <span class=kc>None</span>
<a id=__codelineno-0-227 name=__codelineno-0-227></a>
<a id=__codelineno-0-228 name=__codelineno-0-228></a> <span class=n>all_registries</span><span class=o>.</span><span class=n>append</span><span class=p>(</span><span class=bp>self</span><span class=p>)</span>
</code></pre></div></td></tr></table></div> </details> <div class="doc doc-children"> <div class="doc doc-object doc-attribute"> <h4 id=django_components.component_registry.ComponentRegistry.library class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">library</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-property"><code>property</code></small> </span> <a href=#django_components.component_registry.ComponentRegistry.library class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>library</span><span class=p>:</span> <span class=n><span title=django.template.Library>Library</span></span>
</code></pre></div> <div class="doc doc-contents "> <p>The template tag <a href=https://docs.djangoproject.com/en/5.1/howto/custom-template-tags/#code-layout><code>Library</code></a> that is associated with the registry.</p> </div> </div> <div class="doc doc-object doc-attribute"> <h4 id=django_components.component_registry.ComponentRegistry.settings class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">settings</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-property"><code>property</code></small> </span> <a href=#django_components.component_registry.ComponentRegistry.settings class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>settings</span><span class=p>:</span> <span class=n><span title=django_components.component_registry.InternalRegistrySettings>InternalRegistrySettings</span></span>
</code></pre></div> <div class="doc doc-contents "> <p><a href=../api#django_components.RegistrySettings>Registry settings</a> configured for this registry.</p> </div> </div> <div class="doc doc-object doc-function"> <h4 id=django_components.component_registry.ComponentRegistry.all class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">all</span> <a href=#django_components.component_registry.ComponentRegistry.all class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nb>all</span><span class=p>()</span> <span class=o>-&gt;</span> <span class=nf><a class="autorefs autorefs-external" title=typing.Dict href=https://docs.python.org/3.12/library/typing.html#typing.Dict>Dict</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span> <span class=n><a class="autorefs autorefs-external" title=typing.Type href=https://docs.python.org/3.12/library/typing.html#typing.Type>Type</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-internal" title=django_components.component.Component href=#django_components.component.Component>Component</a></span><span class=p>]]</span>
</code></pre></div> <div class="doc doc-contents "> <p>Retrieve all registered <a href=../api#django_components.Component><code>Component</code></a> classes.</p> <p><span class=doc-section-title>Returns:</span></p> <ul> <li class="doc-section-item field-body"> <code><a class="autorefs autorefs-external" title=typing.Dict href=https://docs.python.org/3.12/library/typing.html#typing.Dict>Dict</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>, <a class="autorefs autorefs-external" title=typing.Type href=https://docs.python.org/3.12/library/typing.html#typing.Type>Type</a>[<a class="autorefs autorefs-internal" title=django_components.component.Component href=#django_components.component.Component>Component</a>]]</code> <div class=doc-md-description> <p>Dict[str, Type[Component]]: A dictionary of component names to component classes</p> </div> </li> </ul> <p><strong>Example:</strong></p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=c1># First register components</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a><span class=n>registry</span><span class=o>.</span><span class=n>register</span><span class=p>(</span><span class=s2>&quot;button&quot;</span><span class=p>,</span> <span class=n>ButtonComponent</span><span class=p>)</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=n>registry</span><span class=o>.</span><span class=n>register</span><span class=p>(</span><span class=s2>&quot;card&quot;</span><span class=p>,</span> <span class=n>CardComponent</span><span class=p>)</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a><span class=c1># Then get all</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a><span class=n>registry</span><span class=o>.</span><span class=n>all</span><span class=p>()</span>
<a id=__codelineno-0-6 name=__codelineno-0-6 href=#__codelineno-0-6></a><span class=c1># &gt; {</span>
<a id=__codelineno-0-7 name=__codelineno-0-7 href=#__codelineno-0-7></a><span class=c1># &gt; &quot;button&quot;: ButtonComponent,</span>
<a id=__codelineno-0-8 name=__codelineno-0-8 href=#__codelineno-0-8></a><span class=c1># &gt; &quot;card&quot;: CardComponent,</span>
<a id=__codelineno-0-9 name=__codelineno-0-9 href=#__codelineno-0-9></a><span class=c1># &gt; }</span>
</code></pre></div> <details class=quote> <summary>Source code in <code>src/django_components/component_registry.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-411>411</a></span>
<span class=normal><a href=#__codelineno-0-412>412</a></span>
<span class=normal><a href=#__codelineno-0-413>413</a></span>
<span class=normal><a href=#__codelineno-0-414>414</a></span>
<span class=normal><a href=#__codelineno-0-415>415</a></span>
<span class=normal><a href=#__codelineno-0-416>416</a></span>
<span class=normal><a href=#__codelineno-0-417>417</a></span>
<span class=normal><a href=#__codelineno-0-418>418</a></span>
<span class=normal><a href=#__codelineno-0-419>419</a></span>
<span class=normal><a href=#__codelineno-0-420>420</a></span>
<span class=normal><a href=#__codelineno-0-421>421</a></span>
<span class=normal><a href=#__codelineno-0-422>422</a></span>
<span class=normal><a href=#__codelineno-0-423>423</a></span>
<span class=normal><a href=#__codelineno-0-424>424</a></span>
<span class=normal><a href=#__codelineno-0-425>425</a></span>
<span class=normal><a href=#__codelineno-0-426>426</a></span>
<span class=normal><a href=#__codelineno-0-427>427</a></span>
<span class=normal><a href=#__codelineno-0-428>428</a></span>
<span class=normal><a href=#__codelineno-0-429>429</a></span>
<span class=normal><a href=#__codelineno-0-430>430</a></span>
<span class=normal><a href=#__codelineno-0-431>431</a></span>
<span class=normal><a href=#__codelineno-0-432>432</a></span>
<span class=normal><a href=#__codelineno-0-433>433</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-411 name=__codelineno-0-411></a><span class=k>def</span> <span class=nf>all</span><span class=p>(</span><span class=bp>self</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n>Dict</span><span class=p>[</span><span class=nb>str</span><span class=p>,</span> <span class=n>Type</span><span class=p>[</span><span class=s2>&quot;Component&quot;</span><span class=p>]]:</span>
<a id=__codelineno-0-412 name=__codelineno-0-412></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-413 name=__codelineno-0-413></a><span class=sd> Retrieve all registered [`Component`](../api#django_components.Component) classes.</span>
<a id=__codelineno-0-414 name=__codelineno-0-414></a>
<a id=__codelineno-0-415 name=__codelineno-0-415></a><span class=sd> Returns:</span>
<a id=__codelineno-0-416 name=__codelineno-0-416></a><span class=sd> Dict[str, Type[Component]]: A dictionary of component names to component classes</span>
<a id=__codelineno-0-417 name=__codelineno-0-417></a>
<a id=__codelineno-0-418 name=__codelineno-0-418></a><span class=sd> **Example:**</span>
<a id=__codelineno-0-419 name=__codelineno-0-419></a>
<a id=__codelineno-0-420 name=__codelineno-0-420></a><span class=sd> ```python</span>
<a id=__codelineno-0-421 name=__codelineno-0-421></a><span class=sd> # First register components</span>
<a id=__codelineno-0-422 name=__codelineno-0-422></a><span class=sd> registry.register(&quot;button&quot;, ButtonComponent)</span>
<a id=__codelineno-0-423 name=__codelineno-0-423></a><span class=sd> registry.register(&quot;card&quot;, CardComponent)</span>
<a id=__codelineno-0-424 name=__codelineno-0-424></a><span class=sd> # Then get all</span>
<a id=__codelineno-0-425 name=__codelineno-0-425></a><span class=sd> registry.all()</span>
<a id=__codelineno-0-426 name=__codelineno-0-426></a><span class=sd> # &gt; {</span>
<a id=__codelineno-0-427 name=__codelineno-0-427></a><span class=sd> # &gt; &quot;button&quot;: ButtonComponent,</span>
<a id=__codelineno-0-428 name=__codelineno-0-428></a><span class=sd> # &gt; &quot;card&quot;: CardComponent,</span>
<a id=__codelineno-0-429 name=__codelineno-0-429></a><span class=sd> # &gt; }</span>
<a id=__codelineno-0-430 name=__codelineno-0-430></a><span class=sd> ```</span>
<a id=__codelineno-0-431 name=__codelineno-0-431></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-432 name=__codelineno-0-432></a> <span class=n>comps</span> <span class=o>=</span> <span class=p>{</span><span class=n>key</span><span class=p>:</span> <span class=n>entry</span><span class=o>.</span><span class=n>cls</span> <span class=k>for</span> <span class=n>key</span><span class=p>,</span> <span class=n>entry</span> <span class=ow>in</span> <span class=bp>self</span><span class=o>.</span><span class=n>_registry</span><span class=o>.</span><span class=n>items</span><span class=p>()}</span>
<a id=__codelineno-0-433 name=__codelineno-0-433></a> <span class=k>return</span> <span class=n>comps</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h4 id=django_components.component_registry.ComponentRegistry.clear class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">clear</span> <a href=#django_components.component_registry.ComponentRegistry.clear class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>clear</span><span class=p>()</span> <span class=o>-&gt;</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>Clears the registry, unregistering all components.</p> <p>Example:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=c1># First register components</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a><span class=n>registry</span><span class=o>.</span><span class=n>register</span><span class=p>(</span><span class=s2>&quot;button&quot;</span><span class=p>,</span> <span class=n>ButtonComponent</span><span class=p>)</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=n>registry</span><span class=o>.</span><span class=n>register</span><span class=p>(</span><span class=s2>&quot;card&quot;</span><span class=p>,</span> <span class=n>CardComponent</span><span class=p>)</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a><span class=c1># Then clear</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a><span class=n>registry</span><span class=o>.</span><span class=n>clear</span><span class=p>()</span>
<a id=__codelineno-0-6 name=__codelineno-0-6 href=#__codelineno-0-6></a><span class=c1># Then get all</span>
<a id=__codelineno-0-7 name=__codelineno-0-7 href=#__codelineno-0-7></a><span class=n>registry</span><span class=o>.</span><span class=n>all</span><span class=p>()</span>
<a id=__codelineno-0-8 name=__codelineno-0-8 href=#__codelineno-0-8></a><span class=c1># &gt; {}</span>
</code></pre></div> <details class=quote> <summary>Source code in <code>src/django_components/component_registry.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-435>435</a></span>
<span class=normal><a href=#__codelineno-0-436>436</a></span>
<span class=normal><a href=#__codelineno-0-437>437</a></span>
<span class=normal><a href=#__codelineno-0-438>438</a></span>
<span class=normal><a href=#__codelineno-0-439>439</a></span>
<span class=normal><a href=#__codelineno-0-440>440</a></span>
<span class=normal><a href=#__codelineno-0-441>441</a></span>
<span class=normal><a href=#__codelineno-0-442>442</a></span>
<span class=normal><a href=#__codelineno-0-443>443</a></span>
<span class=normal><a href=#__codelineno-0-444>444</a></span>
<span class=normal><a href=#__codelineno-0-445>445</a></span>
<span class=normal><a href=#__codelineno-0-446>446</a></span>
<span class=normal><a href=#__codelineno-0-447>447</a></span>
<span class=normal><a href=#__codelineno-0-448>448</a></span>
<span class=normal><a href=#__codelineno-0-449>449</a></span>
<span class=normal><a href=#__codelineno-0-450>450</a></span>
<span class=normal><a href=#__codelineno-0-451>451</a></span>
<span class=normal><a href=#__codelineno-0-452>452</a></span>
<span class=normal><a href=#__codelineno-0-453>453</a></span>
<span class=normal><a href=#__codelineno-0-454>454</a></span>
<span class=normal><a href=#__codelineno-0-455>455</a></span>
<span class=normal><a href=#__codelineno-0-456>456</a></span>
<span class=normal><a href=#__codelineno-0-457>457</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-435 name=__codelineno-0-435></a><span class=k>def</span> <span class=nf>clear</span><span class=p>(</span><span class=bp>self</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=kc>None</span><span class=p>:</span>
<a id=__codelineno-0-436 name=__codelineno-0-436></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-437 name=__codelineno-0-437></a><span class=sd> Clears the registry, unregistering all components.</span>
<a id=__codelineno-0-438 name=__codelineno-0-438></a>
<a id=__codelineno-0-439 name=__codelineno-0-439></a><span class=sd> Example:</span>
<a id=__codelineno-0-440 name=__codelineno-0-440></a>
<a id=__codelineno-0-441 name=__codelineno-0-441></a><span class=sd> ```python</span>
<a id=__codelineno-0-442 name=__codelineno-0-442></a><span class=sd> # First register components</span>
<a id=__codelineno-0-443 name=__codelineno-0-443></a><span class=sd> registry.register(&quot;button&quot;, ButtonComponent)</span>
<a id=__codelineno-0-444 name=__codelineno-0-444></a><span class=sd> registry.register(&quot;card&quot;, CardComponent)</span>
<a id=__codelineno-0-445 name=__codelineno-0-445></a><span class=sd> # Then clear</span>
<a id=__codelineno-0-446 name=__codelineno-0-446></a><span class=sd> registry.clear()</span>
<a id=__codelineno-0-447 name=__codelineno-0-447></a><span class=sd> # Then get all</span>
<a id=__codelineno-0-448 name=__codelineno-0-448></a><span class=sd> registry.all()</span>
<a id=__codelineno-0-449 name=__codelineno-0-449></a><span class=sd> # &gt; {}</span>
<a id=__codelineno-0-450 name=__codelineno-0-450></a><span class=sd> ```</span>
<a id=__codelineno-0-451 name=__codelineno-0-451></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-452 name=__codelineno-0-452></a> <span class=n>all_comp_names</span> <span class=o>=</span> <span class=nb>list</span><span class=p>(</span><span class=bp>self</span><span class=o>.</span><span class=n>_registry</span><span class=o>.</span><span class=n>keys</span><span class=p>())</span>
<a id=__codelineno-0-453 name=__codelineno-0-453></a> <span class=k>for</span> <span class=n>comp_name</span> <span class=ow>in</span> <span class=n>all_comp_names</span><span class=p>:</span>
<a id=__codelineno-0-454 name=__codelineno-0-454></a> <span class=bp>self</span><span class=o>.</span><span class=n>unregister</span><span class=p>(</span><span class=n>comp_name</span><span class=p>)</span>
<a id=__codelineno-0-455 name=__codelineno-0-455></a>
<a id=__codelineno-0-456 name=__codelineno-0-456></a> <span class=bp>self</span><span class=o>.</span><span class=n>_registry</span> <span class=o>=</span> <span class=p>{}</span>
<a id=__codelineno-0-457 name=__codelineno-0-457></a> <span class=bp>self</span><span class=o>.</span><span class=n>_tags</span> <span class=o>=</span> <span class=p>{}</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h4 id=django_components.component_registry.ComponentRegistry.get class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">get</span> <a href=#django_components.component_registry.ComponentRegistry.get class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>get</span><span class=p>(</span><span class=n>name</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-external" title=typing.Type href=https://docs.python.org/3.12/library/typing.html#typing.Type>Type</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-internal" title=django_components.component.Component href=#django_components.component.Component>Component</a></span><span class=p>]</span>
</code></pre></div> <div class="doc doc-contents "> <p>Retrieve a <a href=../api#django_components.Component><code>Component</code></a> class registered under the given name.</p> <p><span class=doc-section-title>Parameters:</span></p> <ul> <li class="doc-section-item field-body"> <b><code>name</code></b> (<code><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></code>) <div class=doc-md-description> <p>The name under which the component was registered. Required.</p> </div> </li> </ul> <p><span class=doc-section-title>Returns:</span></p> <ul> <li class="doc-section-item field-body"> <code><a class="autorefs autorefs-external" title=typing.Type href=https://docs.python.org/3.12/library/typing.html#typing.Type>Type</a>[<a class="autorefs autorefs-internal" title=django_components.component.Component href=#django_components.component.Component>Component</a>]</code> <div class=doc-md-description> <p>Type[Component]: The component class registered under the given name.</p> </div> </li> </ul> <p><strong>Raises:</strong></p> <ul> <li><a href=../exceptions#django_components.NotRegistered><code>NotRegistered</code></a> if the given name is not registered.</li> </ul> <p><strong>Example:</strong></p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=c1># First register component</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a><span class=n>registry</span><span class=o>.</span><span class=n>register</span><span class=p>(</span><span class=s2>&quot;button&quot;</span><span class=p>,</span> <span class=n>ButtonComponent</span><span class=p>)</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=c1># Then get</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a><span class=n>registry</span><span class=o>.</span><span class=n>get</span><span class=p>(</span><span class=s2>&quot;button&quot;</span><span class=p>)</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a><span class=c1># &gt; ButtonComponent</span>
</code></pre></div> <details class=quote> <summary>Source code in <code>src/django_components/component_registry.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-380>380</a></span>
<span class=normal><a href=#__codelineno-0-381>381</a></span>
<span class=normal><a href=#__codelineno-0-382>382</a></span>
<span class=normal><a href=#__codelineno-0-383>383</a></span>
<span class=normal><a href=#__codelineno-0-384>384</a></span>
<span class=normal><a href=#__codelineno-0-385>385</a></span>
<span class=normal><a href=#__codelineno-0-386>386</a></span>
<span class=normal><a href=#__codelineno-0-387>387</a></span>
<span class=normal><a href=#__codelineno-0-388>388</a></span>
<span class=normal><a href=#__codelineno-0-389>389</a></span>
<span class=normal><a href=#__codelineno-0-390>390</a></span>
<span class=normal><a href=#__codelineno-0-391>391</a></span>
<span class=normal><a href=#__codelineno-0-392>392</a></span>
<span class=normal><a href=#__codelineno-0-393>393</a></span>
<span class=normal><a href=#__codelineno-0-394>394</a></span>
<span class=normal><a href=#__codelineno-0-395>395</a></span>
<span class=normal><a href=#__codelineno-0-396>396</a></span>
<span class=normal><a href=#__codelineno-0-397>397</a></span>
<span class=normal><a href=#__codelineno-0-398>398</a></span>
<span class=normal><a href=#__codelineno-0-399>399</a></span>
<span class=normal><a href=#__codelineno-0-400>400</a></span>
<span class=normal><a href=#__codelineno-0-401>401</a></span>
<span class=normal><a href=#__codelineno-0-402>402</a></span>
<span class=normal><a href=#__codelineno-0-403>403</a></span>
<span class=normal><a href=#__codelineno-0-404>404</a></span>
<span class=normal><a href=#__codelineno-0-405>405</a></span>
<span class=normal><a href=#__codelineno-0-406>406</a></span>
<span class=normal><a href=#__codelineno-0-407>407</a></span>
<span class=normal><a href=#__codelineno-0-408>408</a></span>
<span class=normal><a href=#__codelineno-0-409>409</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-380 name=__codelineno-0-380></a><span class=k>def</span> <span class=nf>get</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>name</span><span class=p>:</span> <span class=nb>str</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n>Type</span><span class=p>[</span><span class=s2>&quot;Component&quot;</span><span class=p>]:</span>
<a id=__codelineno-0-381 name=__codelineno-0-381></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-382 name=__codelineno-0-382></a><span class=sd> Retrieve a [`Component`](../api#django_components.Component)</span>
<a id=__codelineno-0-383 name=__codelineno-0-383></a><span class=sd> class registered under the given name.</span>
<a id=__codelineno-0-384 name=__codelineno-0-384></a>
<a id=__codelineno-0-385 name=__codelineno-0-385></a><span class=sd> Args:</span>
<a id=__codelineno-0-386 name=__codelineno-0-386></a><span class=sd> name (str): The name under which the component was registered. Required.</span>
<a id=__codelineno-0-387 name=__codelineno-0-387></a>
<a id=__codelineno-0-388 name=__codelineno-0-388></a><span class=sd> Returns:</span>
<a id=__codelineno-0-389 name=__codelineno-0-389></a><span class=sd> Type[Component]: The component class registered under the given name.</span>
<a id=__codelineno-0-390 name=__codelineno-0-390></a>
<a id=__codelineno-0-391 name=__codelineno-0-391></a><span class=sd> **Raises:**</span>
<a id=__codelineno-0-392 name=__codelineno-0-392></a>
<a id=__codelineno-0-393 name=__codelineno-0-393></a><span class=sd> - [`NotRegistered`](../exceptions#django_components.NotRegistered)</span>
<a id=__codelineno-0-394 name=__codelineno-0-394></a><span class=sd> if the given name is not registered.</span>
<a id=__codelineno-0-395 name=__codelineno-0-395></a>
<a id=__codelineno-0-396 name=__codelineno-0-396></a><span class=sd> **Example:**</span>
<a id=__codelineno-0-397 name=__codelineno-0-397></a>
<a id=__codelineno-0-398 name=__codelineno-0-398></a><span class=sd> ```python</span>
<a id=__codelineno-0-399 name=__codelineno-0-399></a><span class=sd> # First register component</span>
<a id=__codelineno-0-400 name=__codelineno-0-400></a><span class=sd> registry.register(&quot;button&quot;, ButtonComponent)</span>
<a id=__codelineno-0-401 name=__codelineno-0-401></a><span class=sd> # Then get</span>
<a id=__codelineno-0-402 name=__codelineno-0-402></a><span class=sd> registry.get(&quot;button&quot;)</span>
<a id=__codelineno-0-403 name=__codelineno-0-403></a><span class=sd> # &gt; ButtonComponent</span>
<a id=__codelineno-0-404 name=__codelineno-0-404></a><span class=sd> ```</span>
<a id=__codelineno-0-405 name=__codelineno-0-405></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-406 name=__codelineno-0-406></a> <span class=k>if</span> <span class=n>name</span> <span class=ow>not</span> <span class=ow>in</span> <span class=bp>self</span><span class=o>.</span><span class=n>_registry</span><span class=p>:</span>
<a id=__codelineno-0-407 name=__codelineno-0-407></a> <span class=k>raise</span> <span class=n>NotRegistered</span><span class=p>(</span><span class=s1>&#39;The component &quot;</span><span class=si>%s</span><span class=s1>&quot; is not registered&#39;</span> <span class=o>%</span> <span class=n>name</span><span class=p>)</span>
<a id=__codelineno-0-408 name=__codelineno-0-408></a>
<a id=__codelineno-0-409 name=__codelineno-0-409></a> <span class=k>return</span> <span class=bp>self</span><span class=o>.</span><span class=n>_registry</span><span class=p>[</span><span class=n>name</span><span class=p>]</span><span class=o>.</span><span class=n>cls</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h4 id=django_components.component_registry.ComponentRegistry.register class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">register</span> <a href=#django_components.component_registry.ComponentRegistry.register class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>register</span><span class=p>(</span><span class=n>name</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span> <span class=n>component</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Type href=https://docs.python.org/3.12/library/typing.html#typing.Type>Type</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-internal" title=django_components.component.Component href=#django_components.component.Component>Component</a></span><span class=p>])</span> <span class=o>-&gt;</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>Register a <a href=../api#django_components.Component><code>Component</code></a> class with this registry under the given name.</p> <p>A component MUST be registered before it can be used in a template such as: <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=cp>{%</span> <span class=k>component</span> <span class=s2>&quot;my_comp&quot;</span> <span class=cp>%}</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a><span class=cp>{%</span> <span class=k>endcomponent</span> <span class=cp>%}</span>
</code></pre></div></p> <p><span class=doc-section-title>Parameters:</span></p> <ul> <li class="doc-section-item field-body"> <b><code>name</code></b> (<code><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></code>) <div class=doc-md-description> <p>The name under which the component will be registered. Required.</p> </div> </li> <li class="doc-section-item field-body"> <b><code>component</code></b> (<code><a class="autorefs autorefs-external" title=typing.Type href=https://docs.python.org/3.12/library/typing.html#typing.Type>Type</a>[<a class="autorefs autorefs-internal" title=django_components.component.Component href=#django_components.component.Component>Component</a>]</code>) <div class=doc-md-description> <p>The component class to register. Required.</p> </div> </li> </ul> <p><strong>Raises:</strong></p> <ul> <li><a href=../exceptions#django_components.AlreadyRegistered><code>AlreadyRegistered</code></a> if a different component was already registered under the same name.</li> </ul> <p><strong>Example:</strong></p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>registry</span><span class=o>.</span><span class=n>register</span><span class=p>(</span><span class=s2>&quot;button&quot;</span><span class=p>,</span> <span class=n>ButtonComponent</span><span class=p>)</span>
</code></pre></div> <details class=quote> <summary>Source code in <code>src/django_components/component_registry.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-291>291</a></span>
<span class=normal><a href=#__codelineno-0-292>292</a></span>
<span class=normal><a href=#__codelineno-0-293>293</a></span>
<span class=normal><a href=#__codelineno-0-294>294</a></span>
<span class=normal><a href=#__codelineno-0-295>295</a></span>
<span class=normal><a href=#__codelineno-0-296>296</a></span>
<span class=normal><a href=#__codelineno-0-297>297</a></span>
<span class=normal><a href=#__codelineno-0-298>298</a></span>
<span class=normal><a href=#__codelineno-0-299>299</a></span>
<span class=normal><a href=#__codelineno-0-300>300</a></span>
<span class=normal><a href=#__codelineno-0-301>301</a></span>
<span class=normal><a href=#__codelineno-0-302>302</a></span>
<span class=normal><a href=#__codelineno-0-303>303</a></span>
<span class=normal><a href=#__codelineno-0-304>304</a></span>
<span class=normal><a href=#__codelineno-0-305>305</a></span>
<span class=normal><a href=#__codelineno-0-306>306</a></span>
<span class=normal><a href=#__codelineno-0-307>307</a></span>
<span class=normal><a href=#__codelineno-0-308>308</a></span>
<span class=normal><a href=#__codelineno-0-309>309</a></span>
<span class=normal><a href=#__codelineno-0-310>310</a></span>
<span class=normal><a href=#__codelineno-0-311>311</a></span>
<span class=normal><a href=#__codelineno-0-312>312</a></span>
<span class=normal><a href=#__codelineno-0-313>313</a></span>
<span class=normal><a href=#__codelineno-0-314>314</a></span>
<span class=normal><a href=#__codelineno-0-315>315</a></span>
<span class=normal><a href=#__codelineno-0-316>316</a></span>
<span class=normal><a href=#__codelineno-0-317>317</a></span>
<span class=normal><a href=#__codelineno-0-318>318</a></span>
<span class=normal><a href=#__codelineno-0-319>319</a></span>
<span class=normal><a href=#__codelineno-0-320>320</a></span>
<span class=normal><a href=#__codelineno-0-321>321</a></span>
<span class=normal><a href=#__codelineno-0-322>322</a></span>
<span class=normal><a href=#__codelineno-0-323>323</a></span>
<span class=normal><a href=#__codelineno-0-324>324</a></span>
<span class=normal><a href=#__codelineno-0-325>325</a></span>
<span class=normal><a href=#__codelineno-0-326>326</a></span>
<span class=normal><a href=#__codelineno-0-327>327</a></span>
<span class=normal><a href=#__codelineno-0-328>328</a></span>
<span class=normal><a href=#__codelineno-0-329>329</a></span>
<span class=normal><a href=#__codelineno-0-330>330</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-291 name=__codelineno-0-291></a><span class=k>def</span> <span class=nf>register</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>name</span><span class=p>:</span> <span class=nb>str</span><span class=p>,</span> <span class=n>component</span><span class=p>:</span> <span class=n>Type</span><span class=p>[</span><span class=s2>&quot;Component&quot;</span><span class=p>])</span> <span class=o>-&gt;</span> <span class=kc>None</span><span class=p>:</span>
<a id=__codelineno-0-292 name=__codelineno-0-292></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-293 name=__codelineno-0-293></a><span class=sd> Register a [`Component`](../api#django_components.Component) class</span>
<a id=__codelineno-0-294 name=__codelineno-0-294></a><span class=sd> with this registry under the given name.</span>
<a id=__codelineno-0-295 name=__codelineno-0-295></a>
<a id=__codelineno-0-296 name=__codelineno-0-296></a><span class=sd> A component MUST be registered before it can be used in a template such as:</span>
<a id=__codelineno-0-297 name=__codelineno-0-297></a><span class=sd> ```django</span>
<a id=__codelineno-0-298 name=__codelineno-0-298></a><span class=sd> {% component &quot;my_comp&quot; %}</span>
<a id=__codelineno-0-299 name=__codelineno-0-299></a><span class=sd> {% endcomponent %}</span>
<a id=__codelineno-0-300 name=__codelineno-0-300></a><span class=sd> ```</span>
<a id=__codelineno-0-301 name=__codelineno-0-301></a>
<a id=__codelineno-0-302 name=__codelineno-0-302></a><span class=sd> Args:</span>
<a id=__codelineno-0-303 name=__codelineno-0-303></a><span class=sd> name (str): The name under which the component will be registered. Required.</span>
<a id=__codelineno-0-304 name=__codelineno-0-304></a><span class=sd> component (Type[Component]): The component class to register. Required.</span>
<a id=__codelineno-0-305 name=__codelineno-0-305></a>
<a id=__codelineno-0-306 name=__codelineno-0-306></a><span class=sd> **Raises:**</span>
<a id=__codelineno-0-307 name=__codelineno-0-307></a>
<a id=__codelineno-0-308 name=__codelineno-0-308></a><span class=sd> - [`AlreadyRegistered`](../exceptions#django_components.AlreadyRegistered)</span>
<a id=__codelineno-0-309 name=__codelineno-0-309></a><span class=sd> if a different component was already registered under the same name.</span>
<a id=__codelineno-0-310 name=__codelineno-0-310></a>
<a id=__codelineno-0-311 name=__codelineno-0-311></a><span class=sd> **Example:**</span>
<a id=__codelineno-0-312 name=__codelineno-0-312></a>
<a id=__codelineno-0-313 name=__codelineno-0-313></a><span class=sd> ```python</span>
<a id=__codelineno-0-314 name=__codelineno-0-314></a><span class=sd> registry.register(&quot;button&quot;, ButtonComponent)</span>
<a id=__codelineno-0-315 name=__codelineno-0-315></a><span class=sd> ```</span>
<a id=__codelineno-0-316 name=__codelineno-0-316></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-317 name=__codelineno-0-317></a> <span class=n>existing_component</span> <span class=o>=</span> <span class=bp>self</span><span class=o>.</span><span class=n>_registry</span><span class=o>.</span><span class=n>get</span><span class=p>(</span><span class=n>name</span><span class=p>)</span>
<a id=__codelineno-0-318 name=__codelineno-0-318></a> <span class=k>if</span> <span class=n>existing_component</span> <span class=ow>and</span> <span class=n>existing_component</span><span class=o>.</span><span class=n>cls</span><span class=o>.</span><span class=n>_class_hash</span> <span class=o>!=</span> <span class=n>component</span><span class=o>.</span><span class=n>_class_hash</span><span class=p>:</span>
<a id=__codelineno-0-319 name=__codelineno-0-319></a> <span class=k>raise</span> <span class=n>AlreadyRegistered</span><span class=p>(</span><span class=s1>&#39;The component &quot;</span><span class=si>%s</span><span class=s1>&quot; has already been registered&#39;</span> <span class=o>%</span> <span class=n>name</span><span class=p>)</span>
<a id=__codelineno-0-320 name=__codelineno-0-320></a>
<a id=__codelineno-0-321 name=__codelineno-0-321></a> <span class=n>entry</span> <span class=o>=</span> <span class=bp>self</span><span class=o>.</span><span class=n>_register_to_library</span><span class=p>(</span><span class=n>name</span><span class=p>,</span> <span class=n>component</span><span class=p>)</span>
<a id=__codelineno-0-322 name=__codelineno-0-322></a>
<a id=__codelineno-0-323 name=__codelineno-0-323></a> <span class=c1># Keep track of which components use which tags, because multiple components may</span>
<a id=__codelineno-0-324 name=__codelineno-0-324></a> <span class=c1># use the same tag.</span>
<a id=__codelineno-0-325 name=__codelineno-0-325></a> <span class=n>tag</span> <span class=o>=</span> <span class=n>entry</span><span class=o>.</span><span class=n>tag</span>
<a id=__codelineno-0-326 name=__codelineno-0-326></a> <span class=k>if</span> <span class=n>tag</span> <span class=ow>not</span> <span class=ow>in</span> <span class=bp>self</span><span class=o>.</span><span class=n>_tags</span><span class=p>:</span>
<a id=__codelineno-0-327 name=__codelineno-0-327></a> <span class=bp>self</span><span class=o>.</span><span class=n>_tags</span><span class=p>[</span><span class=n>tag</span><span class=p>]</span> <span class=o>=</span> <span class=nb>set</span><span class=p>()</span>
<a id=__codelineno-0-328 name=__codelineno-0-328></a> <span class=bp>self</span><span class=o>.</span><span class=n>_tags</span><span class=p>[</span><span class=n>tag</span><span class=p>]</span><span class=o>.</span><span class=n>add</span><span class=p>(</span><span class=n>name</span><span class=p>)</span>
<a id=__codelineno-0-329 name=__codelineno-0-329></a>
<a id=__codelineno-0-330 name=__codelineno-0-330></a> <span class=bp>self</span><span class=o>.</span><span class=n>_registry</span><span class=p>[</span><span class=n>name</span><span class=p>]</span> <span class=o>=</span> <span class=n>entry</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h4 id=django_components.component_registry.ComponentRegistry.unregister class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">unregister</span> <a href=#django_components.component_registry.ComponentRegistry.unregister class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>unregister</span><span class=p>(</span><span class=n>name</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>)</span> <span class=o>-&gt;</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>Unregister the <a href=../api#django_components.Component><code>Component</code></a> class that was registered under the given name.</p> <p>Once a component is unregistered, it is no longer available in the templates.</p> <p><span class=doc-section-title>Parameters:</span></p> <ul> <li class="doc-section-item field-body"> <b><code>name</code></b> (<code><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></code>) <div class=doc-md-description> <p>The name under which the component is registered. Required.</p> </div> </li> </ul> <p><strong>Raises:</strong></p> <ul> <li><a href=../exceptions#django_components.NotRegistered><code>NotRegistered</code></a> if the given name is not registered.</li> </ul> <p><strong>Example:</strong></p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=c1># First register component</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a><span class=n>registry</span><span class=o>.</span><span class=n>register</span><span class=p>(</span><span class=s2>&quot;button&quot;</span><span class=p>,</span> <span class=n>ButtonComponent</span><span class=p>)</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=c1># Then unregister</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a><span class=n>registry</span><span class=o>.</span><span class=n>unregister</span><span class=p>(</span><span class=s2>&quot;button&quot;</span><span class=p>)</span>
</code></pre></div> <details class=quote> <summary>Source code in <code>src/django_components/component_registry.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-332>332</a></span>
<span class=normal><a href=#__codelineno-0-333>333</a></span>
<span class=normal><a href=#__codelineno-0-334>334</a></span>
<span class=normal><a href=#__codelineno-0-335>335</a></span>
<span class=normal><a href=#__codelineno-0-336>336</a></span>
<span class=normal><a href=#__codelineno-0-337>337</a></span>
<span class=normal><a href=#__codelineno-0-338>338</a></span>
<span class=normal><a href=#__codelineno-0-339>339</a></span>
<span class=normal><a href=#__codelineno-0-340>340</a></span>
<span class=normal><a href=#__codelineno-0-341>341</a></span>
<span class=normal><a href=#__codelineno-0-342>342</a></span>
<span class=normal><a href=#__codelineno-0-343>343</a></span>
<span class=normal><a href=#__codelineno-0-344>344</a></span>
<span class=normal><a href=#__codelineno-0-345>345</a></span>
<span class=normal><a href=#__codelineno-0-346>346</a></span>
<span class=normal><a href=#__codelineno-0-347>347</a></span>
<span class=normal><a href=#__codelineno-0-348>348</a></span>
<span class=normal><a href=#__codelineno-0-349>349</a></span>
<span class=normal><a href=#__codelineno-0-350>350</a></span>
<span class=normal><a href=#__codelineno-0-351>351</a></span>
<span class=normal><a href=#__codelineno-0-352>352</a></span>
<span class=normal><a href=#__codelineno-0-353>353</a></span>
<span class=normal><a href=#__codelineno-0-354>354</a></span>
<span class=normal><a href=#__codelineno-0-355>355</a></span>
<span class=normal><a href=#__codelineno-0-356>356</a></span>
<span class=normal><a href=#__codelineno-0-357>357</a></span>
<span class=normal><a href=#__codelineno-0-358>358</a></span>
<span class=normal><a href=#__codelineno-0-359>359</a></span>
<span class=normal><a href=#__codelineno-0-360>360</a></span>
<span class=normal><a href=#__codelineno-0-361>361</a></span>
<span class=normal><a href=#__codelineno-0-362>362</a></span>
<span class=normal><a href=#__codelineno-0-363>363</a></span>
<span class=normal><a href=#__codelineno-0-364>364</a></span>
<span class=normal><a href=#__codelineno-0-365>365</a></span>
<span class=normal><a href=#__codelineno-0-366>366</a></span>
<span class=normal><a href=#__codelineno-0-367>367</a></span>
<span class=normal><a href=#__codelineno-0-368>368</a></span>
<span class=normal><a href=#__codelineno-0-369>369</a></span>
<span class=normal><a href=#__codelineno-0-370>370</a></span>
<span class=normal><a href=#__codelineno-0-371>371</a></span>
<span class=normal><a href=#__codelineno-0-372>372</a></span>
<span class=normal><a href=#__codelineno-0-373>373</a></span>
<span class=normal><a href=#__codelineno-0-374>374</a></span>
<span class=normal><a href=#__codelineno-0-375>375</a></span>
<span class=normal><a href=#__codelineno-0-376>376</a></span>
<span class=normal><a href=#__codelineno-0-377>377</a></span>
<span class=normal><a href=#__codelineno-0-378>378</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-332 name=__codelineno-0-332></a><span class=k>def</span> <span class=nf>unregister</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>name</span><span class=p>:</span> <span class=nb>str</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=kc>None</span><span class=p>:</span>
<a id=__codelineno-0-333 name=__codelineno-0-333></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-334 name=__codelineno-0-334></a><span class=sd> Unregister the [`Component`](../api#django_components.Component) class</span>
<a id=__codelineno-0-335 name=__codelineno-0-335></a><span class=sd> that was registered under the given name.</span>
<a id=__codelineno-0-336 name=__codelineno-0-336></a>
<a id=__codelineno-0-337 name=__codelineno-0-337></a><span class=sd> Once a component is unregistered, it is no longer available in the templates.</span>
<a id=__codelineno-0-338 name=__codelineno-0-338></a>
<a id=__codelineno-0-339 name=__codelineno-0-339></a><span class=sd> Args:</span>
<a id=__codelineno-0-340 name=__codelineno-0-340></a><span class=sd> name (str): The name under which the component is registered. Required.</span>
<a id=__codelineno-0-341 name=__codelineno-0-341></a>
<a id=__codelineno-0-342 name=__codelineno-0-342></a><span class=sd> **Raises:**</span>
<a id=__codelineno-0-343 name=__codelineno-0-343></a>
<a id=__codelineno-0-344 name=__codelineno-0-344></a><span class=sd> - [`NotRegistered`](../exceptions#django_components.NotRegistered)</span>
<a id=__codelineno-0-345 name=__codelineno-0-345></a><span class=sd> if the given name is not registered.</span>
<a id=__codelineno-0-346 name=__codelineno-0-346></a>
<a id=__codelineno-0-347 name=__codelineno-0-347></a><span class=sd> **Example:**</span>
<a id=__codelineno-0-348 name=__codelineno-0-348></a>
<a id=__codelineno-0-349 name=__codelineno-0-349></a><span class=sd> ```python</span>
<a id=__codelineno-0-350 name=__codelineno-0-350></a><span class=sd> # First register component</span>
<a id=__codelineno-0-351 name=__codelineno-0-351></a><span class=sd> registry.register(&quot;button&quot;, ButtonComponent)</span>
<a id=__codelineno-0-352 name=__codelineno-0-352></a><span class=sd> # Then unregister</span>
<a id=__codelineno-0-353 name=__codelineno-0-353></a><span class=sd> registry.unregister(&quot;button&quot;)</span>
<a id=__codelineno-0-354 name=__codelineno-0-354></a><span class=sd> ```</span>
<a id=__codelineno-0-355 name=__codelineno-0-355></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-356 name=__codelineno-0-356></a> <span class=c1># Validate</span>
<a id=__codelineno-0-357 name=__codelineno-0-357></a> <span class=bp>self</span><span class=o>.</span><span class=n>get</span><span class=p>(</span><span class=n>name</span><span class=p>)</span>
<a id=__codelineno-0-358 name=__codelineno-0-358></a>
<a id=__codelineno-0-359 name=__codelineno-0-359></a> <span class=n>entry</span> <span class=o>=</span> <span class=bp>self</span><span class=o>.</span><span class=n>_registry</span><span class=p>[</span><span class=n>name</span><span class=p>]</span>
<a id=__codelineno-0-360 name=__codelineno-0-360></a> <span class=n>tag</span> <span class=o>=</span> <span class=n>entry</span><span class=o>.</span><span class=n>tag</span>
<a id=__codelineno-0-361 name=__codelineno-0-361></a>
<a id=__codelineno-0-362 name=__codelineno-0-362></a> <span class=c1># Unregister the tag from library if this was the last component using this tag</span>
<a id=__codelineno-0-363 name=__codelineno-0-363></a> <span class=c1># Unlink component from tag</span>
<a id=__codelineno-0-364 name=__codelineno-0-364></a> <span class=bp>self</span><span class=o>.</span><span class=n>_tags</span><span class=p>[</span><span class=n>tag</span><span class=p>]</span><span class=o>.</span><span class=n>remove</span><span class=p>(</span><span class=n>name</span><span class=p>)</span>
<a id=__codelineno-0-365 name=__codelineno-0-365></a>
<a id=__codelineno-0-366 name=__codelineno-0-366></a> <span class=c1># Cleanup</span>
<a id=__codelineno-0-367 name=__codelineno-0-367></a> <span class=n>is_tag_empty</span> <span class=o>=</span> <span class=ow>not</span> <span class=nb>len</span><span class=p>(</span><span class=bp>self</span><span class=o>.</span><span class=n>_tags</span><span class=p>[</span><span class=n>tag</span><span class=p>])</span>
<a id=__codelineno-0-368 name=__codelineno-0-368></a> <span class=k>if</span> <span class=n>is_tag_empty</span><span class=p>:</span>
<a id=__codelineno-0-369 name=__codelineno-0-369></a> <span class=k>del</span> <span class=bp>self</span><span class=o>.</span><span class=n>_tags</span><span class=p>[</span><span class=n>tag</span><span class=p>]</span>
<a id=__codelineno-0-370 name=__codelineno-0-370></a>
<a id=__codelineno-0-371 name=__codelineno-0-371></a> <span class=c1># Only unregister a tag if it&#39;s NOT protected</span>
<a id=__codelineno-0-372 name=__codelineno-0-372></a> <span class=n>is_protected</span> <span class=o>=</span> <span class=n>is_tag_protected</span><span class=p>(</span><span class=bp>self</span><span class=o>.</span><span class=n>library</span><span class=p>,</span> <span class=n>tag</span><span class=p>)</span>
<a id=__codelineno-0-373 name=__codelineno-0-373></a> <span class=k>if</span> <span class=ow>not</span> <span class=n>is_protected</span><span class=p>:</span>
<a id=__codelineno-0-374 name=__codelineno-0-374></a> <span class=c1># Unregister the tag from library if this was the last component using this tag</span>
<a id=__codelineno-0-375 name=__codelineno-0-375></a> <span class=k>if</span> <span class=n>is_tag_empty</span> <span class=ow>and</span> <span class=n>tag</span> <span class=ow>in</span> <span class=bp>self</span><span class=o>.</span><span class=n>library</span><span class=o>.</span><span class=n>tags</span><span class=p>:</span>
<a id=__codelineno-0-376 name=__codelineno-0-376></a> <span class=k>del</span> <span class=bp>self</span><span class=o>.</span><span class=n>library</span><span class=o>.</span><span class=n>tags</span><span class=p>[</span><span class=n>tag</span><span class=p>]</span>
<a id=__codelineno-0-377 name=__codelineno-0-377></a>
<a id=__codelineno-0-378 name=__codelineno-0-378></a> <span class=k>del</span> <span class=bp>self</span><span class=o>.</span><span class=n>_registry</span><span class=p>[</span><span class=n>name</span><span class=p>]</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> </div> </div> </div> <div class="doc doc-object doc-class"> <h3 id=django_components.component_registry.NotRegistered class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-class"></code> <span class="doc doc-object-name doc-class-name">NotRegistered</span> <a href=#django_components.component_registry.NotRegistered class=headerlink title="Permanent link">¤</a></h3> <div class="doc doc-contents "> <p class="doc doc-class-bases"> Bases: <code><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/exceptions.html#Exception>Exception</a></code></p> <p>Raised when you try to access a <a href=../api#django_components#Component>Component</a>, but it's NOT registered with given <a href=../api#django_components.ComponentRegistry>ComponentRegistry</a>.</p> </div> </div> <div class="doc doc-object doc-class"> <h3 id=django_components.component_registry.RegistrySettings class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-class"></code> <span class="doc doc-object-name doc-class-name">RegistrySettings</span> <a href=#django_components.component_registry.RegistrySettings class=headerlink title="Permanent link">¤</a></h3> <div class="doc doc-contents "> <p class="doc doc-class-bases"> Bases: <code><a class="autorefs autorefs-external" title=typing.NamedTuple href=https://docs.python.org/3.12/library/typing.html#typing.NamedTuple>NamedTuple</a></code></p> <p>Configuration for a <a href=../api#django_components.ComponentRegistry><code>ComponentRegistry</code></a>.</p> <p>These settings define how the components registered with this registry will behave when rendered.</p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=kn>from</span> <span class=nn>django_components</span> <span class=kn>import</span> <span class=n>ComponentRegistry</span><span class=p>,</span> <span class=n>RegistrySettings</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=n>registry_settings</span> <span class=o>=</span> <span class=n>RegistrySettings</span><span class=p>(</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a> <span class=n>context_behavior</span><span class=o>=</span><span class=s2>&quot;django&quot;</span><span class=p>,</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a> <span class=n>tag_formatter</span><span class=o>=</span><span class=s2>&quot;django_components.component_shorthand_formatter&quot;</span><span class=p>,</span>
<a id=__codelineno-0-6 name=__codelineno-0-6 href=#__codelineno-0-6></a><span class=p>)</span>
<a id=__codelineno-0-7 name=__codelineno-0-7 href=#__codelineno-0-7></a>
<a id=__codelineno-0-8 name=__codelineno-0-8 href=#__codelineno-0-8></a><span class=n>registry</span> <span class=o>=</span> <span class=n>ComponentRegistry</span><span class=p>(</span><span class=n>settings</span><span class=o>=</span><span class=n>registry_settings</span><span class=p>)</span>
</code></pre></div> <p><span class=doc-section-title>Attributes:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.component_registry.RegistrySettings.CONTEXT_BEHAVIOR href=#django_components.component_registry.RegistrySettings.CONTEXT_BEHAVIOR>CONTEXT_BEHAVIOR</a></code></b> (<code><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a>[<span title=django_components.app_settings.ContextBehaviorType>ContextBehaviorType</span>]</code>) <div class=doc-md-description> <p><em>Deprecated. Use <code>context_behavior</code> instead. Will be removed in v1.</em></p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.component_registry.RegistrySettings.TAG_FORMATTER href=#django_components.component_registry.RegistrySettings.TAG_FORMATTER>TAG_FORMATTER</a></code></b> (<code><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a>[<a class="autorefs autorefs-external" title=typing.Union href=https://docs.python.org/3.12/library/typing.html#typing.Union>Union</a>[<a class="autorefs autorefs-internal" title=django_components.tag_formatter.TagFormatterABC href=#django_components.tag_formatter.TagFormatterABC>TagFormatterABC</a>, <a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>]]</code>) <div class=doc-md-description> <p><em>Deprecated. Use <code>tag_formatter</code> instead. Will be removed in v1.</em></p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.component_registry.RegistrySettings.context_behavior href=#django_components.component_registry.RegistrySettings.context_behavior>context_behavior</a></code></b> (<code><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a>[<span title=django_components.app_settings.ContextBehaviorType>ContextBehaviorType</span>]</code>) <div class=doc-md-description> <p>Same as the global</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.component_registry.RegistrySettings.tag_formatter href=#django_components.component_registry.RegistrySettings.tag_formatter>tag_formatter</a></code></b> (<code><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a>[<a class="autorefs autorefs-external" title=typing.Union href=https://docs.python.org/3.12/library/typing.html#typing.Union>Union</a>[<a class="autorefs autorefs-internal" title=django_components.tag_formatter.TagFormatterABC href=#django_components.tag_formatter.TagFormatterABC>TagFormatterABC</a>, <a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>]]</code>) <div class=doc-md-description> <p>Same as the global</p> </div> </li> </ul> <div class="doc doc-children"> <div class="doc doc-object doc-attribute"> <h4 id=django_components.component_registry.RegistrySettings.CONTEXT_BEHAVIOR class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">CONTEXT_BEHAVIOR</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.component_registry.RegistrySettings.CONTEXT_BEHAVIOR class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>CONTEXT_BEHAVIOR</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><span title=django_components.app_settings.ContextBehaviorType>ContextBehaviorType</span></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p><em>Deprecated. Use <code>context_behavior</code> instead. Will be removed in v1.</em></p> <p>Same as the global <a href=../settings#django_components.app_settings.ComponentsSettings.context_behavior><code>COMPONENTS.context_behavior</code></a> setting, but for this registry.</p> <p>If omitted, defaults to the global <a href=../settings#django_components.app_settings.ComponentsSettings.context_behavior><code>COMPONENTS.context_behavior</code></a> setting.</p> </div> </div> <div class="doc doc-object doc-attribute"> <h4 id=django_components.component_registry.RegistrySettings.TAG_FORMATTER class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">TAG_FORMATTER</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.component_registry.RegistrySettings.TAG_FORMATTER class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>TAG_FORMATTER</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Union href=https://docs.python.org/3.12/library/typing.html#typing.Union>Union</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-internal" title=django_components.tag_formatter.TagFormatterABC href=#django_components.tag_formatter.TagFormatterABC>TagFormatterABC</a></span><span class=p>,</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]]</span> <span class=o>=</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p><em>Deprecated. Use <code>tag_formatter</code> instead. Will be removed in v1.</em></p> <p>Same as the global <a href=../settings#django_components.app_settings.ComponentsSettings.tag_formatter><code>COMPONENTS.tag_formatter</code></a> setting, but for this registry.</p> <p>If omitted, defaults to the global <a href=../settings#django_components.app_settings.ComponentsSettings.tag_formatter><code>COMPONENTS.tag_formatter</code></a> setting.</p> </div> </div> <div class="doc doc-object doc-attribute"> <h4 id=django_components.component_registry.RegistrySettings.context_behavior class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">context_behavior</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.component_registry.RegistrySettings.context_behavior class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>context_behavior</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><span title=django_components.app_settings.ContextBehaviorType>ContextBehaviorType</span></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>Same as the global <a href=../settings#django_components.app_settings.ComponentsSettings.context_behavior><code>COMPONENTS.context_behavior</code></a> setting, but for this registry.</p> <p>If omitted, defaults to the global <a href=../settings#django_components.app_settings.ComponentsSettings.context_behavior><code>COMPONENTS.context_behavior</code></a> setting.</p> </div> </div> <div class="doc doc-object doc-attribute"> <h4 id=django_components.component_registry.RegistrySettings.tag_formatter class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">tag_formatter</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.component_registry.RegistrySettings.tag_formatter class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>tag_formatter</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Union href=https://docs.python.org/3.12/library/typing.html#typing.Union>Union</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-internal" title=django_components.tag_formatter.TagFormatterABC href=#django_components.tag_formatter.TagFormatterABC>TagFormatterABC</a></span><span class=p>,</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]]</span> <span class=o>=</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>Same as the global <a href=../settings#django_components.app_settings.ComponentsSettings.tag_formatter><code>COMPONENTS.tag_formatter</code></a> setting, but for this registry.</p> <p>If omitted, defaults to the global <a href=../settings#django_components.app_settings.ComponentsSettings.tag_formatter><code>COMPONENTS.tag_formatter</code></a> setting.</p> </div> </div> </div> </div> </div> <div class="doc doc-object doc-function"> <h3 id=django_components.component_registry.register class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-function"></code> <span class="doc doc-object-name doc-function-name">register</span> <a href=#django_components.component_registry.register class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>register</span><span class=p>(</span><span class=n>name</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span> <span class=n>registry</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-internal" title=django_components.component_registry.ComponentRegistry href=#django_components.component_registry.ComponentRegistry>ComponentRegistry</a></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-external" title=typing.Callable href=https://docs.python.org/3.12/library/typing.html#typing.Callable>Callable</a></span><span class=p>[</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a> <span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Type href=https://docs.python.org/3.12/library/typing.html#typing.Type>Type</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-internal" title=django_components.component.Component href=#django_components.component.Component>Component</a></span><span class=p>[</span><span class=n><span title=django_components.component.ArgsType>ArgsType</span></span><span class=p>,</span> <span class=n><span title=django_components.component.KwargsType>KwargsType</span></span><span class=p>,</span> <span class=n><span title=django_components.component.SlotsType>SlotsType</span></span><span class=p>,</span> <span class=n><span title=django_components.component.DataType>DataType</span></span><span class=p>,</span> <span class=n><span title=django_components.component.JsDataType>JsDataType</span></span><span class=p>,</span> <span class=n><span title=django_components.component.CssDataType>CssDataType</span></span><span class=p>]]],</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a> <span class=n><a class="autorefs autorefs-external" title=typing.Type href=https://docs.python.org/3.12/library/typing.html#typing.Type>Type</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-internal" title=django_components.component.Component href=#django_components.component.Component>Component</a></span><span class=p>[</span><span class=n><span title=django_components.component.ArgsType>ArgsType</span></span><span class=p>,</span> <span class=n><span title=django_components.component.KwargsType>KwargsType</span></span><span class=p>,</span> <span class=n><span title=django_components.component.SlotsType>SlotsType</span></span><span class=p>,</span> <span class=n><span title=django_components.component.DataType>DataType</span></span><span class=p>,</span> <span class=n><span title=django_components.component.JsDataType>JsDataType</span></span><span class=p>,</span> <span class=n><span title=django_components.component.CssDataType>CssDataType</span></span><span class=p>]],</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a><span class=p>]</span>
</code></pre></div> <div class="doc doc-contents "> <p>Class decorator for registering a <a href=./#django_components.Component>component</a> to a <a href=./#django_components.ComponentRegistry>component registry</a>.</p> <p>See <a href=../../concepts/advanced/component_registry>Registering components</a>.</p> <p><span class=doc-section-title>Parameters:</span></p> <ul> <li class="doc-section-item field-body"> <b><code>name</code></b> (<code><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></code>) <div class=doc-md-description> <p>Registered name. This is the name by which the component will be accessed from within a template when using the <a href=../template_tags#component><code>{% component %}</code></a> tag. Required.</p> </div> </li> <li class="doc-section-item field-body"> <b><code>registry</code></b> (<code><a class="autorefs autorefs-internal" title=django_components.component_registry.ComponentRegistry href=#django_components.component_registry.ComponentRegistry>ComponentRegistry</a></code>, default: <code>None</code> ) <div class=doc-md-description> <p>Specify the <a href=./#django_components.ComponentRegistry>registry</a> to which to register this component. If omitted, component is registered to the default registry.</p> </div> </li> </ul> <p><span class=doc-section-title>Raises:</span></p> <ul> <li class="doc-section-item field-body"> <code><a class="autorefs autorefs-internal" title=django_components.component_registry.AlreadyRegistered href=#django_components.component_registry.AlreadyRegistered>AlreadyRegistered</a></code> <div class=doc-md-description> <p>If there is already a component registered under the same name.</p> </div> </li> </ul> <p><strong>Examples</strong>:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=kn>from</span> <span class=nn>django_components</span> <span class=kn>import</span> <span class=n>Component</span><span class=p>,</span> <span class=n>register</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=nd>@register</span><span class=p>(</span><span class=s2>&quot;my_component&quot;</span><span class=p>)</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a><span class=k>class</span> <span class=nc>MyComponent</span><span class=p>(</span><span class=n>Component</span><span class=p>):</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a> <span class=o>...</span>
</code></pre></div> <p>Specifing <a href=./#django_components.ComponentRegistry><code>ComponentRegistry</code></a> the component should be registered to by setting the <code>registry</code> kwarg:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-1-1 name=__codelineno-1-1 href=#__codelineno-1-1></a><span class=kn>from</span> <span class=nn>django.template</span> <span class=kn>import</span> <span class=n>Library</span>
<a id=__codelineno-1-2 name=__codelineno-1-2 href=#__codelineno-1-2></a><span class=kn>from</span> <span class=nn>django_components</span> <span class=kn>import</span> <span class=n>Component</span><span class=p>,</span> <span class=n>ComponentRegistry</span><span class=p>,</span> <span class=n>register</span>
<a id=__codelineno-1-3 name=__codelineno-1-3 href=#__codelineno-1-3></a>
<a id=__codelineno-1-4 name=__codelineno-1-4 href=#__codelineno-1-4></a><span class=n>my_lib</span> <span class=o>=</span> <span class=n>Library</span><span class=p>()</span>
<a id=__codelineno-1-5 name=__codelineno-1-5 href=#__codelineno-1-5></a><span class=n>my_reg</span> <span class=o>=</span> <span class=n>ComponentRegistry</span><span class=p>(</span><span class=n>library</span><span class=o>=</span><span class=n>my_lib</span><span class=p>)</span>
<a id=__codelineno-1-6 name=__codelineno-1-6 href=#__codelineno-1-6></a>
<a id=__codelineno-1-7 name=__codelineno-1-7 href=#__codelineno-1-7></a><span class=nd>@register</span><span class=p>(</span><span class=s2>&quot;my_component&quot;</span><span class=p>,</span> <span class=n>registry</span><span class=o>=</span><span class=n>my_reg</span><span class=p>)</span>
<a id=__codelineno-1-8 name=__codelineno-1-8 href=#__codelineno-1-8></a><span class=k>class</span> <span class=nc>MyComponent</span><span class=p>(</span><span class=n>Component</span><span class=p>):</span>
<a id=__codelineno-1-9 name=__codelineno-1-9 href=#__codelineno-1-9></a> <span class=o>...</span>
</code></pre></div> <details class=quote> <summary>Source code in <code>src/django_components/component_registry.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-504>504</a></span>
<span class=normal><a href=#__codelineno-0-505>505</a></span>
<span class=normal><a href=#__codelineno-0-506>506</a></span>
<span class=normal><a href=#__codelineno-0-507>507</a></span>
<span class=normal><a href=#__codelineno-0-508>508</a></span>
<span class=normal><a href=#__codelineno-0-509>509</a></span>
<span class=normal><a href=#__codelineno-0-510>510</a></span>
<span class=normal><a href=#__codelineno-0-511>511</a></span>
<span class=normal><a href=#__codelineno-0-512>512</a></span>
<span class=normal><a href=#__codelineno-0-513>513</a></span>
<span class=normal><a href=#__codelineno-0-514>514</a></span>
<span class=normal><a href=#__codelineno-0-515>515</a></span>
<span class=normal><a href=#__codelineno-0-516>516</a></span>
<span class=normal><a href=#__codelineno-0-517>517</a></span>
<span class=normal><a href=#__codelineno-0-518>518</a></span>
<span class=normal><a href=#__codelineno-0-519>519</a></span>
<span class=normal><a href=#__codelineno-0-520>520</a></span>
<span class=normal><a href=#__codelineno-0-521>521</a></span>
<span class=normal><a href=#__codelineno-0-522>522</a></span>
<span class=normal><a href=#__codelineno-0-523>523</a></span>
<span class=normal><a href=#__codelineno-0-524>524</a></span>
<span class=normal><a href=#__codelineno-0-525>525</a></span>
<span class=normal><a href=#__codelineno-0-526>526</a></span>
<span class=normal><a href=#__codelineno-0-527>527</a></span>
<span class=normal><a href=#__codelineno-0-528>528</a></span>
<span class=normal><a href=#__codelineno-0-529>529</a></span>
<span class=normal><a href=#__codelineno-0-530>530</a></span>
<span class=normal><a href=#__codelineno-0-531>531</a></span>
<span class=normal><a href=#__codelineno-0-532>532</a></span>
<span class=normal><a href=#__codelineno-0-533>533</a></span>
<span class=normal><a href=#__codelineno-0-534>534</a></span>
<span class=normal><a href=#__codelineno-0-535>535</a></span>
<span class=normal><a href=#__codelineno-0-536>536</a></span>
<span class=normal><a href=#__codelineno-0-537>537</a></span>
<span class=normal><a href=#__codelineno-0-538>538</a></span>
<span class=normal><a href=#__codelineno-0-539>539</a></span>
<span class=normal><a href=#__codelineno-0-540>540</a></span>
<span class=normal><a href=#__codelineno-0-541>541</a></span>
<span class=normal><a href=#__codelineno-0-542>542</a></span>
<span class=normal><a href=#__codelineno-0-543>543</a></span>
<span class=normal><a href=#__codelineno-0-544>544</a></span>
<span class=normal><a href=#__codelineno-0-545>545</a></span>
<span class=normal><a href=#__codelineno-0-546>546</a></span>
<span class=normal><a href=#__codelineno-0-547>547</a></span>
<span class=normal><a href=#__codelineno-0-548>548</a></span>
<span class=normal><a href=#__codelineno-0-549>549</a></span>
<span class=normal><a href=#__codelineno-0-550>550</a></span>
<span class=normal><a href=#__codelineno-0-551>551</a></span>
<span class=normal><a href=#__codelineno-0-552>552</a></span>
<span class=normal><a href=#__codelineno-0-553>553</a></span>
<span class=normal><a href=#__codelineno-0-554>554</a></span>
<span class=normal><a href=#__codelineno-0-555>555</a></span>
<span class=normal><a href=#__codelineno-0-556>556</a></span>
<span class=normal><a href=#__codelineno-0-557>557</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-504 name=__codelineno-0-504></a><span class=k>def</span> <span class=nf>register</span><span class=p>(</span><span class=n>name</span><span class=p>:</span> <span class=nb>str</span><span class=p>,</span> <span class=n>registry</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>ComponentRegistry</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n>Callable</span><span class=p>[</span>
<a id=__codelineno-0-505 name=__codelineno-0-505></a> <span class=p>[</span><span class=n>Type</span><span class=p>[</span><span class=s2>&quot;Component[ArgsType, KwargsType, SlotsType, DataType, JsDataType, CssDataType]&quot;</span><span class=p>]],</span>
<a id=__codelineno-0-506 name=__codelineno-0-506></a> <span class=n>Type</span><span class=p>[</span><span class=s2>&quot;Component[ArgsType, KwargsType, SlotsType, DataType, JsDataType, CssDataType]&quot;</span><span class=p>],</span>
<a id=__codelineno-0-507 name=__codelineno-0-507></a><span class=p>]:</span>
<a id=__codelineno-0-508 name=__codelineno-0-508></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-509 name=__codelineno-0-509></a><span class=sd> Class decorator for registering a [component](./#django_components.Component)</span>
<a id=__codelineno-0-510 name=__codelineno-0-510></a><span class=sd> to a [component registry](./#django_components.ComponentRegistry).</span>
<a id=__codelineno-0-511 name=__codelineno-0-511></a>
<a id=__codelineno-0-512 name=__codelineno-0-512></a><span class=sd> See [Registering components](../../concepts/advanced/component_registry).</span>
<a id=__codelineno-0-513 name=__codelineno-0-513></a>
<a id=__codelineno-0-514 name=__codelineno-0-514></a><span class=sd> Args:</span>
<a id=__codelineno-0-515 name=__codelineno-0-515></a><span class=sd> name (str): Registered name. This is the name by which the component will be accessed\</span>
<a id=__codelineno-0-516 name=__codelineno-0-516></a><span class=sd> from within a template when using the [`{% component %}`](../template_tags#component) tag. Required.</span>
<a id=__codelineno-0-517 name=__codelineno-0-517></a><span class=sd> registry (ComponentRegistry, optional): Specify the [registry](./#django_components.ComponentRegistry)\</span>
<a id=__codelineno-0-518 name=__codelineno-0-518></a><span class=sd> to which to register this component. If omitted, component is registered to the default registry.</span>
<a id=__codelineno-0-519 name=__codelineno-0-519></a>
<a id=__codelineno-0-520 name=__codelineno-0-520></a><span class=sd> Raises:</span>
<a id=__codelineno-0-521 name=__codelineno-0-521></a><span class=sd> AlreadyRegistered: If there is already a component registered under the same name.</span>
<a id=__codelineno-0-522 name=__codelineno-0-522></a>
<a id=__codelineno-0-523 name=__codelineno-0-523></a><span class=sd> **Examples**:</span>
<a id=__codelineno-0-524 name=__codelineno-0-524></a>
<a id=__codelineno-0-525 name=__codelineno-0-525></a><span class=sd> ```python</span>
<a id=__codelineno-0-526 name=__codelineno-0-526></a><span class=sd> from django_components import Component, register</span>
<a id=__codelineno-0-527 name=__codelineno-0-527></a>
<a id=__codelineno-0-528 name=__codelineno-0-528></a><span class=sd> @register(&quot;my_component&quot;)</span>
<a id=__codelineno-0-529 name=__codelineno-0-529></a><span class=sd> class MyComponent(Component):</span>
<a id=__codelineno-0-530 name=__codelineno-0-530></a><span class=sd> ...</span>
<a id=__codelineno-0-531 name=__codelineno-0-531></a><span class=sd> ```</span>
<a id=__codelineno-0-532 name=__codelineno-0-532></a>
<a id=__codelineno-0-533 name=__codelineno-0-533></a><span class=sd> Specifing [`ComponentRegistry`](./#django_components.ComponentRegistry) the component</span>
<a id=__codelineno-0-534 name=__codelineno-0-534></a><span class=sd> should be registered to by setting the `registry` kwarg:</span>
<a id=__codelineno-0-535 name=__codelineno-0-535></a>
<a id=__codelineno-0-536 name=__codelineno-0-536></a><span class=sd> ```python</span>
<a id=__codelineno-0-537 name=__codelineno-0-537></a><span class=sd> from django.template import Library</span>
<a id=__codelineno-0-538 name=__codelineno-0-538></a><span class=sd> from django_components import Component, ComponentRegistry, register</span>
<a id=__codelineno-0-539 name=__codelineno-0-539></a>
<a id=__codelineno-0-540 name=__codelineno-0-540></a><span class=sd> my_lib = Library()</span>
<a id=__codelineno-0-541 name=__codelineno-0-541></a><span class=sd> my_reg = ComponentRegistry(library=my_lib)</span>
<a id=__codelineno-0-542 name=__codelineno-0-542></a>
<a id=__codelineno-0-543 name=__codelineno-0-543></a><span class=sd> @register(&quot;my_component&quot;, registry=my_reg)</span>
<a id=__codelineno-0-544 name=__codelineno-0-544></a><span class=sd> class MyComponent(Component):</span>
<a id=__codelineno-0-545 name=__codelineno-0-545></a><span class=sd> ...</span>
<a id=__codelineno-0-546 name=__codelineno-0-546></a><span class=sd> ```</span>
<a id=__codelineno-0-547 name=__codelineno-0-547></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-548 name=__codelineno-0-548></a> <span class=k>if</span> <span class=n>registry</span> <span class=ow>is</span> <span class=kc>None</span><span class=p>:</span>
<a id=__codelineno-0-549 name=__codelineno-0-549></a> <span class=n>registry</span> <span class=o>=</span> <span class=n>_the_registry</span>
<a id=__codelineno-0-550 name=__codelineno-0-550></a>
<a id=__codelineno-0-551 name=__codelineno-0-551></a> <span class=k>def</span> <span class=nf>decorator</span><span class=p>(</span>
<a id=__codelineno-0-552 name=__codelineno-0-552></a> <span class=n>component</span><span class=p>:</span> <span class=n>Type</span><span class=p>[</span><span class=s2>&quot;Component[ArgsType, KwargsType, SlotsType, DataType, JsDataType, CssDataType]&quot;</span><span class=p>],</span>
<a id=__codelineno-0-553 name=__codelineno-0-553></a> <span class=p>)</span> <span class=o>-&gt;</span> <span class=n>Type</span><span class=p>[</span><span class=s2>&quot;Component[ArgsType, KwargsType, SlotsType, DataType, JsDataType, CssDataType]&quot;</span><span class=p>]:</span>
<a id=__codelineno-0-554 name=__codelineno-0-554></a> <span class=n>registry</span><span class=o>.</span><span class=n>register</span><span class=p>(</span><span class=n>name</span><span class=o>=</span><span class=n>name</span><span class=p>,</span> <span class=n>component</span><span class=o>=</span><span class=n>component</span><span class=p>)</span>
<a id=__codelineno-0-555 name=__codelineno-0-555></a> <span class=k>return</span> <span class=n>component</span>
<a id=__codelineno-0-556 name=__codelineno-0-556></a>
<a id=__codelineno-0-557 name=__codelineno-0-557></a> <span class=k>return</span> <span class=n>decorator</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> </div> </div> </div> <div class="doc doc-object doc-module"> <h2 id=django_components.components class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-module"></code> <span class="doc doc-object-name doc-module-name">components</span> <a href=#django_components.components class=headerlink title="Permanent link">¤</a></h2> <div class="doc doc-contents "> <p><span class=doc-section-title>Modules:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.components.dynamic href=#django_components.components.dynamic>dynamic</a></code></b> <div class=doc-md-description> </div> </li> </ul> <p><span class=doc-section-title>Classes:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.components.DynamicComponent href=#django_components.components.DynamicComponent>DynamicComponent</a></code></b> <div class=doc-md-description> <p>This component is given a registered name or a reference to another component,</p> </div> </li> </ul> <div class="doc doc-children"> <div class="doc doc-object doc-class"> <h3 id=django_components.components.DynamicComponent class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-class"></code> <span class="doc doc-object-name doc-class-name">DynamicComponent</span> <a href=#django_components.components.DynamicComponent class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>DynamicComponent</span><span class=p>(</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a> <span class=n>registered_name</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a> <span class=n>component_id</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a> <span class=n>outer_context</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><span title=django.template.context.Context>Context</span></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a> <span class=n>registry</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-internal" title=django_components.component_registry.ComponentRegistry href=#django_components.component_registry.ComponentRegistry>ComponentRegistry</a></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-6 name=__codelineno-0-6 href=#__codelineno-0-6></a><span class=p>)</span>
</code></pre></div> <div class="doc doc-contents "> <p class="doc doc-class-bases"> Bases: <code><a class="autorefs autorefs-internal" title=django_components.Component href=#django_components.Component>Component</a></code></p> <p>This component is given a registered name or a reference to another component, and behaves as if the other component was in its place.</p> <p>The args, kwargs, and slot fills are all passed down to the underlying component.</p> <p><span class=doc-section-title>Parameters:</span></p> <ul> <li class="doc-section-item field-body"> <b><code>is</code></b> (<code><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a> | <a class="autorefs autorefs-external" title=typing.Type href=https://docs.python.org/3.12/library/typing.html#typing.Type>Type</a>[<a class="autorefs autorefs-internal" title=django_components.Component href=#django_components.Component>Component</a>]</code>) <div class=doc-md-description> <p>Component that should be rendered. Either a registered name of a component, or a <a href=../api#django_components.Component>Component</a> class directly. Required.</p> </div> </li> <li class="doc-section-item field-body"> <b><code>registry</code></b> (<code><a class="autorefs autorefs-internal" title=django_components.ComponentRegistry href=#django_components.ComponentRegistry>ComponentRegistry</a></code>, default: <code>None</code> ) <div class=doc-md-description> <p>Specify the <a href=../api#django_components.ComponentRegistry>registry</a> to search for the registered name. If omitted, all registries are searched until the first match.</p> </div> </li> <li class="doc-section-item field-body"> <b><code>*args</code></b> <div class=doc-md-description> <p>Additional data passed to the component.</p> </div> </li> <li class="doc-section-item field-body"> <b><code>**kwargs</code></b> <div class=doc-md-description> <p>Additional data passed to the component.</p> </div> </li> </ul> <p><strong>Slots:</strong></p> <ul> <li>Any slots, depending on the actual component.</li> </ul> <p><strong>Examples:</strong></p> <p>Django <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=cp>{%</span> <span class=k>component</span> <span class=s2>&quot;dynamic&quot;</span> <span class=k>is</span><span class=o>=</span><span class=nv>table_comp</span> <span class=nv>data</span><span class=o>=</span><span class=nv>table_data</span> <span class=nv>headers</span><span class=o>=</span><span class=nv>table_headers</span> <span class=cp>%}</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a><span class=x> </span><span class=cp>{%</span> <span class=k>fill</span> <span class=s2>&quot;pagination&quot;</span> <span class=cp>%}</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=x> </span><span class=cp>{%</span> <span class=k>component</span> <span class=s2>&quot;pagination&quot;</span> <span class=o>/</span> <span class=cp>%}</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a><span class=x> </span><span class=cp>{%</span> <span class=k>endfill</span> <span class=cp>%}</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a><span class=cp>{%</span> <span class=k>endcomponent</span> <span class=cp>%}</span>
</code></pre></div></p> <p>Python <div class=highlight><pre><span></span><code><a id=__codelineno-1-1 name=__codelineno-1-1 href=#__codelineno-1-1></a><span class=kn>from</span> <span class=nn>django_components</span> <span class=kn>import</span> <span class=n>DynamicComponent</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=n>DynamicComponent</span><span class=o>.</span><span class=n>render</span><span class=p>(</span>
<a id=__codelineno-1-4 name=__codelineno-1-4 href=#__codelineno-1-4></a> <span class=n>kwargs</span><span class=o>=</span><span class=p>{</span>
<a id=__codelineno-1-5 name=__codelineno-1-5 href=#__codelineno-1-5></a> <span class=s2>&quot;is&quot;</span><span class=p>:</span> <span class=n>table_comp</span><span class=p>,</span>
<a id=__codelineno-1-6 name=__codelineno-1-6 href=#__codelineno-1-6></a> <span class=s2>&quot;data&quot;</span><span class=p>:</span> <span class=n>table_data</span><span class=p>,</span>
<a id=__codelineno-1-7 name=__codelineno-1-7 href=#__codelineno-1-7></a> <span class=s2>&quot;headers&quot;</span><span class=p>:</span> <span class=n>table_headers</span><span class=p>,</span>
<a id=__codelineno-1-8 name=__codelineno-1-8 href=#__codelineno-1-8></a> <span class=p>},</span>
<a id=__codelineno-1-9 name=__codelineno-1-9 href=#__codelineno-1-9></a> <span class=n>slots</span><span class=o>=</span><span class=p>{</span>
<a id=__codelineno-1-10 name=__codelineno-1-10 href=#__codelineno-1-10></a> <span class=s2>&quot;pagination&quot;</span><span class=p>:</span> <span class=n>PaginationComponent</span><span class=o>.</span><span class=n>render</span><span class=p>(</span>
<a id=__codelineno-1-11 name=__codelineno-1-11 href=#__codelineno-1-11></a> <span class=n>render_dependencies</span><span class=o>=</span><span class=kc>False</span><span class=p>,</span>
<a id=__codelineno-1-12 name=__codelineno-1-12 href=#__codelineno-1-12></a> <span class=p>),</span>
<a id=__codelineno-1-13 name=__codelineno-1-13 href=#__codelineno-1-13></a> <span class=p>},</span>
<a id=__codelineno-1-14 name=__codelineno-1-14 href=#__codelineno-1-14></a><span class=p>)</span>
</code></pre></div></p> <h4 id=django_components.components.DynamicComponent--use-cases>Use cases<a class=headerlink href=#django_components.components.DynamicComponent--use-cases title="Permanent link">¤</a></h4> <p>Dynamic components are suitable if you are writing something like a form component. You may design it such that users give you a list of input types, and you render components depending on the input types.</p> <p>While you could handle this with a series of if / else statements, that's not an extensible approach. Instead, you can use the dynamic component in place of normal components.</p> <h4 id=django_components.components.DynamicComponent--component-name>Component name<a class=headerlink href=#django_components.components.DynamicComponent--component-name title="Permanent link">¤</a></h4> <p>By default, the dynamic component is registered under the name <code>"dynamic"</code>. In case of a conflict, you can set the <a href=../settings#django_components.app_settings.ComponentsSettings.dynamic_component_name><code>COMPONENTS.dynamic_component_name</code></a> setting to change the name used for the dynamic components.</p> <div class=highlight><pre><span></span><code><a id=__codelineno-2-1 name=__codelineno-2-1 href=#__codelineno-2-1></a><span class=c1># settings.py</span>
<a id=__codelineno-2-2 name=__codelineno-2-2 href=#__codelineno-2-2></a><span class=n>COMPONENTS</span> <span class=o>=</span> <span class=n>ComponentsSettings</span><span class=p>(</span>
<a id=__codelineno-2-3 name=__codelineno-2-3 href=#__codelineno-2-3></a> <span class=n>dynamic_component_name</span><span class=o>=</span><span class=s2>&quot;my_dynamic&quot;</span><span class=p>,</span>
<a id=__codelineno-2-4 name=__codelineno-2-4 href=#__codelineno-2-4></a><span class=p>)</span>
</code></pre></div> <p>After which you will be able to use the dynamic component with the new name: <div class=highlight><pre><span></span><code><a id=__codelineno-3-1 name=__codelineno-3-1 href=#__codelineno-3-1></a><span class=cp>{%</span> <span class=k>component</span> <span class=s2>&quot;my_dynamic&quot;</span> <span class=k>is</span><span class=o>=</span><span class=nv>table_comp</span> <span class=nv>data</span><span class=o>=</span><span class=nv>table_data</span> <span class=nv>headers</span><span class=o>=</span><span class=nv>table_headers</span> <span class=cp>%}</span>
<a id=__codelineno-3-2 name=__codelineno-3-2 href=#__codelineno-3-2></a><span class=x> </span><span class=cp>{%</span> <span class=k>fill</span> <span class=s2>&quot;pagination&quot;</span> <span class=cp>%}</span>
<a id=__codelineno-3-3 name=__codelineno-3-3 href=#__codelineno-3-3></a><span class=x> </span><span class=cp>{%</span> <span class=k>component</span> <span class=s2>&quot;pagination&quot;</span> <span class=o>/</span> <span class=cp>%}</span>
<a id=__codelineno-3-4 name=__codelineno-3-4 href=#__codelineno-3-4></a><span class=x> </span><span class=cp>{%</span> <span class=k>endfill</span> <span class=cp>%}</span>
<a id=__codelineno-3-5 name=__codelineno-3-5 href=#__codelineno-3-5></a><span class=cp>{%</span> <span class=k>endcomponent</span> <span class=cp>%}</span>
</code></pre></div></p> <p><span class=doc-section-title>Methods:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.components.DynamicComponent.as_view href=#django_components.components.DynamicComponent.as_view>as_view</a></code></b> <div class=doc-md-description> <p>Shortcut for calling <code>Component.View.as_view</code> and passing component instance to it.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.components.DynamicComponent.get_template href=#django_components.components.DynamicComponent.get_template>get_template</a></code></b> <div class=doc-md-description> <p>Inlined Django template associated with this component. Can be a plain string or a Template instance.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.components.DynamicComponent.get_template_name href=#django_components.components.DynamicComponent.get_template_name>get_template_name</a></code></b> <div class=doc-md-description> <p>Filepath to the Django template associated with this component.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.components.DynamicComponent.inject href=#django_components.components.DynamicComponent.inject>inject</a></code></b> <div class=doc-md-description> <p>Use this method to retrieve the data that was passed to a <code>{% provide %}</code> tag</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.components.DynamicComponent.on_render_after href=#django_components.components.DynamicComponent.on_render_after>on_render_after</a></code></b> <div class=doc-md-description> <p>Hook that runs just after the component's template was rendered.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.components.DynamicComponent.on_render_before href=#django_components.components.DynamicComponent.on_render_before>on_render_before</a></code></b> <div class=doc-md-description> <p>Hook that runs just before the component's template is rendered.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.components.DynamicComponent.render href=#django_components.components.DynamicComponent.render>render</a></code></b> <div class=doc-md-description> <p>Render the component into a string.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.components.DynamicComponent.render_to_response href=#django_components.components.DynamicComponent.render_to_response>render_to_response</a></code></b> <div class=doc-md-description> <p>Render the component and wrap the content in the response class.</p> </div> </li> </ul> <p><span class=doc-section-title>Attributes:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.components.DynamicComponent.Media href=#django_components.components.DynamicComponent.Media>Media</a></code></b> <div class=doc-md-description> <p>Defines JS and CSS media files associated with this component.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.components.DynamicComponent.css href=#django_components.components.DynamicComponent.css>css</a></code></b> (<code><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>]</code>) <div class=doc-md-description> <p>Inlined CSS associated with this component.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.components.DynamicComponent.input href=#django_components.components.DynamicComponent.input>input</a></code></b> (<code><span title=django_components.component.RenderInput>RenderInput</span>[<span title=django_components.component.ArgsType>ArgsType</span>, <span title=django_components.component.KwargsType>KwargsType</span>, <span title=django_components.component.SlotsType>SlotsType</span>]</code>) <div class=doc-md-description> <p>Input holds the data (like arg, kwargs, slots) that were passsed to</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.components.DynamicComponent.is_filled href=#django_components.components.DynamicComponent.is_filled>is_filled</a></code></b> (<code><a class="autorefs autorefs-internal" title=django_components.slots.SlotIsFilled href=#django_components.slots.SlotIsFilled>SlotIsFilled</a></code>) <div class=doc-md-description> <p>Dictionary describing which slots have or have not been filled.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.components.DynamicComponent.js href=#django_components.components.DynamicComponent.js>js</a></code></b> (<code><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>]</code>) <div class=doc-md-description> <p>Inlined JS associated with this component.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.components.DynamicComponent.media href=#django_components.components.DynamicComponent.media>media</a></code></b> (<code><a class="autorefs autorefs-internal" title=django_components.component.Component.Media href=#django_components.component.Component.Media>Media</a></code>) <div class=doc-md-description> <p>Normalized definition of JS and CSS media files associated with this component.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.components.DynamicComponent.response_class href=#django_components.components.DynamicComponent.response_class>response_class</a></code></b> <div class=doc-md-description> <p>This allows to configure what class is used to generate response from <code>render_to_response</code></p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.components.DynamicComponent.template_name href=#django_components.components.DynamicComponent.template_name>template_name</a></code></b> (<code><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>]</code>) <div class=doc-md-description> <p>Filepath to the Django template associated with this component.</p> </div> </li> </ul> <details class=quote> <summary>Source code in <code>src/django_components/component.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-287>287</a></span>
<span class=normal><a href=#__codelineno-0-288>288</a></span>
<span class=normal><a href=#__codelineno-0-289>289</a></span>
<span class=normal><a href=#__codelineno-0-290>290</a></span>
<span class=normal><a href=#__codelineno-0-291>291</a></span>
<span class=normal><a href=#__codelineno-0-292>292</a></span>
<span class=normal><a href=#__codelineno-0-293>293</a></span>
<span class=normal><a href=#__codelineno-0-294>294</a></span>
<span class=normal><a href=#__codelineno-0-295>295</a></span>
<span class=normal><a href=#__codelineno-0-296>296</a></span>
<span class=normal><a href=#__codelineno-0-297>297</a></span>
<span class=normal><a href=#__codelineno-0-298>298</a></span>
<span class=normal><a href=#__codelineno-0-299>299</a></span>
<span class=normal><a href=#__codelineno-0-300>300</a></span>
<span class=normal><a href=#__codelineno-0-301>301</a></span>
<span class=normal><a href=#__codelineno-0-302>302</a></span>
<span class=normal><a href=#__codelineno-0-303>303</a></span>
<span class=normal><a href=#__codelineno-0-304>304</a></span>
<span class=normal><a href=#__codelineno-0-305>305</a></span>
<span class=normal><a href=#__codelineno-0-306>306</a></span>
<span class=normal><a href=#__codelineno-0-307>307</a></span>
<span class=normal><a href=#__codelineno-0-308>308</a></span>
<span class=normal><a href=#__codelineno-0-309>309</a></span>
<span class=normal><a href=#__codelineno-0-310>310</a></span>
<span class=normal><a href=#__codelineno-0-311>311</a></span>
<span class=normal><a href=#__codelineno-0-312>312</a></span>
<span class=normal><a href=#__codelineno-0-313>313</a></span>
<span class=normal><a href=#__codelineno-0-314>314</a></span>
<span class=normal><a href=#__codelineno-0-315>315</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-287 name=__codelineno-0-287></a><span class=k>def</span> <span class=fm>__init__</span><span class=p>(</span>
<a id=__codelineno-0-288 name=__codelineno-0-288></a> <span class=bp>self</span><span class=p>,</span>
<a id=__codelineno-0-289 name=__codelineno-0-289></a> <span class=n>registered_name</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=nb>str</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-290 name=__codelineno-0-290></a> <span class=n>component_id</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=nb>str</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-291 name=__codelineno-0-291></a> <span class=n>outer_context</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>Context</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-292 name=__codelineno-0-292></a> <span class=n>registry</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>ComponentRegistry</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span> <span class=c1># noqa F811</span>
<a id=__codelineno-0-293 name=__codelineno-0-293></a><span class=p>):</span>
<a id=__codelineno-0-294 name=__codelineno-0-294></a> <span class=c1># When user first instantiates the component class before calling</span>
<a id=__codelineno-0-295 name=__codelineno-0-295></a> <span class=c1># `render` or `render_to_response`, then we want to allow the render</span>
<a id=__codelineno-0-296 name=__codelineno-0-296></a> <span class=c1># function to make use of the instantiated object.</span>
<a id=__codelineno-0-297 name=__codelineno-0-297></a> <span class=c1>#</span>
<a id=__codelineno-0-298 name=__codelineno-0-298></a> <span class=c1># So while `MyComp.render()` creates a new instance of MyComp internally,</span>
<a id=__codelineno-0-299 name=__codelineno-0-299></a> <span class=c1># if we do `MyComp(registered_name=&quot;abc&quot;).render()`, then we use the</span>
<a id=__codelineno-0-300 name=__codelineno-0-300></a> <span class=c1># already-instantiated object.</span>
<a id=__codelineno-0-301 name=__codelineno-0-301></a> <span class=c1>#</span>
<a id=__codelineno-0-302 name=__codelineno-0-302></a> <span class=c1># To achieve that, we want to re-assign the class methods as instance methods.</span>
<a id=__codelineno-0-303 name=__codelineno-0-303></a> <span class=c1># For that we have to &quot;unwrap&quot; the class methods via __func__.</span>
<a id=__codelineno-0-304 name=__codelineno-0-304></a> <span class=c1># See https://stackoverflow.com/a/76706399/9788634</span>
<a id=__codelineno-0-305 name=__codelineno-0-305></a> <span class=bp>self</span><span class=o>.</span><span class=n>render_to_response</span> <span class=o>=</span> <span class=n>types</span><span class=o>.</span><span class=n>MethodType</span><span class=p>(</span><span class=bp>self</span><span class=o>.</span><span class=vm>__class__</span><span class=o>.</span><span class=n>render_to_response</span><span class=o>.</span><span class=vm>__func__</span><span class=p>,</span> <span class=bp>self</span><span class=p>)</span> <span class=c1># type: ignore</span>
<a id=__codelineno-0-306 name=__codelineno-0-306></a> <span class=bp>self</span><span class=o>.</span><span class=n>render</span> <span class=o>=</span> <span class=n>types</span><span class=o>.</span><span class=n>MethodType</span><span class=p>(</span><span class=bp>self</span><span class=o>.</span><span class=vm>__class__</span><span class=o>.</span><span class=n>render</span><span class=o>.</span><span class=vm>__func__</span><span class=p>,</span> <span class=bp>self</span><span class=p>)</span> <span class=c1># type: ignore</span>
<a id=__codelineno-0-307 name=__codelineno-0-307></a> <span class=bp>self</span><span class=o>.</span><span class=n>as_view</span> <span class=o>=</span> <span class=n>types</span><span class=o>.</span><span class=n>MethodType</span><span class=p>(</span><span class=bp>self</span><span class=o>.</span><span class=vm>__class__</span><span class=o>.</span><span class=n>as_view</span><span class=o>.</span><span class=vm>__func__</span><span class=p>,</span> <span class=bp>self</span><span class=p>)</span> <span class=c1># type: ignore</span>
<a id=__codelineno-0-308 name=__codelineno-0-308></a>
<a id=__codelineno-0-309 name=__codelineno-0-309></a> <span class=bp>self</span><span class=o>.</span><span class=n>registered_name</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=nb>str</span><span class=p>]</span> <span class=o>=</span> <span class=n>registered_name</span>
<a id=__codelineno-0-310 name=__codelineno-0-310></a> <span class=bp>self</span><span class=o>.</span><span class=n>outer_context</span><span class=p>:</span> <span class=n>Context</span> <span class=o>=</span> <span class=n>outer_context</span> <span class=ow>or</span> <span class=n>Context</span><span class=p>()</span>
<a id=__codelineno-0-311 name=__codelineno-0-311></a> <span class=bp>self</span><span class=o>.</span><span class=n>component_id</span> <span class=o>=</span> <span class=n>component_id</span> <span class=ow>or</span> <span class=n>gen_id</span><span class=p>()</span>
<a id=__codelineno-0-312 name=__codelineno-0-312></a> <span class=bp>self</span><span class=o>.</span><span class=n>registry</span> <span class=o>=</span> <span class=n>registry</span> <span class=ow>or</span> <span class=n>registry_</span>
<a id=__codelineno-0-313 name=__codelineno-0-313></a> <span class=bp>self</span><span class=o>.</span><span class=n>_render_stack</span><span class=p>:</span> <span class=n>Deque</span><span class=p>[</span><span class=n>RenderStackItem</span><span class=p>[</span><span class=n>ArgsType</span><span class=p>,</span> <span class=n>KwargsType</span><span class=p>,</span> <span class=n>SlotsType</span><span class=p>]]</span> <span class=o>=</span> <span class=n>deque</span><span class=p>()</span>
<a id=__codelineno-0-314 name=__codelineno-0-314></a> <span class=c1># None == uninitialized, False == No types, Tuple == types</span>
<a id=__codelineno-0-315 name=__codelineno-0-315></a> <span class=bp>self</span><span class=o>.</span><span class=n>_types</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>Union</span><span class=p>[</span><span class=n>Tuple</span><span class=p>[</span><span class=n>Any</span><span class=p>,</span> <span class=n>Any</span><span class=p>,</span> <span class=n>Any</span><span class=p>,</span> <span class=n>Any</span><span class=p>,</span> <span class=n>Any</span><span class=p>,</span> <span class=n>Any</span><span class=p>],</span> <span class=n>Literal</span><span class=p>[</span><span class=kc>False</span><span class=p>]]]</span> <span class=o>=</span> <span class=kc>None</span>
</code></pre></div></td></tr></table></div> </details> <div class="doc doc-children"> <div class="doc doc-object doc-attribute"> <h4 id=django_components.components.DynamicComponent.Media class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">Media</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.components.DynamicComponent.Media class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>Media</span> <span class=o>=</span> <span class=n><a class="autorefs autorefs-internal" title=django_components.component_media.ComponentMediaInput href=#django_components.component_media.ComponentMediaInput>ComponentMediaInput</a></span>
</code></pre></div> <div class="doc doc-contents "> <p>Defines JS and CSS media files associated with this component.</p> </div> </div> <div class="doc doc-object doc-attribute"> <h4 id=django_components.components.DynamicComponent.css class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">css</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.components.DynamicComponent.css class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>css</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>Inlined CSS associated with this component.</p> </div> </div> <div class="doc doc-object doc-attribute"> <h4 id=django_components.components.DynamicComponent.input class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">input</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-property"><code>property</code></small> </span> <a href=#django_components.components.DynamicComponent.input class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nb>input</span><span class=p>:</span> <span class=n><span title=django_components.component.RenderInput>RenderInput</span></span><span class=p>[</span><span class=n><span title=django_components.component.ArgsType>ArgsType</span></span><span class=p>,</span> <span class=n><span title=django_components.component.KwargsType>KwargsType</span></span><span class=p>,</span> <span class=n><span title=django_components.component.SlotsType>SlotsType</span></span><span class=p>]</span>
</code></pre></div> <div class="doc doc-contents "> <p>Input holds the data (like arg, kwargs, slots) that were passsed to the current execution of the <code>render</code> method.</p> </div> </div> <div class="doc doc-object doc-attribute"> <h4 id=django_components.components.DynamicComponent.is_filled class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">is_filled</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-property"><code>property</code></small> </span> <a href=#django_components.components.DynamicComponent.is_filled class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>is_filled</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-internal" title=django_components.slots.SlotIsFilled href=#django_components.slots.SlotIsFilled>SlotIsFilled</a></span>
</code></pre></div> <div class="doc doc-contents "> <p>Dictionary describing which slots have or have not been filled.</p> <p>This attribute is available for use only within the template as <code>{{ component_vars.is_filled.slot_name }}</code>, and within <code>on_render_before</code> and <code>on_render_after</code> hooks.</p> </div> </div> <div class="doc doc-object doc-attribute"> <h4 id=django_components.components.DynamicComponent.js class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">js</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.components.DynamicComponent.js class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>js</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>Inlined JS associated with this component.</p> </div> </div> <div class="doc doc-object doc-attribute"> <h4 id=django_components.components.DynamicComponent.media class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">media</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.components.DynamicComponent.media class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>media</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-internal" title=django_components.component.Component.Media href=#django_components.component.Component.Media>Media</a></span>
</code></pre></div> <div class="doc doc-contents "> <p>Normalized definition of JS and CSS media files associated with this component.</p> <p>NOTE: This field is generated from Component.Media class.</p> </div> </div> <div class="doc doc-object doc-attribute"> <h4 id=django_components.components.DynamicComponent.response_class class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">response_class</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.components.DynamicComponent.response_class class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>response_class</span> <span class=o>=</span> <span class=n><a class="autorefs autorefs-external" title=django.http.HttpResponse href=https://docs.djangoproject.com/en/5.0/ref/request-response/#django.http.HttpResponse>HttpResponse</a></span>
</code></pre></div> <div class="doc doc-contents "> <p>This allows to configure what class is used to generate response from <code>render_to_response</code></p> </div> </div> <div class="doc doc-object doc-attribute"> <h4 id=django_components.components.DynamicComponent.template_name class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">template_name</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.components.DynamicComponent.template_name class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>template_name</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>Filepath to the Django template associated with this component.</p> <p>The filepath must be relative to either the file where the component class was defined, or one of the roots of <code>STATIFILES_DIRS</code>.</p> <p>Only one of <code>template_name</code>, <code>get_template_name</code>, <code>template</code> or <code>get_template</code> must be defined.</p> </div> </div> <div class="doc doc-object doc-function"> <h4 id=django_components.components.DynamicComponent.as_view class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">as_view</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-classmethod"><code>classmethod</code></small> </span> <a href=#django_components.components.DynamicComponent.as_view class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>as_view</span><span class=p>(</span><span class=o>**</span><span class=n>initkwargs</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Any href=https://docs.python.org/3.12/library/typing.html#typing.Any>Any</a></span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><span title=django_components.component.ViewFn>ViewFn</span></span>
</code></pre></div> <div class="doc doc-contents "> <p>Shortcut for calling <code>Component.View.as_view</code> and passing component instance to it.</p> <details class=quote> <summary>Source code in <code>src/django_components/component.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-460>460</a></span>
<span class=normal><a href=#__codelineno-0-461>461</a></span>
<span class=normal><a href=#__codelineno-0-462>462</a></span>
<span class=normal><a href=#__codelineno-0-463>463</a></span>
<span class=normal><a href=#__codelineno-0-464>464</a></span>
<span class=normal><a href=#__codelineno-0-465>465</a></span>
<span class=normal><a href=#__codelineno-0-466>466</a></span>
<span class=normal><a href=#__codelineno-0-467>467</a></span>
<span class=normal><a href=#__codelineno-0-468>468</a></span>
<span class=normal><a href=#__codelineno-0-469>469</a></span>
<span class=normal><a href=#__codelineno-0-470>470</a></span>
<span class=normal><a href=#__codelineno-0-471>471</a></span>
<span class=normal><a href=#__codelineno-0-472>472</a></span>
<span class=normal><a href=#__codelineno-0-473>473</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-460 name=__codelineno-0-460></a><span class=nd>@classmethod</span>
<a id=__codelineno-0-461 name=__codelineno-0-461></a><span class=k>def</span> <span class=nf>as_view</span><span class=p>(</span><span class=bp>cls</span><span class=p>,</span> <span class=o>**</span><span class=n>initkwargs</span><span class=p>:</span> <span class=n>Any</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n>ViewFn</span><span class=p>:</span>
<a id=__codelineno-0-462 name=__codelineno-0-462></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-463 name=__codelineno-0-463></a><span class=sd> Shortcut for calling `Component.View.as_view` and passing component instance to it.</span>
<a id=__codelineno-0-464 name=__codelineno-0-464></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-465 name=__codelineno-0-465></a> <span class=c1># This method may be called as class method or as instance method.</span>
<a id=__codelineno-0-466 name=__codelineno-0-466></a> <span class=c1># If called as class method, create a new instance.</span>
<a id=__codelineno-0-467 name=__codelineno-0-467></a> <span class=k>if</span> <span class=nb>isinstance</span><span class=p>(</span><span class=bp>cls</span><span class=p>,</span> <span class=n>Component</span><span class=p>):</span>
<a id=__codelineno-0-468 name=__codelineno-0-468></a> <span class=n>comp</span><span class=p>:</span> <span class=n>Component</span> <span class=o>=</span> <span class=bp>cls</span>
<a id=__codelineno-0-469 name=__codelineno-0-469></a> <span class=k>else</span><span class=p>:</span>
<a id=__codelineno-0-470 name=__codelineno-0-470></a> <span class=n>comp</span> <span class=o>=</span> <span class=bp>cls</span><span class=p>()</span>
<a id=__codelineno-0-471 name=__codelineno-0-471></a>
<a id=__codelineno-0-472 name=__codelineno-0-472></a> <span class=c1># Allow the View class to access this component via `self.component`</span>
<a id=__codelineno-0-473 name=__codelineno-0-473></a> <span class=k>return</span> <span class=n>comp</span><span class=o>.</span><span class=n>View</span><span class=o>.</span><span class=n>as_view</span><span class=p>(</span><span class=o>**</span><span class=n>initkwargs</span><span class=p>,</span> <span class=n>component</span><span class=o>=</span><span class=n>comp</span><span class=p>)</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h4 id=django_components.components.DynamicComponent.get_template class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">get_template</span> <a href=#django_components.components.DynamicComponent.get_template class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>get_template</span><span class=p>(</span><span class=n>context</span><span class=p>:</span> <span class=n><span title=django.template.context.Context>Context</span></span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Union href=https://docs.python.org/3.12/library/typing.html#typing.Union>Union</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span> <span class=n><span title=django.template.base.Template>Template</span></span><span class=p>]]</span>
</code></pre></div> <div class="doc doc-contents "> <p>Inlined Django template associated with this component. Can be a plain string or a Template instance.</p> <p>Only one of <code>template_name</code>, <code>get_template_name</code>, <code>template</code> or <code>get_template</code> must be defined.</p> <details class=quote> <summary>Source code in <code>src/django_components/component.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-227>227</a></span>
<span class=normal><a href=#__codelineno-0-228>228</a></span>
<span class=normal><a href=#__codelineno-0-229>229</a></span>
<span class=normal><a href=#__codelineno-0-230>230</a></span>
<span class=normal><a href=#__codelineno-0-231>231</a></span>
<span class=normal><a href=#__codelineno-0-232>232</a></span>
<span class=normal><a href=#__codelineno-0-233>233</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-227 name=__codelineno-0-227></a><span class=k>def</span> <span class=nf>get_template</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>context</span><span class=p>:</span> <span class=n>Context</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n>Optional</span><span class=p>[</span><span class=n>Union</span><span class=p>[</span><span class=nb>str</span><span class=p>,</span> <span class=n>Template</span><span class=p>]]:</span>
<a id=__codelineno-0-228 name=__codelineno-0-228></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-229 name=__codelineno-0-229></a><span class=sd> Inlined Django template associated with this component. Can be a plain string or a Template instance.</span>
<a id=__codelineno-0-230 name=__codelineno-0-230></a>
<a id=__codelineno-0-231 name=__codelineno-0-231></a><span class=sd> Only one of `template_name`, `get_template_name`, `template` or `get_template` must be defined.</span>
<a id=__codelineno-0-232 name=__codelineno-0-232></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-233 name=__codelineno-0-233></a> <span class=k>return</span> <span class=kc>None</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h4 id=django_components.components.DynamicComponent.get_template_name class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">get_template_name</span> <a href=#django_components.components.DynamicComponent.get_template_name class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>get_template_name</span><span class=p>(</span><span class=n>context</span><span class=p>:</span> <span class=n><span title=django.template.context.Context>Context</span></span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]</span>
</code></pre></div> <div class="doc doc-contents "> <p>Filepath to the Django template associated with this component.</p> <p>The filepath must be relative to either the file where the component class was defined, or one of the roots of <code>STATIFILES_DIRS</code>.</p> <p>Only one of <code>template_name</code>, <code>get_template_name</code>, <code>template</code> or <code>get_template</code> must be defined.</p> <details class=quote> <summary>Source code in <code>src/django_components/component.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-209>209</a></span>
<span class=normal><a href=#__codelineno-0-210>210</a></span>
<span class=normal><a href=#__codelineno-0-211>211</a></span>
<span class=normal><a href=#__codelineno-0-212>212</a></span>
<span class=normal><a href=#__codelineno-0-213>213</a></span>
<span class=normal><a href=#__codelineno-0-214>214</a></span>
<span class=normal><a href=#__codelineno-0-215>215</a></span>
<span class=normal><a href=#__codelineno-0-216>216</a></span>
<span class=normal><a href=#__codelineno-0-217>217</a></span>
<span class=normal><a href=#__codelineno-0-218>218</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-209 name=__codelineno-0-209></a><span class=k>def</span> <span class=nf>get_template_name</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>context</span><span class=p>:</span> <span class=n>Context</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-0-210 name=__codelineno-0-210></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-211 name=__codelineno-0-211></a><span class=sd> Filepath to the Django template associated with this component.</span>
<a id=__codelineno-0-212 name=__codelineno-0-212></a>
<a id=__codelineno-0-213 name=__codelineno-0-213></a><span class=sd> The filepath must be relative to either the file where the component class was defined,</span>
<a id=__codelineno-0-214 name=__codelineno-0-214></a><span class=sd> or one of the roots of `STATIFILES_DIRS`.</span>
<a id=__codelineno-0-215 name=__codelineno-0-215></a>
<a id=__codelineno-0-216 name=__codelineno-0-216></a><span class=sd> Only one of `template_name`, `get_template_name`, `template` or `get_template` must be defined.</span>
<a id=__codelineno-0-217 name=__codelineno-0-217></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-218 name=__codelineno-0-218></a> <span class=k>return</span> <span class=kc>None</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h4 id=django_components.components.DynamicComponent.inject class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">inject</span> <a href=#django_components.components.DynamicComponent.inject class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>inject</span><span class=p>(</span><span class=n>key</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span> <span class=n>default</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Any href=https://docs.python.org/3.12/library/typing.html#typing.Any>Any</a></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-external" title=typing.Any href=https://docs.python.org/3.12/library/typing.html#typing.Any>Any</a></span>
</code></pre></div> <div class="doc doc-contents "> <p>Use this method to retrieve the data that was passed to a <code>{% provide %}</code> tag with the corresponding key.</p> <p>To retrieve the data, <code>inject()</code> must be called inside a component that's inside the <code>{% provide %}</code> tag.</p> <p>You may also pass a default that will be used if the <code>provide</code> tag with given key was NOT found.</p> <p>This method mut be used inside the <code>get_context_data()</code> method and raises an error if called elsewhere.</p> <p>Example:</p> <p>Given this template: <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=cp>{%</span> <span class=k>provide</span> <span class=s2>&quot;provider&quot;</span> <span class=nv>hello</span><span class=o>=</span><span class=s2>&quot;world&quot;</span> <span class=cp>%}</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a><span class=x> </span><span class=cp>{%</span> <span class=k>component</span> <span class=s2>&quot;my_comp&quot;</span> <span class=cp>%}</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=x> </span><span class=cp>{%</span> <span class=k>endcomponent</span> <span class=cp>%}</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a><span class=cp>{%</span> <span class=k>endprovide</span> <span class=cp>%}</span>
</code></pre></div></p> <p>And given this definition of "my_comp" component: <div class=highlight><pre><span></span><code><a id=__codelineno-1-1 name=__codelineno-1-1 href=#__codelineno-1-1></a><span class=kn>from</span> <span class=nn>django_components</span> <span class=kn>import</span> <span class=n>Component</span><span class=p>,</span> <span class=n>register</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=nd>@register</span><span class=p>(</span><span class=s2>&quot;my_comp&quot;</span><span class=p>)</span>
<a id=__codelineno-1-4 name=__codelineno-1-4 href=#__codelineno-1-4></a><span class=k>class</span> <span class=nc>MyComp</span><span class=p>(</span><span class=n>Component</span><span class=p>):</span>
<a id=__codelineno-1-5 name=__codelineno-1-5 href=#__codelineno-1-5></a> <span class=n>template</span> <span class=o>=</span> <span class=s2>&quot;hi {{ data.hello }}!&quot;</span>
<a id=__codelineno-1-6 name=__codelineno-1-6 href=#__codelineno-1-6></a> <span class=k>def</span> <span class=nf>get_context_data</span><span class=p>(</span><span class=bp>self</span><span class=p>):</span>
<a id=__codelineno-1-7 name=__codelineno-1-7 href=#__codelineno-1-7></a> <span class=n>data</span> <span class=o>=</span> <span class=bp>self</span><span class=o>.</span><span class=n>inject</span><span class=p>(</span><span class=s2>&quot;provider&quot;</span><span class=p>)</span>
<a id=__codelineno-1-8 name=__codelineno-1-8 href=#__codelineno-1-8></a> <span class=k>return</span> <span class=p>{</span><span class=s2>&quot;data&quot;</span><span class=p>:</span> <span class=n>data</span><span class=p>}</span>
</code></pre></div></p> <p>This renders into: <div class=highlight><pre><span></span><code><a id=__codelineno-2-1 name=__codelineno-2-1 href=#__codelineno-2-1></a>hi world!
</code></pre></div></p> <p>As the <code>{{ data.hello }}</code> is taken from the "provider".</p> <details class=quote> <summary>Source code in <code>src/django_components/component.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-410>410</a></span>
<span class=normal><a href=#__codelineno-0-411>411</a></span>
<span class=normal><a href=#__codelineno-0-412>412</a></span>
<span class=normal><a href=#__codelineno-0-413>413</a></span>
<span class=normal><a href=#__codelineno-0-414>414</a></span>
<span class=normal><a href=#__codelineno-0-415>415</a></span>
<span class=normal><a href=#__codelineno-0-416>416</a></span>
<span class=normal><a href=#__codelineno-0-417>417</a></span>
<span class=normal><a href=#__codelineno-0-418>418</a></span>
<span class=normal><a href=#__codelineno-0-419>419</a></span>
<span class=normal><a href=#__codelineno-0-420>420</a></span>
<span class=normal><a href=#__codelineno-0-421>421</a></span>
<span class=normal><a href=#__codelineno-0-422>422</a></span>
<span class=normal><a href=#__codelineno-0-423>423</a></span>
<span class=normal><a href=#__codelineno-0-424>424</a></span>
<span class=normal><a href=#__codelineno-0-425>425</a></span>
<span class=normal><a href=#__codelineno-0-426>426</a></span>
<span class=normal><a href=#__codelineno-0-427>427</a></span>
<span class=normal><a href=#__codelineno-0-428>428</a></span>
<span class=normal><a href=#__codelineno-0-429>429</a></span>
<span class=normal><a href=#__codelineno-0-430>430</a></span>
<span class=normal><a href=#__codelineno-0-431>431</a></span>
<span class=normal><a href=#__codelineno-0-432>432</a></span>
<span class=normal><a href=#__codelineno-0-433>433</a></span>
<span class=normal><a href=#__codelineno-0-434>434</a></span>
<span class=normal><a href=#__codelineno-0-435>435</a></span>
<span class=normal><a href=#__codelineno-0-436>436</a></span>
<span class=normal><a href=#__codelineno-0-437>437</a></span>
<span class=normal><a href=#__codelineno-0-438>438</a></span>
<span class=normal><a href=#__codelineno-0-439>439</a></span>
<span class=normal><a href=#__codelineno-0-440>440</a></span>
<span class=normal><a href=#__codelineno-0-441>441</a></span>
<span class=normal><a href=#__codelineno-0-442>442</a></span>
<span class=normal><a href=#__codelineno-0-443>443</a></span>
<span class=normal><a href=#__codelineno-0-444>444</a></span>
<span class=normal><a href=#__codelineno-0-445>445</a></span>
<span class=normal><a href=#__codelineno-0-446>446</a></span>
<span class=normal><a href=#__codelineno-0-447>447</a></span>
<span class=normal><a href=#__codelineno-0-448>448</a></span>
<span class=normal><a href=#__codelineno-0-449>449</a></span>
<span class=normal><a href=#__codelineno-0-450>450</a></span>
<span class=normal><a href=#__codelineno-0-451>451</a></span>
<span class=normal><a href=#__codelineno-0-452>452</a></span>
<span class=normal><a href=#__codelineno-0-453>453</a></span>
<span class=normal><a href=#__codelineno-0-454>454</a></span>
<span class=normal><a href=#__codelineno-0-455>455</a></span>
<span class=normal><a href=#__codelineno-0-456>456</a></span>
<span class=normal><a href=#__codelineno-0-457>457</a></span>
<span class=normal><a href=#__codelineno-0-458>458</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-410 name=__codelineno-0-410></a><span class=k>def</span> <span class=nf>inject</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>key</span><span class=p>:</span> <span class=nb>str</span><span class=p>,</span> <span class=n>default</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>Any</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n>Any</span><span class=p>:</span>
<a id=__codelineno-0-411 name=__codelineno-0-411></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-412 name=__codelineno-0-412></a><span class=sd> Use this method to retrieve the data that was passed to a `{% provide %}` tag</span>
<a id=__codelineno-0-413 name=__codelineno-0-413></a><span class=sd> with the corresponding key.</span>
<a id=__codelineno-0-414 name=__codelineno-0-414></a>
<a id=__codelineno-0-415 name=__codelineno-0-415></a><span class=sd> To retrieve the data, `inject()` must be called inside a component that&#39;s</span>
<a id=__codelineno-0-416 name=__codelineno-0-416></a><span class=sd> inside the `{% provide %}` tag.</span>
<a id=__codelineno-0-417 name=__codelineno-0-417></a>
<a id=__codelineno-0-418 name=__codelineno-0-418></a><span class=sd> You may also pass a default that will be used if the `provide` tag with given</span>
<a id=__codelineno-0-419 name=__codelineno-0-419></a><span class=sd> key was NOT found.</span>
<a id=__codelineno-0-420 name=__codelineno-0-420></a>
<a id=__codelineno-0-421 name=__codelineno-0-421></a><span class=sd> This method mut be used inside the `get_context_data()` method and raises</span>
<a id=__codelineno-0-422 name=__codelineno-0-422></a><span class=sd> an error if called elsewhere.</span>
<a id=__codelineno-0-423 name=__codelineno-0-423></a>
<a id=__codelineno-0-424 name=__codelineno-0-424></a><span class=sd> Example:</span>
<a id=__codelineno-0-425 name=__codelineno-0-425></a>
<a id=__codelineno-0-426 name=__codelineno-0-426></a><span class=sd> Given this template:</span>
<a id=__codelineno-0-427 name=__codelineno-0-427></a><span class=sd> ```django</span>
<a id=__codelineno-0-428 name=__codelineno-0-428></a><span class=sd> {% provide &quot;provider&quot; hello=&quot;world&quot; %}</span>
<a id=__codelineno-0-429 name=__codelineno-0-429></a><span class=sd> {% component &quot;my_comp&quot; %}</span>
<a id=__codelineno-0-430 name=__codelineno-0-430></a><span class=sd> {% endcomponent %}</span>
<a id=__codelineno-0-431 name=__codelineno-0-431></a><span class=sd> {% endprovide %}</span>
<a id=__codelineno-0-432 name=__codelineno-0-432></a><span class=sd> ```</span>
<a id=__codelineno-0-433 name=__codelineno-0-433></a>
<a id=__codelineno-0-434 name=__codelineno-0-434></a><span class=sd> And given this definition of &quot;my_comp&quot; component:</span>
<a id=__codelineno-0-435 name=__codelineno-0-435></a><span class=sd> ```py</span>
<a id=__codelineno-0-436 name=__codelineno-0-436></a><span class=sd> from django_components import Component, register</span>
<a id=__codelineno-0-437 name=__codelineno-0-437></a>
<a id=__codelineno-0-438 name=__codelineno-0-438></a><span class=sd> @register(&quot;my_comp&quot;)</span>
<a id=__codelineno-0-439 name=__codelineno-0-439></a><span class=sd> class MyComp(Component):</span>
<a id=__codelineno-0-440 name=__codelineno-0-440></a><span class=sd> template = &quot;hi {{ data.hello }}!&quot;</span>
<a id=__codelineno-0-441 name=__codelineno-0-441></a><span class=sd> def get_context_data(self):</span>
<a id=__codelineno-0-442 name=__codelineno-0-442></a><span class=sd> data = self.inject(&quot;provider&quot;)</span>
<a id=__codelineno-0-443 name=__codelineno-0-443></a><span class=sd> return {&quot;data&quot;: data}</span>
<a id=__codelineno-0-444 name=__codelineno-0-444></a><span class=sd> ```</span>
<a id=__codelineno-0-445 name=__codelineno-0-445></a>
<a id=__codelineno-0-446 name=__codelineno-0-446></a><span class=sd> This renders into:</span>
<a id=__codelineno-0-447 name=__codelineno-0-447></a><span class=sd> ```</span>
<a id=__codelineno-0-448 name=__codelineno-0-448></a><span class=sd> hi world!</span>
<a id=__codelineno-0-449 name=__codelineno-0-449></a><span class=sd> ```</span>
<a id=__codelineno-0-450 name=__codelineno-0-450></a>
<a id=__codelineno-0-451 name=__codelineno-0-451></a><span class=sd> As the `{{ data.hello }}` is taken from the &quot;provider&quot;.</span>
<a id=__codelineno-0-452 name=__codelineno-0-452></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-453 name=__codelineno-0-453></a> <span class=k>if</span> <span class=bp>self</span><span class=o>.</span><span class=n>input</span> <span class=ow>is</span> <span class=kc>None</span><span class=p>:</span>
<a id=__codelineno-0-454 name=__codelineno-0-454></a> <span class=k>raise</span> <span class=ne>RuntimeError</span><span class=p>(</span>
<a id=__codelineno-0-455 name=__codelineno-0-455></a> <span class=sa>f</span><span class=s2>&quot;Method &#39;inject()&#39; of component &#39;</span><span class=si>{</span><span class=bp>self</span><span class=o>.</span><span class=n>name</span><span class=si>}</span><span class=s2>&#39; was called outside of &#39;get_context_data()&#39;&quot;</span>
<a id=__codelineno-0-456 name=__codelineno-0-456></a> <span class=p>)</span>
<a id=__codelineno-0-457 name=__codelineno-0-457></a>
<a id=__codelineno-0-458 name=__codelineno-0-458></a> <span class=k>return</span> <span class=n>get_injected_context_var</span><span class=p>(</span><span class=bp>self</span><span class=o>.</span><span class=n>name</span><span class=p>,</span> <span class=bp>self</span><span class=o>.</span><span class=n>input</span><span class=o>.</span><span class=n>context</span><span class=p>,</span> <span class=n>key</span><span class=p>,</span> <span class=n>default</span><span class=p>)</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h4 id=django_components.components.DynamicComponent.on_render_after class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">on_render_after</span> <a href=#django_components.components.DynamicComponent.on_render_after class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>on_render_after</span><span class=p>(</span><span class=n>context</span><span class=p>:</span> <span class=n><span title=django.template.context.Context>Context</span></span><span class=p>,</span> <span class=n>template</span><span class=p>:</span> <span class=n><span title=django.template.base.Template>Template</span></span><span class=p>,</span> <span class=n>content</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><span title=django_components.slots.SlotResult>SlotResult</span></span><span class=p>]</span>
</code></pre></div> <div class="doc doc-contents "> <p>Hook that runs just after the component's template was rendered. It receives the rendered output as the last argument.</p> <p>You can use this hook to access the context or the template, but modifying them won't have any effect.</p> <p>To override the content that gets rendered, you can return a string or SafeString from this hook.</p> <details class=quote> <summary>Source code in <code>src/django_components/component.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-268>268</a></span>
<span class=normal><a href=#__codelineno-0-269>269</a></span>
<span class=normal><a href=#__codelineno-0-270>270</a></span>
<span class=normal><a href=#__codelineno-0-271>271</a></span>
<span class=normal><a href=#__codelineno-0-272>272</a></span>
<span class=normal><a href=#__codelineno-0-273>273</a></span>
<span class=normal><a href=#__codelineno-0-274>274</a></span>
<span class=normal><a href=#__codelineno-0-275>275</a></span>
<span class=normal><a href=#__codelineno-0-276>276</a></span>
<span class=normal><a href=#__codelineno-0-277>277</a></span>
<span class=normal><a href=#__codelineno-0-278>278</a></span>
<span class=normal><a href=#__codelineno-0-279>279</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-268 name=__codelineno-0-268></a><span class=k>def</span> <span class=nf>on_render_after</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>context</span><span class=p>:</span> <span class=n>Context</span><span class=p>,</span> <span class=n>template</span><span class=p>:</span> <span class=n>Template</span><span class=p>,</span> <span class=n>content</span><span class=p>:</span> <span class=nb>str</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n>Optional</span><span class=p>[</span><span class=n>SlotResult</span><span class=p>]:</span>
<a id=__codelineno-0-269 name=__codelineno-0-269></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-270 name=__codelineno-0-270></a><span class=sd> Hook that runs just after the component&#39;s template was rendered.</span>
<a id=__codelineno-0-271 name=__codelineno-0-271></a><span class=sd> It receives the rendered output as the last argument.</span>
<a id=__codelineno-0-272 name=__codelineno-0-272></a>
<a id=__codelineno-0-273 name=__codelineno-0-273></a><span class=sd> You can use this hook to access the context or the template, but modifying</span>
<a id=__codelineno-0-274 name=__codelineno-0-274></a><span class=sd> them won&#39;t have any effect.</span>
<a id=__codelineno-0-275 name=__codelineno-0-275></a>
<a id=__codelineno-0-276 name=__codelineno-0-276></a><span class=sd> To override the content that gets rendered, you can return a string or SafeString</span>
<a id=__codelineno-0-277 name=__codelineno-0-277></a><span class=sd> from this hook.</span>
<a id=__codelineno-0-278 name=__codelineno-0-278></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-279 name=__codelineno-0-279></a> <span class=k>pass</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h4 id=django_components.components.DynamicComponent.on_render_before class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">on_render_before</span> <a href=#django_components.components.DynamicComponent.on_render_before class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>on_render_before</span><span class=p>(</span><span class=n>context</span><span class=p>:</span> <span class=n><span title=django.template.context.Context>Context</span></span><span class=p>,</span> <span class=n>template</span><span class=p>:</span> <span class=n><span title=django.template.base.Template>Template</span></span><span class=p>)</span> <span class=o>-&gt;</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>Hook that runs just before the component's template is rendered.</p> <p>You can use this hook to access or modify the context or the template.</p> <details class=quote> <summary>Source code in <code>src/django_components/component.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-260>260</a></span>
<span class=normal><a href=#__codelineno-0-261>261</a></span>
<span class=normal><a href=#__codelineno-0-262>262</a></span>
<span class=normal><a href=#__codelineno-0-263>263</a></span>
<span class=normal><a href=#__codelineno-0-264>264</a></span>
<span class=normal><a href=#__codelineno-0-265>265</a></span>
<span class=normal><a href=#__codelineno-0-266>266</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-260 name=__codelineno-0-260></a><span class=k>def</span> <span class=nf>on_render_before</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>context</span><span class=p>:</span> <span class=n>Context</span><span class=p>,</span> <span class=n>template</span><span class=p>:</span> <span class=n>Template</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=kc>None</span><span class=p>:</span>
<a id=__codelineno-0-261 name=__codelineno-0-261></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-262 name=__codelineno-0-262></a><span class=sd> Hook that runs just before the component&#39;s template is rendered.</span>
<a id=__codelineno-0-263 name=__codelineno-0-263></a>
<a id=__codelineno-0-264 name=__codelineno-0-264></a><span class=sd> You can use this hook to access or modify the context or the template.</span>
<a id=__codelineno-0-265 name=__codelineno-0-265></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-266 name=__codelineno-0-266></a> <span class=k>pass</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h4 id=django_components.components.DynamicComponent.render class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">render</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-classmethod"><code>classmethod</code></small> </span> <a href=#django_components.components.DynamicComponent.render class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>render</span><span class=p>(</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a> <span class=n>context</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Union href=https://docs.python.org/3.12/library/typing.html#typing.Union>Union</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Dict href=https://docs.python.org/3.12/library/typing.html#typing.Dict>Dict</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span> <span class=n><a class="autorefs autorefs-external" title=typing.Any href=https://docs.python.org/3.12/library/typing.html#typing.Any>Any</a></span><span class=p>],</span> <span class=n><span title=django.template.context.Context>Context</span></span><span class=p>]]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a> <span class=n>args</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><span title=django_components.component.ArgsType>ArgsType</span></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a> <span class=n>kwargs</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><span title=django_components.component.KwargsType>KwargsType</span></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a> <span class=n>slots</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><span title=django_components.component.SlotsType>SlotsType</span></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-6 name=__codelineno-0-6 href=#__codelineno-0-6></a> <span class=n>escape_slots_content</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/functions.html#bool>bool</a></span> <span class=o>=</span> <span class=kc>True</span><span class=p>,</span>
<a id=__codelineno-0-7 name=__codelineno-0-7 href=#__codelineno-0-7></a> <span class=nb>type</span><span class=p>:</span> <span class=n><span title=django_components.dependencies.RenderType>RenderType</span></span> <span class=o>=</span> <span class=s2>&quot;document&quot;</span><span class=p>,</span>
<a id=__codelineno-0-8 name=__codelineno-0-8 href=#__codelineno-0-8></a> <span class=n>render_dependencies</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/functions.html#bool>bool</a></span> <span class=o>=</span> <span class=kc>True</span><span class=p>,</span>
<a id=__codelineno-0-9 name=__codelineno-0-9 href=#__codelineno-0-9></a><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span>
</code></pre></div> <div class="doc doc-contents "> <p>Render the component into a string.</p> <p>Inputs: - <code>args</code> - Positional args for the component. This is the same as calling the component as <code>{% component "my_comp" arg1 arg2 ... %}</code> - <code>kwargs</code> - Kwargs for the component. This is the same as calling the component as <code>{% component "my_comp" key1=val1 key2=val2 ... %}</code> - <code>slots</code> - Component slot fills. This is the same as pasing <code>{% fill %}</code> tags to the component. Accepts a dictionary of <code>{ slot_name: slot_content }</code> where <code>slot_content</code> can be a string or render function. - <code>escape_slots_content</code> - Whether the content from <code>slots</code> should be escaped. - <code>context</code> - A context (dictionary or Django's Context) within which the component is rendered. The keys on the context can be accessed from within the template. - NOTE: In "isolated" mode, context is NOT accessible, and data MUST be passed via component's args and kwargs. - <code>type</code> - Configure how to handle JS and CSS dependencies. - <code>"document"</code> (default) - JS dependencies are inserted into <code>{% component_js_dependencies %}</code>, or to the end of the <code>&lt;body&gt;</code> tag. CSS dependencies are inserted into <code>{% component_css_dependencies %}</code>, or the end of the <code>&lt;head&gt;</code> tag. - <code>render_dependencies</code> - Set this to <code>False</code> if you want to insert the resulting HTML into another component.</p> <p>Example: <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>MyComponent</span><span class=o>.</span><span class=n>render</span><span class=p>(</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a> <span class=n>args</span><span class=o>=</span><span class=p>[</span><span class=mi>1</span><span class=p>,</span> <span class=s2>&quot;two&quot;</span><span class=p>,</span> <span class=p>{}],</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a> <span class=n>kwargs</span><span class=o>=</span><span class=p>{</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a> <span class=s2>&quot;key&quot;</span><span class=p>:</span> <span class=mi>123</span><span class=p>,</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a> <span class=p>},</span>
<a id=__codelineno-0-6 name=__codelineno-0-6 href=#__codelineno-0-6></a> <span class=n>slots</span><span class=o>=</span><span class=p>{</span>
<a id=__codelineno-0-7 name=__codelineno-0-7 href=#__codelineno-0-7></a> <span class=s2>&quot;header&quot;</span><span class=p>:</span> <span class=s1>&#39;STATIC TEXT HERE&#39;</span><span class=p>,</span>
<a id=__codelineno-0-8 name=__codelineno-0-8 href=#__codelineno-0-8></a> <span class=s2>&quot;footer&quot;</span><span class=p>:</span> <span class=k>lambda</span> <span class=n>ctx</span><span class=p>,</span> <span class=n>slot_kwargs</span><span class=p>,</span> <span class=n>slot_ref</span><span class=p>:</span> <span class=sa>f</span><span class=s1>&#39;CTX: </span><span class=si>{</span><span class=n>ctx</span><span class=p>[</span><span class=s1>&#39;hello&#39;</span><span class=p>]</span><span class=si>}</span><span class=s1> SLOT_DATA: </span><span class=si>{</span><span class=n>slot_kwargs</span><span class=p>[</span><span class=s1>&#39;abc&#39;</span><span class=p>]</span><span class=si>}</span><span class=s1>&#39;</span><span class=p>,</span>
<a id=__codelineno-0-9 name=__codelineno-0-9 href=#__codelineno-0-9></a> <span class=p>},</span>
<a id=__codelineno-0-10 name=__codelineno-0-10 href=#__codelineno-0-10></a> <span class=n>escape_slots_content</span><span class=o>=</span><span class=kc>False</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> <details class=quote> <summary>Source code in <code>src/django_components/component.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-549>549</a></span>
<span class=normal><a href=#__codelineno-0-550>550</a></span>
<span class=normal><a href=#__codelineno-0-551>551</a></span>
<span class=normal><a href=#__codelineno-0-552>552</a></span>
<span class=normal><a href=#__codelineno-0-553>553</a></span>
<span class=normal><a href=#__codelineno-0-554>554</a></span>
<span class=normal><a href=#__codelineno-0-555>555</a></span>
<span class=normal><a href=#__codelineno-0-556>556</a></span>
<span class=normal><a href=#__codelineno-0-557>557</a></span>
<span class=normal><a href=#__codelineno-0-558>558</a></span>
<span class=normal><a href=#__codelineno-0-559>559</a></span>
<span class=normal><a href=#__codelineno-0-560>560</a></span>
<span class=normal><a href=#__codelineno-0-561>561</a></span>
<span class=normal><a href=#__codelineno-0-562>562</a></span>
<span class=normal><a href=#__codelineno-0-563>563</a></span>
<span class=normal><a href=#__codelineno-0-564>564</a></span>
<span class=normal><a href=#__codelineno-0-565>565</a></span>
<span class=normal><a href=#__codelineno-0-566>566</a></span>
<span class=normal><a href=#__codelineno-0-567>567</a></span>
<span class=normal><a href=#__codelineno-0-568>568</a></span>
<span class=normal><a href=#__codelineno-0-569>569</a></span>
<span class=normal><a href=#__codelineno-0-570>570</a></span>
<span class=normal><a href=#__codelineno-0-571>571</a></span>
<span class=normal><a href=#__codelineno-0-572>572</a></span>
<span class=normal><a href=#__codelineno-0-573>573</a></span>
<span class=normal><a href=#__codelineno-0-574>574</a></span>
<span class=normal><a href=#__codelineno-0-575>575</a></span>
<span class=normal><a href=#__codelineno-0-576>576</a></span>
<span class=normal><a href=#__codelineno-0-577>577</a></span>
<span class=normal><a href=#__codelineno-0-578>578</a></span>
<span class=normal><a href=#__codelineno-0-579>579</a></span>
<span class=normal><a href=#__codelineno-0-580>580</a></span>
<span class=normal><a href=#__codelineno-0-581>581</a></span>
<span class=normal><a href=#__codelineno-0-582>582</a></span>
<span class=normal><a href=#__codelineno-0-583>583</a></span>
<span class=normal><a href=#__codelineno-0-584>584</a></span>
<span class=normal><a href=#__codelineno-0-585>585</a></span>
<span class=normal><a href=#__codelineno-0-586>586</a></span>
<span class=normal><a href=#__codelineno-0-587>587</a></span>
<span class=normal><a href=#__codelineno-0-588>588</a></span>
<span class=normal><a href=#__codelineno-0-589>589</a></span>
<span class=normal><a href=#__codelineno-0-590>590</a></span>
<span class=normal><a href=#__codelineno-0-591>591</a></span>
<span class=normal><a href=#__codelineno-0-592>592</a></span>
<span class=normal><a href=#__codelineno-0-593>593</a></span>
<span class=normal><a href=#__codelineno-0-594>594</a></span>
<span class=normal><a href=#__codelineno-0-595>595</a></span>
<span class=normal><a href=#__codelineno-0-596>596</a></span>
<span class=normal><a href=#__codelineno-0-597>597</a></span>
<span class=normal><a href=#__codelineno-0-598>598</a></span>
<span class=normal><a href=#__codelineno-0-599>599</a></span>
<span class=normal><a href=#__codelineno-0-600>600</a></span>
<span class=normal><a href=#__codelineno-0-601>601</a></span>
<span class=normal><a href=#__codelineno-0-602>602</a></span>
<span class=normal><a href=#__codelineno-0-603>603</a></span>
<span class=normal><a href=#__codelineno-0-604>604</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-549 name=__codelineno-0-549></a><span class=nd>@classmethod</span>
<a id=__codelineno-0-550 name=__codelineno-0-550></a><span class=k>def</span> <span class=nf>render</span><span class=p>(</span>
<a id=__codelineno-0-551 name=__codelineno-0-551></a> <span class=bp>cls</span><span class=p>,</span>
<a id=__codelineno-0-552 name=__codelineno-0-552></a> <span class=n>context</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>Union</span><span class=p>[</span><span class=n>Dict</span><span class=p>[</span><span class=nb>str</span><span class=p>,</span> <span class=n>Any</span><span class=p>],</span> <span class=n>Context</span><span class=p>]]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-553 name=__codelineno-0-553></a> <span class=n>args</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>ArgsType</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-554 name=__codelineno-0-554></a> <span class=n>kwargs</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>KwargsType</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-555 name=__codelineno-0-555></a> <span class=n>slots</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>SlotsType</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-556 name=__codelineno-0-556></a> <span class=n>escape_slots_content</span><span class=p>:</span> <span class=nb>bool</span> <span class=o>=</span> <span class=kc>True</span><span class=p>,</span>
<a id=__codelineno-0-557 name=__codelineno-0-557></a> <span class=nb>type</span><span class=p>:</span> <span class=n>RenderType</span> <span class=o>=</span> <span class=s2>&quot;document&quot;</span><span class=p>,</span>
<a id=__codelineno-0-558 name=__codelineno-0-558></a> <span class=n>render_dependencies</span><span class=p>:</span> <span class=nb>bool</span> <span class=o>=</span> <span class=kc>True</span><span class=p>,</span>
<a id=__codelineno-0-559 name=__codelineno-0-559></a><span class=p>)</span> <span class=o>-&gt;</span> <span class=nb>str</span><span class=p>:</span>
<a id=__codelineno-0-560 name=__codelineno-0-560></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-561 name=__codelineno-0-561></a><span class=sd> Render the component into a string.</span>
<a id=__codelineno-0-562 name=__codelineno-0-562></a>
<a id=__codelineno-0-563 name=__codelineno-0-563></a><span class=sd> Inputs:</span>
<a id=__codelineno-0-564 name=__codelineno-0-564></a><span class=sd> - `args` - Positional args for the component. This is the same as calling the component</span>
<a id=__codelineno-0-565 name=__codelineno-0-565></a><span class=sd> as `{% component &quot;my_comp&quot; arg1 arg2 ... %}`</span>
<a id=__codelineno-0-566 name=__codelineno-0-566></a><span class=sd> - `kwargs` - Kwargs for the component. This is the same as calling the component</span>
<a id=__codelineno-0-567 name=__codelineno-0-567></a><span class=sd> as `{% component &quot;my_comp&quot; key1=val1 key2=val2 ... %}`</span>
<a id=__codelineno-0-568 name=__codelineno-0-568></a><span class=sd> - `slots` - Component slot fills. This is the same as pasing `{% fill %}` tags to the component.</span>
<a id=__codelineno-0-569 name=__codelineno-0-569></a><span class=sd> Accepts a dictionary of `{ slot_name: slot_content }` where `slot_content` can be a string</span>
<a id=__codelineno-0-570 name=__codelineno-0-570></a><span class=sd> or render function.</span>
<a id=__codelineno-0-571 name=__codelineno-0-571></a><span class=sd> - `escape_slots_content` - Whether the content from `slots` should be escaped.</span>
<a id=__codelineno-0-572 name=__codelineno-0-572></a><span class=sd> - `context` - A context (dictionary or Django&#39;s Context) within which the component</span>
<a id=__codelineno-0-573 name=__codelineno-0-573></a><span class=sd> is rendered. The keys on the context can be accessed from within the template.</span>
<a id=__codelineno-0-574 name=__codelineno-0-574></a><span class=sd> - NOTE: In &quot;isolated&quot; mode, context is NOT accessible, and data MUST be passed via</span>
<a id=__codelineno-0-575 name=__codelineno-0-575></a><span class=sd> component&#39;s args and kwargs.</span>
<a id=__codelineno-0-576 name=__codelineno-0-576></a><span class=sd> - `type` - Configure how to handle JS and CSS dependencies.</span>
<a id=__codelineno-0-577 name=__codelineno-0-577></a><span class=sd> - `&quot;document&quot;` (default) - JS dependencies are inserted into `{% component_js_dependencies %}`,</span>
<a id=__codelineno-0-578 name=__codelineno-0-578></a><span class=sd> or to the end of the `&lt;body&gt;` tag. CSS dependencies are inserted into</span>
<a id=__codelineno-0-579 name=__codelineno-0-579></a><span class=sd> `{% component_css_dependencies %}`, or the end of the `&lt;head&gt;` tag.</span>
<a id=__codelineno-0-580 name=__codelineno-0-580></a><span class=sd> - `render_dependencies` - Set this to `False` if you want to insert the resulting HTML into another component.</span>
<a id=__codelineno-0-581 name=__codelineno-0-581></a>
<a id=__codelineno-0-582 name=__codelineno-0-582></a><span class=sd> Example:</span>
<a id=__codelineno-0-583 name=__codelineno-0-583></a><span class=sd> ```py</span>
<a id=__codelineno-0-584 name=__codelineno-0-584></a><span class=sd> MyComponent.render(</span>
<a id=__codelineno-0-585 name=__codelineno-0-585></a><span class=sd> args=[1, &quot;two&quot;, {}],</span>
<a id=__codelineno-0-586 name=__codelineno-0-586></a><span class=sd> kwargs={</span>
<a id=__codelineno-0-587 name=__codelineno-0-587></a><span class=sd> &quot;key&quot;: 123,</span>
<a id=__codelineno-0-588 name=__codelineno-0-588></a><span class=sd> },</span>
<a id=__codelineno-0-589 name=__codelineno-0-589></a><span class=sd> slots={</span>
<a id=__codelineno-0-590 name=__codelineno-0-590></a><span class=sd> &quot;header&quot;: &#39;STATIC TEXT HERE&#39;,</span>
<a id=__codelineno-0-591 name=__codelineno-0-591></a><span class=sd> &quot;footer&quot;: lambda ctx, slot_kwargs, slot_ref: f&#39;CTX: {ctx[&#39;hello&#39;]} SLOT_DATA: {slot_kwargs[&#39;abc&#39;]}&#39;,</span>
<a id=__codelineno-0-592 name=__codelineno-0-592></a><span class=sd> },</span>
<a id=__codelineno-0-593 name=__codelineno-0-593></a><span class=sd> escape_slots_content=False,</span>
<a id=__codelineno-0-594 name=__codelineno-0-594></a><span class=sd> )</span>
<a id=__codelineno-0-595 name=__codelineno-0-595></a><span class=sd> ```</span>
<a id=__codelineno-0-596 name=__codelineno-0-596></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-597 name=__codelineno-0-597></a> <span class=c1># This method may be called as class method or as instance method.</span>
<a id=__codelineno-0-598 name=__codelineno-0-598></a> <span class=c1># If called as class method, create a new instance.</span>
<a id=__codelineno-0-599 name=__codelineno-0-599></a> <span class=k>if</span> <span class=nb>isinstance</span><span class=p>(</span><span class=bp>cls</span><span class=p>,</span> <span class=n>Component</span><span class=p>):</span>
<a id=__codelineno-0-600 name=__codelineno-0-600></a> <span class=n>comp</span><span class=p>:</span> <span class=n>Component</span> <span class=o>=</span> <span class=bp>cls</span>
<a id=__codelineno-0-601 name=__codelineno-0-601></a> <span class=k>else</span><span class=p>:</span>
<a id=__codelineno-0-602 name=__codelineno-0-602></a> <span class=n>comp</span> <span class=o>=</span> <span class=bp>cls</span><span class=p>()</span>
<a id=__codelineno-0-603 name=__codelineno-0-603></a>
<a id=__codelineno-0-604 name=__codelineno-0-604></a> <span class=k>return</span> <span class=n>comp</span><span class=o>.</span><span class=n>_render</span><span class=p>(</span><span class=n>context</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>escape_slots_content</span><span class=p>,</span> <span class=nb>type</span><span class=p>,</span> <span class=n>render_dependencies</span><span class=p>)</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h4 id=django_components.components.DynamicComponent.render_to_response class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">render_to_response</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-classmethod"><code>classmethod</code></small> </span> <a href=#django_components.components.DynamicComponent.render_to_response class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>render_to_response</span><span class=p>(</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a> <span class=n>context</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Union href=https://docs.python.org/3.12/library/typing.html#typing.Union>Union</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Dict href=https://docs.python.org/3.12/library/typing.html#typing.Dict>Dict</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span> <span class=n><a class="autorefs autorefs-external" title=typing.Any href=https://docs.python.org/3.12/library/typing.html#typing.Any>Any</a></span><span class=p>],</span> <span class=n><span title=django.template.context.Context>Context</span></span><span class=p>]]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a> <span class=n>slots</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><span title=django_components.component.SlotsType>SlotsType</span></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a> <span class=n>escape_slots_content</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/functions.html#bool>bool</a></span> <span class=o>=</span> <span class=kc>True</span><span class=p>,</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a> <span class=n>args</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><span title=django_components.component.ArgsType>ArgsType</span></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-6 name=__codelineno-0-6 href=#__codelineno-0-6></a> <span class=n>kwargs</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><span title=django_components.component.KwargsType>KwargsType</span></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-7 name=__codelineno-0-7 href=#__codelineno-0-7></a> <span class=nb>type</span><span class=p>:</span> <span class=n><span title=django_components.dependencies.RenderType>RenderType</span></span> <span class=o>=</span> <span class=s2>&quot;document&quot;</span><span class=p>,</span>
<a id=__codelineno-0-8 name=__codelineno-0-8 href=#__codelineno-0-8></a> <span class=o>*</span><span class=n>response_args</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Any href=https://docs.python.org/3.12/library/typing.html#typing.Any>Any</a></span><span class=p>,</span>
<a id=__codelineno-0-9 name=__codelineno-0-9 href=#__codelineno-0-9></a> <span class=o>**</span><span class=n>response_kwargs</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Any href=https://docs.python.org/3.12/library/typing.html#typing.Any>Any</a></span>
<a id=__codelineno-0-10 name=__codelineno-0-10 href=#__codelineno-0-10></a><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-external" title=django.http.HttpResponse href=https://docs.djangoproject.com/en/5.0/ref/request-response/#django.http.HttpResponse>HttpResponse</a></span>
</code></pre></div> <div class="doc doc-contents "> <p>Render the component and wrap the content in the response class.</p> <p>The response class is taken from <code>Component.response_class</code>. Defaults to <code>django.http.HttpResponse</code>.</p> <p>This is the interface for the <code>django.views.View</code> class which allows us to use components as Django views with <code>component.as_view()</code>.</p> <p>Inputs: - <code>args</code> - Positional args for the component. This is the same as calling the component as <code>{% component "my_comp" arg1 arg2 ... %}</code> - <code>kwargs</code> - Kwargs for the component. This is the same as calling the component as <code>{% component "my_comp" key1=val1 key2=val2 ... %}</code> - <code>slots</code> - Component slot fills. This is the same as pasing <code>{% fill %}</code> tags to the component. Accepts a dictionary of <code>{ slot_name: slot_content }</code> where <code>slot_content</code> can be a string or render function. - <code>escape_slots_content</code> - Whether the content from <code>slots</code> should be escaped. - <code>context</code> - A context (dictionary or Django's Context) within which the component is rendered. The keys on the context can be accessed from within the template. - NOTE: In "isolated" mode, context is NOT accessible, and data MUST be passed via component's args and kwargs. - <code>type</code> - Configure how to handle JS and CSS dependencies. - <code>"document"</code> (default) - JS dependencies are inserted into <code>{% component_js_dependencies %}</code>, or to the end of the <code>&lt;body&gt;</code> tag. CSS dependencies are inserted into <code>{% component_css_dependencies %}</code>, or the end of the <code>&lt;head&gt;</code> tag.</p> <p>Any additional args and kwargs are passed to the <code>response_class</code>.</p> <p>Example: <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>MyComponent</span><span class=o>.</span><span class=n>render_to_response</span><span class=p>(</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a> <span class=n>args</span><span class=o>=</span><span class=p>[</span><span class=mi>1</span><span class=p>,</span> <span class=s2>&quot;two&quot;</span><span class=p>,</span> <span class=p>{}],</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a> <span class=n>kwargs</span><span class=o>=</span><span class=p>{</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a> <span class=s2>&quot;key&quot;</span><span class=p>:</span> <span class=mi>123</span><span class=p>,</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a> <span class=p>},</span>
<a id=__codelineno-0-6 name=__codelineno-0-6 href=#__codelineno-0-6></a> <span class=n>slots</span><span class=o>=</span><span class=p>{</span>
<a id=__codelineno-0-7 name=__codelineno-0-7 href=#__codelineno-0-7></a> <span class=s2>&quot;header&quot;</span><span class=p>:</span> <span class=s1>&#39;STATIC TEXT HERE&#39;</span><span class=p>,</span>
<a id=__codelineno-0-8 name=__codelineno-0-8 href=#__codelineno-0-8></a> <span class=s2>&quot;footer&quot;</span><span class=p>:</span> <span class=k>lambda</span> <span class=n>ctx</span><span class=p>,</span> <span class=n>slot_kwargs</span><span class=p>,</span> <span class=n>slot_ref</span><span class=p>:</span> <span class=sa>f</span><span class=s1>&#39;CTX: </span><span class=si>{</span><span class=n>ctx</span><span class=p>[</span><span class=s1>&#39;hello&#39;</span><span class=p>]</span><span class=si>}</span><span class=s1> SLOT_DATA: </span><span class=si>{</span><span class=n>slot_kwargs</span><span class=p>[</span><span class=s1>&#39;abc&#39;</span><span class=p>]</span><span class=si>}</span><span class=s1>&#39;</span><span class=p>,</span>
<a id=__codelineno-0-9 name=__codelineno-0-9 href=#__codelineno-0-9></a> <span class=p>},</span>
<a id=__codelineno-0-10 name=__codelineno-0-10 href=#__codelineno-0-10></a> <span class=n>escape_slots_content</span><span class=o>=</span><span class=kc>False</span><span class=p>,</span>
<a id=__codelineno-0-11 name=__codelineno-0-11 href=#__codelineno-0-11></a> <span class=c1># HttpResponse input</span>
<a id=__codelineno-0-12 name=__codelineno-0-12 href=#__codelineno-0-12></a> <span class=n>status</span><span class=o>=</span><span class=mi>201</span><span class=p>,</span>
<a id=__codelineno-0-13 name=__codelineno-0-13 href=#__codelineno-0-13></a> <span class=n>headers</span><span class=o>=</span><span class=p>{</span><span class=o>...</span><span class=p>},</span>
<a id=__codelineno-0-14 name=__codelineno-0-14 href=#__codelineno-0-14></a><span class=p>)</span>
<a id=__codelineno-0-15 name=__codelineno-0-15 href=#__codelineno-0-15></a><span class=c1># HttpResponse(content=..., status=201, headers=...)</span>
</code></pre></div></p> <details class=quote> <summary>Source code in <code>src/django_components/component.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-479>479</a></span>
<span class=normal><a href=#__codelineno-0-480>480</a></span>
<span class=normal><a href=#__codelineno-0-481>481</a></span>
<span class=normal><a href=#__codelineno-0-482>482</a></span>
<span class=normal><a href=#__codelineno-0-483>483</a></span>
<span class=normal><a href=#__codelineno-0-484>484</a></span>
<span class=normal><a href=#__codelineno-0-485>485</a></span>
<span class=normal><a href=#__codelineno-0-486>486</a></span>
<span class=normal><a href=#__codelineno-0-487>487</a></span>
<span class=normal><a href=#__codelineno-0-488>488</a></span>
<span class=normal><a href=#__codelineno-0-489>489</a></span>
<span class=normal><a href=#__codelineno-0-490>490</a></span>
<span class=normal><a href=#__codelineno-0-491>491</a></span>
<span class=normal><a href=#__codelineno-0-492>492</a></span>
<span class=normal><a href=#__codelineno-0-493>493</a></span>
<span class=normal><a href=#__codelineno-0-494>494</a></span>
<span class=normal><a href=#__codelineno-0-495>495</a></span>
<span class=normal><a href=#__codelineno-0-496>496</a></span>
<span class=normal><a href=#__codelineno-0-497>497</a></span>
<span class=normal><a href=#__codelineno-0-498>498</a></span>
<span class=normal><a href=#__codelineno-0-499>499</a></span>
<span class=normal><a href=#__codelineno-0-500>500</a></span>
<span class=normal><a href=#__codelineno-0-501>501</a></span>
<span class=normal><a href=#__codelineno-0-502>502</a></span>
<span class=normal><a href=#__codelineno-0-503>503</a></span>
<span class=normal><a href=#__codelineno-0-504>504</a></span>
<span class=normal><a href=#__codelineno-0-505>505</a></span>
<span class=normal><a href=#__codelineno-0-506>506</a></span>
<span class=normal><a href=#__codelineno-0-507>507</a></span>
<span class=normal><a href=#__codelineno-0-508>508</a></span>
<span class=normal><a href=#__codelineno-0-509>509</a></span>
<span class=normal><a href=#__codelineno-0-510>510</a></span>
<span class=normal><a href=#__codelineno-0-511>511</a></span>
<span class=normal><a href=#__codelineno-0-512>512</a></span>
<span class=normal><a href=#__codelineno-0-513>513</a></span>
<span class=normal><a href=#__codelineno-0-514>514</a></span>
<span class=normal><a href=#__codelineno-0-515>515</a></span>
<span class=normal><a href=#__codelineno-0-516>516</a></span>
<span class=normal><a href=#__codelineno-0-517>517</a></span>
<span class=normal><a href=#__codelineno-0-518>518</a></span>
<span class=normal><a href=#__codelineno-0-519>519</a></span>
<span class=normal><a href=#__codelineno-0-520>520</a></span>
<span class=normal><a href=#__codelineno-0-521>521</a></span>
<span class=normal><a href=#__codelineno-0-522>522</a></span>
<span class=normal><a href=#__codelineno-0-523>523</a></span>
<span class=normal><a href=#__codelineno-0-524>524</a></span>
<span class=normal><a href=#__codelineno-0-525>525</a></span>
<span class=normal><a href=#__codelineno-0-526>526</a></span>
<span class=normal><a href=#__codelineno-0-527>527</a></span>
<span class=normal><a href=#__codelineno-0-528>528</a></span>
<span class=normal><a href=#__codelineno-0-529>529</a></span>
<span class=normal><a href=#__codelineno-0-530>530</a></span>
<span class=normal><a href=#__codelineno-0-531>531</a></span>
<span class=normal><a href=#__codelineno-0-532>532</a></span>
<span class=normal><a href=#__codelineno-0-533>533</a></span>
<span class=normal><a href=#__codelineno-0-534>534</a></span>
<span class=normal><a href=#__codelineno-0-535>535</a></span>
<span class=normal><a href=#__codelineno-0-536>536</a></span>
<span class=normal><a href=#__codelineno-0-537>537</a></span>
<span class=normal><a href=#__codelineno-0-538>538</a></span>
<span class=normal><a href=#__codelineno-0-539>539</a></span>
<span class=normal><a href=#__codelineno-0-540>540</a></span>
<span class=normal><a href=#__codelineno-0-541>541</a></span>
<span class=normal><a href=#__codelineno-0-542>542</a></span>
<span class=normal><a href=#__codelineno-0-543>543</a></span>
<span class=normal><a href=#__codelineno-0-544>544</a></span>
<span class=normal><a href=#__codelineno-0-545>545</a></span>
<span class=normal><a href=#__codelineno-0-546>546</a></span>
<span class=normal><a href=#__codelineno-0-547>547</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-479 name=__codelineno-0-479></a><span class=nd>@classmethod</span>
<a id=__codelineno-0-480 name=__codelineno-0-480></a><span class=k>def</span> <span class=nf>render_to_response</span><span class=p>(</span>
<a id=__codelineno-0-481 name=__codelineno-0-481></a> <span class=bp>cls</span><span class=p>,</span>
<a id=__codelineno-0-482 name=__codelineno-0-482></a> <span class=n>context</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>Union</span><span class=p>[</span><span class=n>Dict</span><span class=p>[</span><span class=nb>str</span><span class=p>,</span> <span class=n>Any</span><span class=p>],</span> <span class=n>Context</span><span class=p>]]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-483 name=__codelineno-0-483></a> <span class=n>slots</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>SlotsType</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-484 name=__codelineno-0-484></a> <span class=n>escape_slots_content</span><span class=p>:</span> <span class=nb>bool</span> <span class=o>=</span> <span class=kc>True</span><span class=p>,</span>
<a id=__codelineno-0-485 name=__codelineno-0-485></a> <span class=n>args</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>ArgsType</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-486 name=__codelineno-0-486></a> <span class=n>kwargs</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>KwargsType</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-487 name=__codelineno-0-487></a> <span class=nb>type</span><span class=p>:</span> <span class=n>RenderType</span> <span class=o>=</span> <span class=s2>&quot;document&quot;</span><span class=p>,</span>
<a id=__codelineno-0-488 name=__codelineno-0-488></a> <span class=o>*</span><span class=n>response_args</span><span class=p>:</span> <span class=n>Any</span><span class=p>,</span>
<a id=__codelineno-0-489 name=__codelineno-0-489></a> <span class=o>**</span><span class=n>response_kwargs</span><span class=p>:</span> <span class=n>Any</span><span class=p>,</span>
<a id=__codelineno-0-490 name=__codelineno-0-490></a><span class=p>)</span> <span class=o>-&gt;</span> <span class=n>HttpResponse</span><span class=p>:</span>
<a id=__codelineno-0-491 name=__codelineno-0-491></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-492 name=__codelineno-0-492></a><span class=sd> Render the component and wrap the content in the response class.</span>
<a id=__codelineno-0-493 name=__codelineno-0-493></a>
<a id=__codelineno-0-494 name=__codelineno-0-494></a><span class=sd> The response class is taken from `Component.response_class`. Defaults to `django.http.HttpResponse`.</span>
<a id=__codelineno-0-495 name=__codelineno-0-495></a>
<a id=__codelineno-0-496 name=__codelineno-0-496></a><span class=sd> This is the interface for the `django.views.View` class which allows us to</span>
<a id=__codelineno-0-497 name=__codelineno-0-497></a><span class=sd> use components as Django views with `component.as_view()`.</span>
<a id=__codelineno-0-498 name=__codelineno-0-498></a>
<a id=__codelineno-0-499 name=__codelineno-0-499></a><span class=sd> Inputs:</span>
<a id=__codelineno-0-500 name=__codelineno-0-500></a><span class=sd> - `args` - Positional args for the component. This is the same as calling the component</span>
<a id=__codelineno-0-501 name=__codelineno-0-501></a><span class=sd> as `{% component &quot;my_comp&quot; arg1 arg2 ... %}`</span>
<a id=__codelineno-0-502 name=__codelineno-0-502></a><span class=sd> - `kwargs` - Kwargs for the component. This is the same as calling the component</span>
<a id=__codelineno-0-503 name=__codelineno-0-503></a><span class=sd> as `{% component &quot;my_comp&quot; key1=val1 key2=val2 ... %}`</span>
<a id=__codelineno-0-504 name=__codelineno-0-504></a><span class=sd> - `slots` - Component slot fills. This is the same as pasing `{% fill %}` tags to the component.</span>
<a id=__codelineno-0-505 name=__codelineno-0-505></a><span class=sd> Accepts a dictionary of `{ slot_name: slot_content }` where `slot_content` can be a string</span>
<a id=__codelineno-0-506 name=__codelineno-0-506></a><span class=sd> or render function.</span>
<a id=__codelineno-0-507 name=__codelineno-0-507></a><span class=sd> - `escape_slots_content` - Whether the content from `slots` should be escaped.</span>
<a id=__codelineno-0-508 name=__codelineno-0-508></a><span class=sd> - `context` - A context (dictionary or Django&#39;s Context) within which the component</span>
<a id=__codelineno-0-509 name=__codelineno-0-509></a><span class=sd> is rendered. The keys on the context can be accessed from within the template.</span>
<a id=__codelineno-0-510 name=__codelineno-0-510></a><span class=sd> - NOTE: In &quot;isolated&quot; mode, context is NOT accessible, and data MUST be passed via</span>
<a id=__codelineno-0-511 name=__codelineno-0-511></a><span class=sd> component&#39;s args and kwargs.</span>
<a id=__codelineno-0-512 name=__codelineno-0-512></a><span class=sd> - `type` - Configure how to handle JS and CSS dependencies.</span>
<a id=__codelineno-0-513 name=__codelineno-0-513></a><span class=sd> - `&quot;document&quot;` (default) - JS dependencies are inserted into `{% component_js_dependencies %}`,</span>
<a id=__codelineno-0-514 name=__codelineno-0-514></a><span class=sd> or to the end of the `&lt;body&gt;` tag. CSS dependencies are inserted into</span>
<a id=__codelineno-0-515 name=__codelineno-0-515></a><span class=sd> `{% component_css_dependencies %}`, or the end of the `&lt;head&gt;` tag.</span>
<a id=__codelineno-0-516 name=__codelineno-0-516></a>
<a id=__codelineno-0-517 name=__codelineno-0-517></a><span class=sd> Any additional args and kwargs are passed to the `response_class`.</span>
<a id=__codelineno-0-518 name=__codelineno-0-518></a>
<a id=__codelineno-0-519 name=__codelineno-0-519></a><span class=sd> Example:</span>
<a id=__codelineno-0-520 name=__codelineno-0-520></a><span class=sd> ```py</span>
<a id=__codelineno-0-521 name=__codelineno-0-521></a><span class=sd> MyComponent.render_to_response(</span>
<a id=__codelineno-0-522 name=__codelineno-0-522></a><span class=sd> args=[1, &quot;two&quot;, {}],</span>
<a id=__codelineno-0-523 name=__codelineno-0-523></a><span class=sd> kwargs={</span>
<a id=__codelineno-0-524 name=__codelineno-0-524></a><span class=sd> &quot;key&quot;: 123,</span>
<a id=__codelineno-0-525 name=__codelineno-0-525></a><span class=sd> },</span>
<a id=__codelineno-0-526 name=__codelineno-0-526></a><span class=sd> slots={</span>
<a id=__codelineno-0-527 name=__codelineno-0-527></a><span class=sd> &quot;header&quot;: &#39;STATIC TEXT HERE&#39;,</span>
<a id=__codelineno-0-528 name=__codelineno-0-528></a><span class=sd> &quot;footer&quot;: lambda ctx, slot_kwargs, slot_ref: f&#39;CTX: {ctx[&#39;hello&#39;]} SLOT_DATA: {slot_kwargs[&#39;abc&#39;]}&#39;,</span>
<a id=__codelineno-0-529 name=__codelineno-0-529></a><span class=sd> },</span>
<a id=__codelineno-0-530 name=__codelineno-0-530></a><span class=sd> escape_slots_content=False,</span>
<a id=__codelineno-0-531 name=__codelineno-0-531></a><span class=sd> # HttpResponse input</span>
<a id=__codelineno-0-532 name=__codelineno-0-532></a><span class=sd> status=201,</span>
<a id=__codelineno-0-533 name=__codelineno-0-533></a><span class=sd> headers={...},</span>
<a id=__codelineno-0-534 name=__codelineno-0-534></a><span class=sd> )</span>
<a id=__codelineno-0-535 name=__codelineno-0-535></a><span class=sd> # HttpResponse(content=..., status=201, headers=...)</span>
<a id=__codelineno-0-536 name=__codelineno-0-536></a><span class=sd> ```</span>
<a id=__codelineno-0-537 name=__codelineno-0-537></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-538 name=__codelineno-0-538></a> <span class=n>content</span> <span class=o>=</span> <span class=bp>cls</span><span class=o>.</span><span class=n>render</span><span class=p>(</span>
<a id=__codelineno-0-539 name=__codelineno-0-539></a> <span class=n>args</span><span class=o>=</span><span class=n>args</span><span class=p>,</span>
<a id=__codelineno-0-540 name=__codelineno-0-540></a> <span class=n>kwargs</span><span class=o>=</span><span class=n>kwargs</span><span class=p>,</span>
<a id=__codelineno-0-541 name=__codelineno-0-541></a> <span class=n>context</span><span class=o>=</span><span class=n>context</span><span class=p>,</span>
<a id=__codelineno-0-542 name=__codelineno-0-542></a> <span class=n>slots</span><span class=o>=</span><span class=n>slots</span><span class=p>,</span>
<a id=__codelineno-0-543 name=__codelineno-0-543></a> <span class=n>escape_slots_content</span><span class=o>=</span><span class=n>escape_slots_content</span><span class=p>,</span>
<a id=__codelineno-0-544 name=__codelineno-0-544></a> <span class=nb>type</span><span class=o>=</span><span class=nb>type</span><span class=p>,</span>
<a id=__codelineno-0-545 name=__codelineno-0-545></a> <span class=n>render_dependencies</span><span class=o>=</span><span class=kc>True</span><span class=p>,</span>
<a id=__codelineno-0-546 name=__codelineno-0-546></a> <span class=p>)</span>
<a id=__codelineno-0-547 name=__codelineno-0-547></a> <span class=k>return</span> <span class=bp>cls</span><span class=o>.</span><span class=n>response_class</span><span class=p>(</span><span class=n>content</span><span class=p>,</span> <span class=o>*</span><span class=n>response_args</span><span class=p>,</span> <span class=o>**</span><span class=n>response_kwargs</span><span class=p>)</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> </div> </div> </div> <div class="doc doc-object doc-module"> <h3 id=django_components.components.dynamic class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-module"></code> <span class="doc doc-object-name doc-module-name">dynamic</span> <a href=#django_components.components.dynamic class=headerlink title="Permanent link">¤</a></h3> <div class="doc doc-contents "> <p><span class=doc-section-title>Modules:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.components.dynamic.types href=#django_components.types>types</a></code></b> <div class=doc-md-description> <p>Helper types for IDEs.</p> </div> </li> </ul> <p><span class=doc-section-title>Classes:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.components.dynamic.DynamicComponent href=#django_components.components.dynamic.DynamicComponent>DynamicComponent</a></code></b> <div class=doc-md-description> <p>This component is given a registered name or a reference to another component,</p> </div> </li> </ul> <div class="doc doc-children"> <div class="doc doc-object doc-class"> <h4 id=django_components.components.dynamic.DynamicComponent class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-class"></code> <span class="doc doc-object-name doc-class-name">DynamicComponent</span> <a href=#django_components.components.dynamic.DynamicComponent class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>DynamicComponent</span><span class=p>(</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a> <span class=n>registered_name</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a> <span class=n>component_id</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a> <span class=n>outer_context</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><span title=django.template.context.Context>Context</span></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a> <span class=n>registry</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-internal" title=django_components.component_registry.ComponentRegistry href=#django_components.component_registry.ComponentRegistry>ComponentRegistry</a></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-6 name=__codelineno-0-6 href=#__codelineno-0-6></a><span class=p>)</span>
</code></pre></div> <div class="doc doc-contents "> <p class="doc doc-class-bases"> Bases: <code><a class="autorefs autorefs-internal" title=django_components.Component href=#django_components.Component>Component</a></code></p> <p>This component is given a registered name or a reference to another component, and behaves as if the other component was in its place.</p> <p>The args, kwargs, and slot fills are all passed down to the underlying component.</p> <p><span class=doc-section-title>Parameters:</span></p> <ul> <li class="doc-section-item field-body"> <b><code>is</code></b> (<code><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a> | <a class="autorefs autorefs-external" title=typing.Type href=https://docs.python.org/3.12/library/typing.html#typing.Type>Type</a>[<a class="autorefs autorefs-internal" title=django_components.Component href=#django_components.Component>Component</a>]</code>) <div class=doc-md-description> <p>Component that should be rendered. Either a registered name of a component, or a <a href=../api#django_components.Component>Component</a> class directly. Required.</p> </div> </li> <li class="doc-section-item field-body"> <b><code>registry</code></b> (<code><a class="autorefs autorefs-internal" title=django_components.ComponentRegistry href=#django_components.ComponentRegistry>ComponentRegistry</a></code>, default: <code>None</code> ) <div class=doc-md-description> <p>Specify the <a href=../api#django_components.ComponentRegistry>registry</a> to search for the registered name. If omitted, all registries are searched until the first match.</p> </div> </li> <li class="doc-section-item field-body"> <b><code>*args</code></b> <div class=doc-md-description> <p>Additional data passed to the component.</p> </div> </li> <li class="doc-section-item field-body"> <b><code>**kwargs</code></b> <div class=doc-md-description> <p>Additional data passed to the component.</p> </div> </li> </ul> <p><strong>Slots:</strong></p> <ul> <li>Any slots, depending on the actual component.</li> </ul> <p><strong>Examples:</strong></p> <p>Django <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=cp>{%</span> <span class=k>component</span> <span class=s2>&quot;dynamic&quot;</span> <span class=k>is</span><span class=o>=</span><span class=nv>table_comp</span> <span class=nv>data</span><span class=o>=</span><span class=nv>table_data</span> <span class=nv>headers</span><span class=o>=</span><span class=nv>table_headers</span> <span class=cp>%}</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a><span class=x> </span><span class=cp>{%</span> <span class=k>fill</span> <span class=s2>&quot;pagination&quot;</span> <span class=cp>%}</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=x> </span><span class=cp>{%</span> <span class=k>component</span> <span class=s2>&quot;pagination&quot;</span> <span class=o>/</span> <span class=cp>%}</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a><span class=x> </span><span class=cp>{%</span> <span class=k>endfill</span> <span class=cp>%}</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a><span class=cp>{%</span> <span class=k>endcomponent</span> <span class=cp>%}</span>
</code></pre></div></p> <p>Python <div class=highlight><pre><span></span><code><a id=__codelineno-1-1 name=__codelineno-1-1 href=#__codelineno-1-1></a><span class=kn>from</span> <span class=nn>django_components</span> <span class=kn>import</span> <span class=n>DynamicComponent</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=n>DynamicComponent</span><span class=o>.</span><span class=n>render</span><span class=p>(</span>
<a id=__codelineno-1-4 name=__codelineno-1-4 href=#__codelineno-1-4></a> <span class=n>kwargs</span><span class=o>=</span><span class=p>{</span>
<a id=__codelineno-1-5 name=__codelineno-1-5 href=#__codelineno-1-5></a> <span class=s2>&quot;is&quot;</span><span class=p>:</span> <span class=n>table_comp</span><span class=p>,</span>
<a id=__codelineno-1-6 name=__codelineno-1-6 href=#__codelineno-1-6></a> <span class=s2>&quot;data&quot;</span><span class=p>:</span> <span class=n>table_data</span><span class=p>,</span>
<a id=__codelineno-1-7 name=__codelineno-1-7 href=#__codelineno-1-7></a> <span class=s2>&quot;headers&quot;</span><span class=p>:</span> <span class=n>table_headers</span><span class=p>,</span>
<a id=__codelineno-1-8 name=__codelineno-1-8 href=#__codelineno-1-8></a> <span class=p>},</span>
<a id=__codelineno-1-9 name=__codelineno-1-9 href=#__codelineno-1-9></a> <span class=n>slots</span><span class=o>=</span><span class=p>{</span>
<a id=__codelineno-1-10 name=__codelineno-1-10 href=#__codelineno-1-10></a> <span class=s2>&quot;pagination&quot;</span><span class=p>:</span> <span class=n>PaginationComponent</span><span class=o>.</span><span class=n>render</span><span class=p>(</span>
<a id=__codelineno-1-11 name=__codelineno-1-11 href=#__codelineno-1-11></a> <span class=n>render_dependencies</span><span class=o>=</span><span class=kc>False</span><span class=p>,</span>
<a id=__codelineno-1-12 name=__codelineno-1-12 href=#__codelineno-1-12></a> <span class=p>),</span>
<a id=__codelineno-1-13 name=__codelineno-1-13 href=#__codelineno-1-13></a> <span class=p>},</span>
<a id=__codelineno-1-14 name=__codelineno-1-14 href=#__codelineno-1-14></a><span class=p>)</span>
</code></pre></div></p> <h5 id=django_components.components.dynamic.DynamicComponent--use-cases>Use cases<a class=headerlink href=#django_components.components.dynamic.DynamicComponent--use-cases title="Permanent link">¤</a></h5> <p>Dynamic components are suitable if you are writing something like a form component. You may design it such that users give you a list of input types, and you render components depending on the input types.</p> <p>While you could handle this with a series of if / else statements, that's not an extensible approach. Instead, you can use the dynamic component in place of normal components.</p> <h5 id=django_components.components.dynamic.DynamicComponent--component-name>Component name<a class=headerlink href=#django_components.components.dynamic.DynamicComponent--component-name title="Permanent link">¤</a></h5> <p>By default, the dynamic component is registered under the name <code>"dynamic"</code>. In case of a conflict, you can set the <a href=../settings#django_components.app_settings.ComponentsSettings.dynamic_component_name><code>COMPONENTS.dynamic_component_name</code></a> setting to change the name used for the dynamic components.</p> <div class=highlight><pre><span></span><code><a id=__codelineno-2-1 name=__codelineno-2-1 href=#__codelineno-2-1></a><span class=c1># settings.py</span>
<a id=__codelineno-2-2 name=__codelineno-2-2 href=#__codelineno-2-2></a><span class=n>COMPONENTS</span> <span class=o>=</span> <span class=n>ComponentsSettings</span><span class=p>(</span>
<a id=__codelineno-2-3 name=__codelineno-2-3 href=#__codelineno-2-3></a> <span class=n>dynamic_component_name</span><span class=o>=</span><span class=s2>&quot;my_dynamic&quot;</span><span class=p>,</span>
<a id=__codelineno-2-4 name=__codelineno-2-4 href=#__codelineno-2-4></a><span class=p>)</span>
</code></pre></div> <p>After which you will be able to use the dynamic component with the new name: <div class=highlight><pre><span></span><code><a id=__codelineno-3-1 name=__codelineno-3-1 href=#__codelineno-3-1></a><span class=cp>{%</span> <span class=k>component</span> <span class=s2>&quot;my_dynamic&quot;</span> <span class=k>is</span><span class=o>=</span><span class=nv>table_comp</span> <span class=nv>data</span><span class=o>=</span><span class=nv>table_data</span> <span class=nv>headers</span><span class=o>=</span><span class=nv>table_headers</span> <span class=cp>%}</span>
<a id=__codelineno-3-2 name=__codelineno-3-2 href=#__codelineno-3-2></a><span class=x> </span><span class=cp>{%</span> <span class=k>fill</span> <span class=s2>&quot;pagination&quot;</span> <span class=cp>%}</span>
<a id=__codelineno-3-3 name=__codelineno-3-3 href=#__codelineno-3-3></a><span class=x> </span><span class=cp>{%</span> <span class=k>component</span> <span class=s2>&quot;pagination&quot;</span> <span class=o>/</span> <span class=cp>%}</span>
<a id=__codelineno-3-4 name=__codelineno-3-4 href=#__codelineno-3-4></a><span class=x> </span><span class=cp>{%</span> <span class=k>endfill</span> <span class=cp>%}</span>
<a id=__codelineno-3-5 name=__codelineno-3-5 href=#__codelineno-3-5></a><span class=cp>{%</span> <span class=k>endcomponent</span> <span class=cp>%}</span>
</code></pre></div></p> <p><span class=doc-section-title>Methods:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.components.dynamic.DynamicComponent.as_view href=#django_components.components.dynamic.DynamicComponent.as_view>as_view</a></code></b> <div class=doc-md-description> <p>Shortcut for calling <code>Component.View.as_view</code> and passing component instance to it.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.components.dynamic.DynamicComponent.get_template href=#django_components.components.dynamic.DynamicComponent.get_template>get_template</a></code></b> <div class=doc-md-description> <p>Inlined Django template associated with this component. Can be a plain string or a Template instance.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.components.dynamic.DynamicComponent.get_template_name href=#django_components.components.dynamic.DynamicComponent.get_template_name>get_template_name</a></code></b> <div class=doc-md-description> <p>Filepath to the Django template associated with this component.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.components.dynamic.DynamicComponent.inject href=#django_components.components.dynamic.DynamicComponent.inject>inject</a></code></b> <div class=doc-md-description> <p>Use this method to retrieve the data that was passed to a <code>{% provide %}</code> tag</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.components.dynamic.DynamicComponent.on_render_after href=#django_components.components.dynamic.DynamicComponent.on_render_after>on_render_after</a></code></b> <div class=doc-md-description> <p>Hook that runs just after the component's template was rendered.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.components.dynamic.DynamicComponent.on_render_before href=#django_components.components.dynamic.DynamicComponent.on_render_before>on_render_before</a></code></b> <div class=doc-md-description> <p>Hook that runs just before the component's template is rendered.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.components.dynamic.DynamicComponent.render href=#django_components.components.dynamic.DynamicComponent.render>render</a></code></b> <div class=doc-md-description> <p>Render the component into a string.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.components.dynamic.DynamicComponent.render_to_response href=#django_components.components.dynamic.DynamicComponent.render_to_response>render_to_response</a></code></b> <div class=doc-md-description> <p>Render the component and wrap the content in the response class.</p> </div> </li> </ul> <p><span class=doc-section-title>Attributes:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.components.dynamic.DynamicComponent.Media href=#django_components.components.dynamic.DynamicComponent.Media>Media</a></code></b> <div class=doc-md-description> <p>Defines JS and CSS media files associated with this component.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.components.dynamic.DynamicComponent.css href=#django_components.components.dynamic.DynamicComponent.css>css</a></code></b> (<code><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>]</code>) <div class=doc-md-description> <p>Inlined CSS associated with this component.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.components.dynamic.DynamicComponent.input href=#django_components.components.dynamic.DynamicComponent.input>input</a></code></b> (<code><span title=django_components.component.RenderInput>RenderInput</span>[<span title=django_components.component.ArgsType>ArgsType</span>, <span title=django_components.component.KwargsType>KwargsType</span>, <span title=django_components.component.SlotsType>SlotsType</span>]</code>) <div class=doc-md-description> <p>Input holds the data (like arg, kwargs, slots) that were passsed to</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.components.dynamic.DynamicComponent.is_filled href=#django_components.components.dynamic.DynamicComponent.is_filled>is_filled</a></code></b> (<code><a class="autorefs autorefs-internal" title=django_components.slots.SlotIsFilled href=#django_components.slots.SlotIsFilled>SlotIsFilled</a></code>) <div class=doc-md-description> <p>Dictionary describing which slots have or have not been filled.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.components.dynamic.DynamicComponent.js href=#django_components.components.dynamic.DynamicComponent.js>js</a></code></b> (<code><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>]</code>) <div class=doc-md-description> <p>Inlined JS associated with this component.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.components.dynamic.DynamicComponent.media href=#django_components.components.dynamic.DynamicComponent.media>media</a></code></b> (<code><a class="autorefs autorefs-internal" title=django_components.component.Component.Media href=#django_components.component.Component.Media>Media</a></code>) <div class=doc-md-description> <p>Normalized definition of JS and CSS media files associated with this component.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.components.dynamic.DynamicComponent.response_class href=#django_components.components.dynamic.DynamicComponent.response_class>response_class</a></code></b> <div class=doc-md-description> <p>This allows to configure what class is used to generate response from <code>render_to_response</code></p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.components.dynamic.DynamicComponent.template_name href=#django_components.components.dynamic.DynamicComponent.template_name>template_name</a></code></b> (<code><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>]</code>) <div class=doc-md-description> <p>Filepath to the Django template associated with this component.</p> </div> </li> </ul> <details class=quote> <summary>Source code in <code>src/django_components/component.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-287>287</a></span>
<span class=normal><a href=#__codelineno-0-288>288</a></span>
<span class=normal><a href=#__codelineno-0-289>289</a></span>
<span class=normal><a href=#__codelineno-0-290>290</a></span>
<span class=normal><a href=#__codelineno-0-291>291</a></span>
<span class=normal><a href=#__codelineno-0-292>292</a></span>
<span class=normal><a href=#__codelineno-0-293>293</a></span>
<span class=normal><a href=#__codelineno-0-294>294</a></span>
<span class=normal><a href=#__codelineno-0-295>295</a></span>
<span class=normal><a href=#__codelineno-0-296>296</a></span>
<span class=normal><a href=#__codelineno-0-297>297</a></span>
<span class=normal><a href=#__codelineno-0-298>298</a></span>
<span class=normal><a href=#__codelineno-0-299>299</a></span>
<span class=normal><a href=#__codelineno-0-300>300</a></span>
<span class=normal><a href=#__codelineno-0-301>301</a></span>
<span class=normal><a href=#__codelineno-0-302>302</a></span>
<span class=normal><a href=#__codelineno-0-303>303</a></span>
<span class=normal><a href=#__codelineno-0-304>304</a></span>
<span class=normal><a href=#__codelineno-0-305>305</a></span>
<span class=normal><a href=#__codelineno-0-306>306</a></span>
<span class=normal><a href=#__codelineno-0-307>307</a></span>
<span class=normal><a href=#__codelineno-0-308>308</a></span>
<span class=normal><a href=#__codelineno-0-309>309</a></span>
<span class=normal><a href=#__codelineno-0-310>310</a></span>
<span class=normal><a href=#__codelineno-0-311>311</a></span>
<span class=normal><a href=#__codelineno-0-312>312</a></span>
<span class=normal><a href=#__codelineno-0-313>313</a></span>
<span class=normal><a href=#__codelineno-0-314>314</a></span>
<span class=normal><a href=#__codelineno-0-315>315</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-287 name=__codelineno-0-287></a><span class=k>def</span> <span class=fm>__init__</span><span class=p>(</span>
<a id=__codelineno-0-288 name=__codelineno-0-288></a> <span class=bp>self</span><span class=p>,</span>
<a id=__codelineno-0-289 name=__codelineno-0-289></a> <span class=n>registered_name</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=nb>str</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-290 name=__codelineno-0-290></a> <span class=n>component_id</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=nb>str</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-291 name=__codelineno-0-291></a> <span class=n>outer_context</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>Context</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-292 name=__codelineno-0-292></a> <span class=n>registry</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>ComponentRegistry</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span> <span class=c1># noqa F811</span>
<a id=__codelineno-0-293 name=__codelineno-0-293></a><span class=p>):</span>
<a id=__codelineno-0-294 name=__codelineno-0-294></a> <span class=c1># When user first instantiates the component class before calling</span>
<a id=__codelineno-0-295 name=__codelineno-0-295></a> <span class=c1># `render` or `render_to_response`, then we want to allow the render</span>
<a id=__codelineno-0-296 name=__codelineno-0-296></a> <span class=c1># function to make use of the instantiated object.</span>
<a id=__codelineno-0-297 name=__codelineno-0-297></a> <span class=c1>#</span>
<a id=__codelineno-0-298 name=__codelineno-0-298></a> <span class=c1># So while `MyComp.render()` creates a new instance of MyComp internally,</span>
<a id=__codelineno-0-299 name=__codelineno-0-299></a> <span class=c1># if we do `MyComp(registered_name=&quot;abc&quot;).render()`, then we use the</span>
<a id=__codelineno-0-300 name=__codelineno-0-300></a> <span class=c1># already-instantiated object.</span>
<a id=__codelineno-0-301 name=__codelineno-0-301></a> <span class=c1>#</span>
<a id=__codelineno-0-302 name=__codelineno-0-302></a> <span class=c1># To achieve that, we want to re-assign the class methods as instance methods.</span>
<a id=__codelineno-0-303 name=__codelineno-0-303></a> <span class=c1># For that we have to &quot;unwrap&quot; the class methods via __func__.</span>
<a id=__codelineno-0-304 name=__codelineno-0-304></a> <span class=c1># See https://stackoverflow.com/a/76706399/9788634</span>
<a id=__codelineno-0-305 name=__codelineno-0-305></a> <span class=bp>self</span><span class=o>.</span><span class=n>render_to_response</span> <span class=o>=</span> <span class=n>types</span><span class=o>.</span><span class=n>MethodType</span><span class=p>(</span><span class=bp>self</span><span class=o>.</span><span class=vm>__class__</span><span class=o>.</span><span class=n>render_to_response</span><span class=o>.</span><span class=vm>__func__</span><span class=p>,</span> <span class=bp>self</span><span class=p>)</span> <span class=c1># type: ignore</span>
<a id=__codelineno-0-306 name=__codelineno-0-306></a> <span class=bp>self</span><span class=o>.</span><span class=n>render</span> <span class=o>=</span> <span class=n>types</span><span class=o>.</span><span class=n>MethodType</span><span class=p>(</span><span class=bp>self</span><span class=o>.</span><span class=vm>__class__</span><span class=o>.</span><span class=n>render</span><span class=o>.</span><span class=vm>__func__</span><span class=p>,</span> <span class=bp>self</span><span class=p>)</span> <span class=c1># type: ignore</span>
<a id=__codelineno-0-307 name=__codelineno-0-307></a> <span class=bp>self</span><span class=o>.</span><span class=n>as_view</span> <span class=o>=</span> <span class=n>types</span><span class=o>.</span><span class=n>MethodType</span><span class=p>(</span><span class=bp>self</span><span class=o>.</span><span class=vm>__class__</span><span class=o>.</span><span class=n>as_view</span><span class=o>.</span><span class=vm>__func__</span><span class=p>,</span> <span class=bp>self</span><span class=p>)</span> <span class=c1># type: ignore</span>
<a id=__codelineno-0-308 name=__codelineno-0-308></a>
<a id=__codelineno-0-309 name=__codelineno-0-309></a> <span class=bp>self</span><span class=o>.</span><span class=n>registered_name</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=nb>str</span><span class=p>]</span> <span class=o>=</span> <span class=n>registered_name</span>
<a id=__codelineno-0-310 name=__codelineno-0-310></a> <span class=bp>self</span><span class=o>.</span><span class=n>outer_context</span><span class=p>:</span> <span class=n>Context</span> <span class=o>=</span> <span class=n>outer_context</span> <span class=ow>or</span> <span class=n>Context</span><span class=p>()</span>
<a id=__codelineno-0-311 name=__codelineno-0-311></a> <span class=bp>self</span><span class=o>.</span><span class=n>component_id</span> <span class=o>=</span> <span class=n>component_id</span> <span class=ow>or</span> <span class=n>gen_id</span><span class=p>()</span>
<a id=__codelineno-0-312 name=__codelineno-0-312></a> <span class=bp>self</span><span class=o>.</span><span class=n>registry</span> <span class=o>=</span> <span class=n>registry</span> <span class=ow>or</span> <span class=n>registry_</span>
<a id=__codelineno-0-313 name=__codelineno-0-313></a> <span class=bp>self</span><span class=o>.</span><span class=n>_render_stack</span><span class=p>:</span> <span class=n>Deque</span><span class=p>[</span><span class=n>RenderStackItem</span><span class=p>[</span><span class=n>ArgsType</span><span class=p>,</span> <span class=n>KwargsType</span><span class=p>,</span> <span class=n>SlotsType</span><span class=p>]]</span> <span class=o>=</span> <span class=n>deque</span><span class=p>()</span>
<a id=__codelineno-0-314 name=__codelineno-0-314></a> <span class=c1># None == uninitialized, False == No types, Tuple == types</span>
<a id=__codelineno-0-315 name=__codelineno-0-315></a> <span class=bp>self</span><span class=o>.</span><span class=n>_types</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>Union</span><span class=p>[</span><span class=n>Tuple</span><span class=p>[</span><span class=n>Any</span><span class=p>,</span> <span class=n>Any</span><span class=p>,</span> <span class=n>Any</span><span class=p>,</span> <span class=n>Any</span><span class=p>,</span> <span class=n>Any</span><span class=p>,</span> <span class=n>Any</span><span class=p>],</span> <span class=n>Literal</span><span class=p>[</span><span class=kc>False</span><span class=p>]]]</span> <span class=o>=</span> <span class=kc>None</span>
</code></pre></div></td></tr></table></div> </details> <div class="doc doc-children"> <div class="doc doc-object doc-attribute"> <h5 id=django_components.components.dynamic.DynamicComponent.Media class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">Media</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.components.dynamic.DynamicComponent.Media class=headerlink title="Permanent link">¤</a></h5> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>Media</span> <span class=o>=</span> <span class=n><a class="autorefs autorefs-internal" title=django_components.component_media.ComponentMediaInput href=#django_components.component_media.ComponentMediaInput>ComponentMediaInput</a></span>
</code></pre></div> <div class="doc doc-contents "> <p>Defines JS and CSS media files associated with this component.</p> </div> </div> <div class="doc doc-object doc-attribute"> <h5 id=django_components.components.dynamic.DynamicComponent.css class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">css</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.components.dynamic.DynamicComponent.css class=headerlink title="Permanent link">¤</a></h5> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>css</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>Inlined CSS associated with this component.</p> </div> </div> <div class="doc doc-object doc-attribute"> <h5 id=django_components.components.dynamic.DynamicComponent.input class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">input</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-property"><code>property</code></small> </span> <a href=#django_components.components.dynamic.DynamicComponent.input class=headerlink title="Permanent link">¤</a></h5> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nb>input</span><span class=p>:</span> <span class=n><span title=django_components.component.RenderInput>RenderInput</span></span><span class=p>[</span><span class=n><span title=django_components.component.ArgsType>ArgsType</span></span><span class=p>,</span> <span class=n><span title=django_components.component.KwargsType>KwargsType</span></span><span class=p>,</span> <span class=n><span title=django_components.component.SlotsType>SlotsType</span></span><span class=p>]</span>
</code></pre></div> <div class="doc doc-contents "> <p>Input holds the data (like arg, kwargs, slots) that were passsed to the current execution of the <code>render</code> method.</p> </div> </div> <div class="doc doc-object doc-attribute"> <h5 id=django_components.components.dynamic.DynamicComponent.is_filled class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">is_filled</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-property"><code>property</code></small> </span> <a href=#django_components.components.dynamic.DynamicComponent.is_filled class=headerlink title="Permanent link">¤</a></h5> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>is_filled</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-internal" title=django_components.slots.SlotIsFilled href=#django_components.slots.SlotIsFilled>SlotIsFilled</a></span>
</code></pre></div> <div class="doc doc-contents "> <p>Dictionary describing which slots have or have not been filled.</p> <p>This attribute is available for use only within the template as <code>{{ component_vars.is_filled.slot_name }}</code>, and within <code>on_render_before</code> and <code>on_render_after</code> hooks.</p> </div> </div> <div class="doc doc-object doc-attribute"> <h5 id=django_components.components.dynamic.DynamicComponent.js class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">js</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.components.dynamic.DynamicComponent.js class=headerlink title="Permanent link">¤</a></h5> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>js</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>Inlined JS associated with this component.</p> </div> </div> <div class="doc doc-object doc-attribute"> <h5 id=django_components.components.dynamic.DynamicComponent.media class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">media</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.components.dynamic.DynamicComponent.media class=headerlink title="Permanent link">¤</a></h5> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>media</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-internal" title=django_components.component.Component.Media href=#django_components.component.Component.Media>Media</a></span>
</code></pre></div> <div class="doc doc-contents "> <p>Normalized definition of JS and CSS media files associated with this component.</p> <p>NOTE: This field is generated from Component.Media class.</p> </div> </div> <div class="doc doc-object doc-attribute"> <h5 id=django_components.components.dynamic.DynamicComponent.response_class class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">response_class</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.components.dynamic.DynamicComponent.response_class class=headerlink title="Permanent link">¤</a></h5> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>response_class</span> <span class=o>=</span> <span class=n><a class="autorefs autorefs-external" title=django.http.HttpResponse href=https://docs.djangoproject.com/en/5.0/ref/request-response/#django.http.HttpResponse>HttpResponse</a></span>
</code></pre></div> <div class="doc doc-contents "> <p>This allows to configure what class is used to generate response from <code>render_to_response</code></p> </div> </div> <div class="doc doc-object doc-attribute"> <h5 id=django_components.components.dynamic.DynamicComponent.template_name class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">template_name</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.components.dynamic.DynamicComponent.template_name class=headerlink title="Permanent link">¤</a></h5> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>template_name</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>Filepath to the Django template associated with this component.</p> <p>The filepath must be relative to either the file where the component class was defined, or one of the roots of <code>STATIFILES_DIRS</code>.</p> <p>Only one of <code>template_name</code>, <code>get_template_name</code>, <code>template</code> or <code>get_template</code> must be defined.</p> </div> </div> <div class="doc doc-object doc-function"> <h5 id=django_components.components.dynamic.DynamicComponent.as_view class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">as_view</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-classmethod"><code>classmethod</code></small> </span> <a href=#django_components.components.dynamic.DynamicComponent.as_view class=headerlink title="Permanent link">¤</a></h5> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>as_view</span><span class=p>(</span><span class=o>**</span><span class=n>initkwargs</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Any href=https://docs.python.org/3.12/library/typing.html#typing.Any>Any</a></span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><span title=django_components.component.ViewFn>ViewFn</span></span>
</code></pre></div> <div class="doc doc-contents "> <p>Shortcut for calling <code>Component.View.as_view</code> and passing component instance to it.</p> <details class=quote> <summary>Source code in <code>src/django_components/component.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-460>460</a></span>
<span class=normal><a href=#__codelineno-0-461>461</a></span>
<span class=normal><a href=#__codelineno-0-462>462</a></span>
<span class=normal><a href=#__codelineno-0-463>463</a></span>
<span class=normal><a href=#__codelineno-0-464>464</a></span>
<span class=normal><a href=#__codelineno-0-465>465</a></span>
<span class=normal><a href=#__codelineno-0-466>466</a></span>
<span class=normal><a href=#__codelineno-0-467>467</a></span>
<span class=normal><a href=#__codelineno-0-468>468</a></span>
<span class=normal><a href=#__codelineno-0-469>469</a></span>
<span class=normal><a href=#__codelineno-0-470>470</a></span>
<span class=normal><a href=#__codelineno-0-471>471</a></span>
<span class=normal><a href=#__codelineno-0-472>472</a></span>
<span class=normal><a href=#__codelineno-0-473>473</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-460 name=__codelineno-0-460></a><span class=nd>@classmethod</span>
<a id=__codelineno-0-461 name=__codelineno-0-461></a><span class=k>def</span> <span class=nf>as_view</span><span class=p>(</span><span class=bp>cls</span><span class=p>,</span> <span class=o>**</span><span class=n>initkwargs</span><span class=p>:</span> <span class=n>Any</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n>ViewFn</span><span class=p>:</span>
<a id=__codelineno-0-462 name=__codelineno-0-462></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-463 name=__codelineno-0-463></a><span class=sd> Shortcut for calling `Component.View.as_view` and passing component instance to it.</span>
<a id=__codelineno-0-464 name=__codelineno-0-464></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-465 name=__codelineno-0-465></a> <span class=c1># This method may be called as class method or as instance method.</span>
<a id=__codelineno-0-466 name=__codelineno-0-466></a> <span class=c1># If called as class method, create a new instance.</span>
<a id=__codelineno-0-467 name=__codelineno-0-467></a> <span class=k>if</span> <span class=nb>isinstance</span><span class=p>(</span><span class=bp>cls</span><span class=p>,</span> <span class=n>Component</span><span class=p>):</span>
<a id=__codelineno-0-468 name=__codelineno-0-468></a> <span class=n>comp</span><span class=p>:</span> <span class=n>Component</span> <span class=o>=</span> <span class=bp>cls</span>
<a id=__codelineno-0-469 name=__codelineno-0-469></a> <span class=k>else</span><span class=p>:</span>
<a id=__codelineno-0-470 name=__codelineno-0-470></a> <span class=n>comp</span> <span class=o>=</span> <span class=bp>cls</span><span class=p>()</span>
<a id=__codelineno-0-471 name=__codelineno-0-471></a>
<a id=__codelineno-0-472 name=__codelineno-0-472></a> <span class=c1># Allow the View class to access this component via `self.component`</span>
<a id=__codelineno-0-473 name=__codelineno-0-473></a> <span class=k>return</span> <span class=n>comp</span><span class=o>.</span><span class=n>View</span><span class=o>.</span><span class=n>as_view</span><span class=p>(</span><span class=o>**</span><span class=n>initkwargs</span><span class=p>,</span> <span class=n>component</span><span class=o>=</span><span class=n>comp</span><span class=p>)</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h5 id=django_components.components.dynamic.DynamicComponent.get_template class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">get_template</span> <a href=#django_components.components.dynamic.DynamicComponent.get_template class=headerlink title="Permanent link">¤</a></h5> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>get_template</span><span class=p>(</span><span class=n>context</span><span class=p>:</span> <span class=n><span title=django.template.context.Context>Context</span></span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Union href=https://docs.python.org/3.12/library/typing.html#typing.Union>Union</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span> <span class=n><span title=django.template.base.Template>Template</span></span><span class=p>]]</span>
</code></pre></div> <div class="doc doc-contents "> <p>Inlined Django template associated with this component. Can be a plain string or a Template instance.</p> <p>Only one of <code>template_name</code>, <code>get_template_name</code>, <code>template</code> or <code>get_template</code> must be defined.</p> <details class=quote> <summary>Source code in <code>src/django_components/component.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-227>227</a></span>
<span class=normal><a href=#__codelineno-0-228>228</a></span>
<span class=normal><a href=#__codelineno-0-229>229</a></span>
<span class=normal><a href=#__codelineno-0-230>230</a></span>
<span class=normal><a href=#__codelineno-0-231>231</a></span>
<span class=normal><a href=#__codelineno-0-232>232</a></span>
<span class=normal><a href=#__codelineno-0-233>233</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-227 name=__codelineno-0-227></a><span class=k>def</span> <span class=nf>get_template</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>context</span><span class=p>:</span> <span class=n>Context</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n>Optional</span><span class=p>[</span><span class=n>Union</span><span class=p>[</span><span class=nb>str</span><span class=p>,</span> <span class=n>Template</span><span class=p>]]:</span>
<a id=__codelineno-0-228 name=__codelineno-0-228></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-229 name=__codelineno-0-229></a><span class=sd> Inlined Django template associated with this component. Can be a plain string or a Template instance.</span>
<a id=__codelineno-0-230 name=__codelineno-0-230></a>
<a id=__codelineno-0-231 name=__codelineno-0-231></a><span class=sd> Only one of `template_name`, `get_template_name`, `template` or `get_template` must be defined.</span>
<a id=__codelineno-0-232 name=__codelineno-0-232></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-233 name=__codelineno-0-233></a> <span class=k>return</span> <span class=kc>None</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h5 id=django_components.components.dynamic.DynamicComponent.get_template_name class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">get_template_name</span> <a href=#django_components.components.dynamic.DynamicComponent.get_template_name class=headerlink title="Permanent link">¤</a></h5> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>get_template_name</span><span class=p>(</span><span class=n>context</span><span class=p>:</span> <span class=n><span title=django.template.context.Context>Context</span></span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]</span>
</code></pre></div> <div class="doc doc-contents "> <p>Filepath to the Django template associated with this component.</p> <p>The filepath must be relative to either the file where the component class was defined, or one of the roots of <code>STATIFILES_DIRS</code>.</p> <p>Only one of <code>template_name</code>, <code>get_template_name</code>, <code>template</code> or <code>get_template</code> must be defined.</p> <details class=quote> <summary>Source code in <code>src/django_components/component.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-209>209</a></span>
<span class=normal><a href=#__codelineno-0-210>210</a></span>
<span class=normal><a href=#__codelineno-0-211>211</a></span>
<span class=normal><a href=#__codelineno-0-212>212</a></span>
<span class=normal><a href=#__codelineno-0-213>213</a></span>
<span class=normal><a href=#__codelineno-0-214>214</a></span>
<span class=normal><a href=#__codelineno-0-215>215</a></span>
<span class=normal><a href=#__codelineno-0-216>216</a></span>
<span class=normal><a href=#__codelineno-0-217>217</a></span>
<span class=normal><a href=#__codelineno-0-218>218</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-209 name=__codelineno-0-209></a><span class=k>def</span> <span class=nf>get_template_name</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>context</span><span class=p>:</span> <span class=n>Context</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-0-210 name=__codelineno-0-210></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-211 name=__codelineno-0-211></a><span class=sd> Filepath to the Django template associated with this component.</span>
<a id=__codelineno-0-212 name=__codelineno-0-212></a>
<a id=__codelineno-0-213 name=__codelineno-0-213></a><span class=sd> The filepath must be relative to either the file where the component class was defined,</span>
<a id=__codelineno-0-214 name=__codelineno-0-214></a><span class=sd> or one of the roots of `STATIFILES_DIRS`.</span>
<a id=__codelineno-0-215 name=__codelineno-0-215></a>
<a id=__codelineno-0-216 name=__codelineno-0-216></a><span class=sd> Only one of `template_name`, `get_template_name`, `template` or `get_template` must be defined.</span>
<a id=__codelineno-0-217 name=__codelineno-0-217></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-218 name=__codelineno-0-218></a> <span class=k>return</span> <span class=kc>None</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h5 id=django_components.components.dynamic.DynamicComponent.inject class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">inject</span> <a href=#django_components.components.dynamic.DynamicComponent.inject class=headerlink title="Permanent link">¤</a></h5> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>inject</span><span class=p>(</span><span class=n>key</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span> <span class=n>default</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Any href=https://docs.python.org/3.12/library/typing.html#typing.Any>Any</a></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-external" title=typing.Any href=https://docs.python.org/3.12/library/typing.html#typing.Any>Any</a></span>
</code></pre></div> <div class="doc doc-contents "> <p>Use this method to retrieve the data that was passed to a <code>{% provide %}</code> tag with the corresponding key.</p> <p>To retrieve the data, <code>inject()</code> must be called inside a component that's inside the <code>{% provide %}</code> tag.</p> <p>You may also pass a default that will be used if the <code>provide</code> tag with given key was NOT found.</p> <p>This method mut be used inside the <code>get_context_data()</code> method and raises an error if called elsewhere.</p> <p>Example:</p> <p>Given this template: <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=cp>{%</span> <span class=k>provide</span> <span class=s2>&quot;provider&quot;</span> <span class=nv>hello</span><span class=o>=</span><span class=s2>&quot;world&quot;</span> <span class=cp>%}</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a><span class=x> </span><span class=cp>{%</span> <span class=k>component</span> <span class=s2>&quot;my_comp&quot;</span> <span class=cp>%}</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=x> </span><span class=cp>{%</span> <span class=k>endcomponent</span> <span class=cp>%}</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a><span class=cp>{%</span> <span class=k>endprovide</span> <span class=cp>%}</span>
</code></pre></div></p> <p>And given this definition of "my_comp" component: <div class=highlight><pre><span></span><code><a id=__codelineno-1-1 name=__codelineno-1-1 href=#__codelineno-1-1></a><span class=kn>from</span> <span class=nn>django_components</span> <span class=kn>import</span> <span class=n>Component</span><span class=p>,</span> <span class=n>register</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=nd>@register</span><span class=p>(</span><span class=s2>&quot;my_comp&quot;</span><span class=p>)</span>
<a id=__codelineno-1-4 name=__codelineno-1-4 href=#__codelineno-1-4></a><span class=k>class</span> <span class=nc>MyComp</span><span class=p>(</span><span class=n>Component</span><span class=p>):</span>
<a id=__codelineno-1-5 name=__codelineno-1-5 href=#__codelineno-1-5></a> <span class=n>template</span> <span class=o>=</span> <span class=s2>&quot;hi {{ data.hello }}!&quot;</span>
<a id=__codelineno-1-6 name=__codelineno-1-6 href=#__codelineno-1-6></a> <span class=k>def</span> <span class=nf>get_context_data</span><span class=p>(</span><span class=bp>self</span><span class=p>):</span>
<a id=__codelineno-1-7 name=__codelineno-1-7 href=#__codelineno-1-7></a> <span class=n>data</span> <span class=o>=</span> <span class=bp>self</span><span class=o>.</span><span class=n>inject</span><span class=p>(</span><span class=s2>&quot;provider&quot;</span><span class=p>)</span>
<a id=__codelineno-1-8 name=__codelineno-1-8 href=#__codelineno-1-8></a> <span class=k>return</span> <span class=p>{</span><span class=s2>&quot;data&quot;</span><span class=p>:</span> <span class=n>data</span><span class=p>}</span>
</code></pre></div></p> <p>This renders into: <div class=highlight><pre><span></span><code><a id=__codelineno-2-1 name=__codelineno-2-1 href=#__codelineno-2-1></a>hi world!
</code></pre></div></p> <p>As the <code>{{ data.hello }}</code> is taken from the "provider".</p> <details class=quote> <summary>Source code in <code>src/django_components/component.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-410>410</a></span>
<span class=normal><a href=#__codelineno-0-411>411</a></span>
<span class=normal><a href=#__codelineno-0-412>412</a></span>
<span class=normal><a href=#__codelineno-0-413>413</a></span>
<span class=normal><a href=#__codelineno-0-414>414</a></span>
<span class=normal><a href=#__codelineno-0-415>415</a></span>
<span class=normal><a href=#__codelineno-0-416>416</a></span>
<span class=normal><a href=#__codelineno-0-417>417</a></span>
<span class=normal><a href=#__codelineno-0-418>418</a></span>
<span class=normal><a href=#__codelineno-0-419>419</a></span>
<span class=normal><a href=#__codelineno-0-420>420</a></span>
<span class=normal><a href=#__codelineno-0-421>421</a></span>
<span class=normal><a href=#__codelineno-0-422>422</a></span>
<span class=normal><a href=#__codelineno-0-423>423</a></span>
<span class=normal><a href=#__codelineno-0-424>424</a></span>
<span class=normal><a href=#__codelineno-0-425>425</a></span>
<span class=normal><a href=#__codelineno-0-426>426</a></span>
<span class=normal><a href=#__codelineno-0-427>427</a></span>
<span class=normal><a href=#__codelineno-0-428>428</a></span>
<span class=normal><a href=#__codelineno-0-429>429</a></span>
<span class=normal><a href=#__codelineno-0-430>430</a></span>
<span class=normal><a href=#__codelineno-0-431>431</a></span>
<span class=normal><a href=#__codelineno-0-432>432</a></span>
<span class=normal><a href=#__codelineno-0-433>433</a></span>
<span class=normal><a href=#__codelineno-0-434>434</a></span>
<span class=normal><a href=#__codelineno-0-435>435</a></span>
<span class=normal><a href=#__codelineno-0-436>436</a></span>
<span class=normal><a href=#__codelineno-0-437>437</a></span>
<span class=normal><a href=#__codelineno-0-438>438</a></span>
<span class=normal><a href=#__codelineno-0-439>439</a></span>
<span class=normal><a href=#__codelineno-0-440>440</a></span>
<span class=normal><a href=#__codelineno-0-441>441</a></span>
<span class=normal><a href=#__codelineno-0-442>442</a></span>
<span class=normal><a href=#__codelineno-0-443>443</a></span>
<span class=normal><a href=#__codelineno-0-444>444</a></span>
<span class=normal><a href=#__codelineno-0-445>445</a></span>
<span class=normal><a href=#__codelineno-0-446>446</a></span>
<span class=normal><a href=#__codelineno-0-447>447</a></span>
<span class=normal><a href=#__codelineno-0-448>448</a></span>
<span class=normal><a href=#__codelineno-0-449>449</a></span>
<span class=normal><a href=#__codelineno-0-450>450</a></span>
<span class=normal><a href=#__codelineno-0-451>451</a></span>
<span class=normal><a href=#__codelineno-0-452>452</a></span>
<span class=normal><a href=#__codelineno-0-453>453</a></span>
<span class=normal><a href=#__codelineno-0-454>454</a></span>
<span class=normal><a href=#__codelineno-0-455>455</a></span>
<span class=normal><a href=#__codelineno-0-456>456</a></span>
<span class=normal><a href=#__codelineno-0-457>457</a></span>
<span class=normal><a href=#__codelineno-0-458>458</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-410 name=__codelineno-0-410></a><span class=k>def</span> <span class=nf>inject</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>key</span><span class=p>:</span> <span class=nb>str</span><span class=p>,</span> <span class=n>default</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>Any</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n>Any</span><span class=p>:</span>
<a id=__codelineno-0-411 name=__codelineno-0-411></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-412 name=__codelineno-0-412></a><span class=sd> Use this method to retrieve the data that was passed to a `{% provide %}` tag</span>
<a id=__codelineno-0-413 name=__codelineno-0-413></a><span class=sd> with the corresponding key.</span>
<a id=__codelineno-0-414 name=__codelineno-0-414></a>
<a id=__codelineno-0-415 name=__codelineno-0-415></a><span class=sd> To retrieve the data, `inject()` must be called inside a component that&#39;s</span>
<a id=__codelineno-0-416 name=__codelineno-0-416></a><span class=sd> inside the `{% provide %}` tag.</span>
<a id=__codelineno-0-417 name=__codelineno-0-417></a>
<a id=__codelineno-0-418 name=__codelineno-0-418></a><span class=sd> You may also pass a default that will be used if the `provide` tag with given</span>
<a id=__codelineno-0-419 name=__codelineno-0-419></a><span class=sd> key was NOT found.</span>
<a id=__codelineno-0-420 name=__codelineno-0-420></a>
<a id=__codelineno-0-421 name=__codelineno-0-421></a><span class=sd> This method mut be used inside the `get_context_data()` method and raises</span>
<a id=__codelineno-0-422 name=__codelineno-0-422></a><span class=sd> an error if called elsewhere.</span>
<a id=__codelineno-0-423 name=__codelineno-0-423></a>
<a id=__codelineno-0-424 name=__codelineno-0-424></a><span class=sd> Example:</span>
<a id=__codelineno-0-425 name=__codelineno-0-425></a>
<a id=__codelineno-0-426 name=__codelineno-0-426></a><span class=sd> Given this template:</span>
<a id=__codelineno-0-427 name=__codelineno-0-427></a><span class=sd> ```django</span>
<a id=__codelineno-0-428 name=__codelineno-0-428></a><span class=sd> {% provide &quot;provider&quot; hello=&quot;world&quot; %}</span>
<a id=__codelineno-0-429 name=__codelineno-0-429></a><span class=sd> {% component &quot;my_comp&quot; %}</span>
<a id=__codelineno-0-430 name=__codelineno-0-430></a><span class=sd> {% endcomponent %}</span>
<a id=__codelineno-0-431 name=__codelineno-0-431></a><span class=sd> {% endprovide %}</span>
<a id=__codelineno-0-432 name=__codelineno-0-432></a><span class=sd> ```</span>
<a id=__codelineno-0-433 name=__codelineno-0-433></a>
<a id=__codelineno-0-434 name=__codelineno-0-434></a><span class=sd> And given this definition of &quot;my_comp&quot; component:</span>
<a id=__codelineno-0-435 name=__codelineno-0-435></a><span class=sd> ```py</span>
<a id=__codelineno-0-436 name=__codelineno-0-436></a><span class=sd> from django_components import Component, register</span>
<a id=__codelineno-0-437 name=__codelineno-0-437></a>
<a id=__codelineno-0-438 name=__codelineno-0-438></a><span class=sd> @register(&quot;my_comp&quot;)</span>
<a id=__codelineno-0-439 name=__codelineno-0-439></a><span class=sd> class MyComp(Component):</span>
<a id=__codelineno-0-440 name=__codelineno-0-440></a><span class=sd> template = &quot;hi {{ data.hello }}!&quot;</span>
<a id=__codelineno-0-441 name=__codelineno-0-441></a><span class=sd> def get_context_data(self):</span>
<a id=__codelineno-0-442 name=__codelineno-0-442></a><span class=sd> data = self.inject(&quot;provider&quot;)</span>
<a id=__codelineno-0-443 name=__codelineno-0-443></a><span class=sd> return {&quot;data&quot;: data}</span>
<a id=__codelineno-0-444 name=__codelineno-0-444></a><span class=sd> ```</span>
<a id=__codelineno-0-445 name=__codelineno-0-445></a>
<a id=__codelineno-0-446 name=__codelineno-0-446></a><span class=sd> This renders into:</span>
<a id=__codelineno-0-447 name=__codelineno-0-447></a><span class=sd> ```</span>
<a id=__codelineno-0-448 name=__codelineno-0-448></a><span class=sd> hi world!</span>
<a id=__codelineno-0-449 name=__codelineno-0-449></a><span class=sd> ```</span>
<a id=__codelineno-0-450 name=__codelineno-0-450></a>
<a id=__codelineno-0-451 name=__codelineno-0-451></a><span class=sd> As the `{{ data.hello }}` is taken from the &quot;provider&quot;.</span>
<a id=__codelineno-0-452 name=__codelineno-0-452></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-453 name=__codelineno-0-453></a> <span class=k>if</span> <span class=bp>self</span><span class=o>.</span><span class=n>input</span> <span class=ow>is</span> <span class=kc>None</span><span class=p>:</span>
<a id=__codelineno-0-454 name=__codelineno-0-454></a> <span class=k>raise</span> <span class=ne>RuntimeError</span><span class=p>(</span>
<a id=__codelineno-0-455 name=__codelineno-0-455></a> <span class=sa>f</span><span class=s2>&quot;Method &#39;inject()&#39; of component &#39;</span><span class=si>{</span><span class=bp>self</span><span class=o>.</span><span class=n>name</span><span class=si>}</span><span class=s2>&#39; was called outside of &#39;get_context_data()&#39;&quot;</span>
<a id=__codelineno-0-456 name=__codelineno-0-456></a> <span class=p>)</span>
<a id=__codelineno-0-457 name=__codelineno-0-457></a>
<a id=__codelineno-0-458 name=__codelineno-0-458></a> <span class=k>return</span> <span class=n>get_injected_context_var</span><span class=p>(</span><span class=bp>self</span><span class=o>.</span><span class=n>name</span><span class=p>,</span> <span class=bp>self</span><span class=o>.</span><span class=n>input</span><span class=o>.</span><span class=n>context</span><span class=p>,</span> <span class=n>key</span><span class=p>,</span> <span class=n>default</span><span class=p>)</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h5 id=django_components.components.dynamic.DynamicComponent.on_render_after class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">on_render_after</span> <a href=#django_components.components.dynamic.DynamicComponent.on_render_after class=headerlink title="Permanent link">¤</a></h5> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>on_render_after</span><span class=p>(</span><span class=n>context</span><span class=p>:</span> <span class=n><span title=django.template.context.Context>Context</span></span><span class=p>,</span> <span class=n>template</span><span class=p>:</span> <span class=n><span title=django.template.base.Template>Template</span></span><span class=p>,</span> <span class=n>content</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><span title=django_components.slots.SlotResult>SlotResult</span></span><span class=p>]</span>
</code></pre></div> <div class="doc doc-contents "> <p>Hook that runs just after the component's template was rendered. It receives the rendered output as the last argument.</p> <p>You can use this hook to access the context or the template, but modifying them won't have any effect.</p> <p>To override the content that gets rendered, you can return a string or SafeString from this hook.</p> <details class=quote> <summary>Source code in <code>src/django_components/component.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-268>268</a></span>
<span class=normal><a href=#__codelineno-0-269>269</a></span>
<span class=normal><a href=#__codelineno-0-270>270</a></span>
<span class=normal><a href=#__codelineno-0-271>271</a></span>
<span class=normal><a href=#__codelineno-0-272>272</a></span>
<span class=normal><a href=#__codelineno-0-273>273</a></span>
<span class=normal><a href=#__codelineno-0-274>274</a></span>
<span class=normal><a href=#__codelineno-0-275>275</a></span>
<span class=normal><a href=#__codelineno-0-276>276</a></span>
<span class=normal><a href=#__codelineno-0-277>277</a></span>
<span class=normal><a href=#__codelineno-0-278>278</a></span>
<span class=normal><a href=#__codelineno-0-279>279</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-268 name=__codelineno-0-268></a><span class=k>def</span> <span class=nf>on_render_after</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>context</span><span class=p>:</span> <span class=n>Context</span><span class=p>,</span> <span class=n>template</span><span class=p>:</span> <span class=n>Template</span><span class=p>,</span> <span class=n>content</span><span class=p>:</span> <span class=nb>str</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n>Optional</span><span class=p>[</span><span class=n>SlotResult</span><span class=p>]:</span>
<a id=__codelineno-0-269 name=__codelineno-0-269></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-270 name=__codelineno-0-270></a><span class=sd> Hook that runs just after the component&#39;s template was rendered.</span>
<a id=__codelineno-0-271 name=__codelineno-0-271></a><span class=sd> It receives the rendered output as the last argument.</span>
<a id=__codelineno-0-272 name=__codelineno-0-272></a>
<a id=__codelineno-0-273 name=__codelineno-0-273></a><span class=sd> You can use this hook to access the context or the template, but modifying</span>
<a id=__codelineno-0-274 name=__codelineno-0-274></a><span class=sd> them won&#39;t have any effect.</span>
<a id=__codelineno-0-275 name=__codelineno-0-275></a>
<a id=__codelineno-0-276 name=__codelineno-0-276></a><span class=sd> To override the content that gets rendered, you can return a string or SafeString</span>
<a id=__codelineno-0-277 name=__codelineno-0-277></a><span class=sd> from this hook.</span>
<a id=__codelineno-0-278 name=__codelineno-0-278></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-279 name=__codelineno-0-279></a> <span class=k>pass</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h5 id=django_components.components.dynamic.DynamicComponent.on_render_before class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">on_render_before</span> <a href=#django_components.components.dynamic.DynamicComponent.on_render_before class=headerlink title="Permanent link">¤</a></h5> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>on_render_before</span><span class=p>(</span><span class=n>context</span><span class=p>:</span> <span class=n><span title=django.template.context.Context>Context</span></span><span class=p>,</span> <span class=n>template</span><span class=p>:</span> <span class=n><span title=django.template.base.Template>Template</span></span><span class=p>)</span> <span class=o>-&gt;</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>Hook that runs just before the component's template is rendered.</p> <p>You can use this hook to access or modify the context or the template.</p> <details class=quote> <summary>Source code in <code>src/django_components/component.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-260>260</a></span>
<span class=normal><a href=#__codelineno-0-261>261</a></span>
<span class=normal><a href=#__codelineno-0-262>262</a></span>
<span class=normal><a href=#__codelineno-0-263>263</a></span>
<span class=normal><a href=#__codelineno-0-264>264</a></span>
<span class=normal><a href=#__codelineno-0-265>265</a></span>
<span class=normal><a href=#__codelineno-0-266>266</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-260 name=__codelineno-0-260></a><span class=k>def</span> <span class=nf>on_render_before</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>context</span><span class=p>:</span> <span class=n>Context</span><span class=p>,</span> <span class=n>template</span><span class=p>:</span> <span class=n>Template</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=kc>None</span><span class=p>:</span>
<a id=__codelineno-0-261 name=__codelineno-0-261></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-262 name=__codelineno-0-262></a><span class=sd> Hook that runs just before the component&#39;s template is rendered.</span>
<a id=__codelineno-0-263 name=__codelineno-0-263></a>
<a id=__codelineno-0-264 name=__codelineno-0-264></a><span class=sd> You can use this hook to access or modify the context or the template.</span>
<a id=__codelineno-0-265 name=__codelineno-0-265></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-266 name=__codelineno-0-266></a> <span class=k>pass</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h5 id=django_components.components.dynamic.DynamicComponent.render class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">render</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-classmethod"><code>classmethod</code></small> </span> <a href=#django_components.components.dynamic.DynamicComponent.render class=headerlink title="Permanent link">¤</a></h5> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>render</span><span class=p>(</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a> <span class=n>context</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Union href=https://docs.python.org/3.12/library/typing.html#typing.Union>Union</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Dict href=https://docs.python.org/3.12/library/typing.html#typing.Dict>Dict</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span> <span class=n><a class="autorefs autorefs-external" title=typing.Any href=https://docs.python.org/3.12/library/typing.html#typing.Any>Any</a></span><span class=p>],</span> <span class=n><span title=django.template.context.Context>Context</span></span><span class=p>]]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a> <span class=n>args</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><span title=django_components.component.ArgsType>ArgsType</span></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a> <span class=n>kwargs</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><span title=django_components.component.KwargsType>KwargsType</span></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a> <span class=n>slots</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><span title=django_components.component.SlotsType>SlotsType</span></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-6 name=__codelineno-0-6 href=#__codelineno-0-6></a> <span class=n>escape_slots_content</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/functions.html#bool>bool</a></span> <span class=o>=</span> <span class=kc>True</span><span class=p>,</span>
<a id=__codelineno-0-7 name=__codelineno-0-7 href=#__codelineno-0-7></a> <span class=nb>type</span><span class=p>:</span> <span class=n><span title=django_components.dependencies.RenderType>RenderType</span></span> <span class=o>=</span> <span class=s2>&quot;document&quot;</span><span class=p>,</span>
<a id=__codelineno-0-8 name=__codelineno-0-8 href=#__codelineno-0-8></a> <span class=n>render_dependencies</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/functions.html#bool>bool</a></span> <span class=o>=</span> <span class=kc>True</span><span class=p>,</span>
<a id=__codelineno-0-9 name=__codelineno-0-9 href=#__codelineno-0-9></a><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span>
</code></pre></div> <div class="doc doc-contents "> <p>Render the component into a string.</p> <p>Inputs: - <code>args</code> - Positional args for the component. This is the same as calling the component as <code>{% component "my_comp" arg1 arg2 ... %}</code> - <code>kwargs</code> - Kwargs for the component. This is the same as calling the component as <code>{% component "my_comp" key1=val1 key2=val2 ... %}</code> - <code>slots</code> - Component slot fills. This is the same as pasing <code>{% fill %}</code> tags to the component. Accepts a dictionary of <code>{ slot_name: slot_content }</code> where <code>slot_content</code> can be a string or render function. - <code>escape_slots_content</code> - Whether the content from <code>slots</code> should be escaped. - <code>context</code> - A context (dictionary or Django's Context) within which the component is rendered. The keys on the context can be accessed from within the template. - NOTE: In "isolated" mode, context is NOT accessible, and data MUST be passed via component's args and kwargs. - <code>type</code> - Configure how to handle JS and CSS dependencies. - <code>"document"</code> (default) - JS dependencies are inserted into <code>{% component_js_dependencies %}</code>, or to the end of the <code>&lt;body&gt;</code> tag. CSS dependencies are inserted into <code>{% component_css_dependencies %}</code>, or the end of the <code>&lt;head&gt;</code> tag. - <code>render_dependencies</code> - Set this to <code>False</code> if you want to insert the resulting HTML into another component.</p> <p>Example: <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>MyComponent</span><span class=o>.</span><span class=n>render</span><span class=p>(</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a> <span class=n>args</span><span class=o>=</span><span class=p>[</span><span class=mi>1</span><span class=p>,</span> <span class=s2>&quot;two&quot;</span><span class=p>,</span> <span class=p>{}],</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a> <span class=n>kwargs</span><span class=o>=</span><span class=p>{</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a> <span class=s2>&quot;key&quot;</span><span class=p>:</span> <span class=mi>123</span><span class=p>,</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a> <span class=p>},</span>
<a id=__codelineno-0-6 name=__codelineno-0-6 href=#__codelineno-0-6></a> <span class=n>slots</span><span class=o>=</span><span class=p>{</span>
<a id=__codelineno-0-7 name=__codelineno-0-7 href=#__codelineno-0-7></a> <span class=s2>&quot;header&quot;</span><span class=p>:</span> <span class=s1>&#39;STATIC TEXT HERE&#39;</span><span class=p>,</span>
<a id=__codelineno-0-8 name=__codelineno-0-8 href=#__codelineno-0-8></a> <span class=s2>&quot;footer&quot;</span><span class=p>:</span> <span class=k>lambda</span> <span class=n>ctx</span><span class=p>,</span> <span class=n>slot_kwargs</span><span class=p>,</span> <span class=n>slot_ref</span><span class=p>:</span> <span class=sa>f</span><span class=s1>&#39;CTX: </span><span class=si>{</span><span class=n>ctx</span><span class=p>[</span><span class=s1>&#39;hello&#39;</span><span class=p>]</span><span class=si>}</span><span class=s1> SLOT_DATA: </span><span class=si>{</span><span class=n>slot_kwargs</span><span class=p>[</span><span class=s1>&#39;abc&#39;</span><span class=p>]</span><span class=si>}</span><span class=s1>&#39;</span><span class=p>,</span>
<a id=__codelineno-0-9 name=__codelineno-0-9 href=#__codelineno-0-9></a> <span class=p>},</span>
<a id=__codelineno-0-10 name=__codelineno-0-10 href=#__codelineno-0-10></a> <span class=n>escape_slots_content</span><span class=o>=</span><span class=kc>False</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> <details class=quote> <summary>Source code in <code>src/django_components/component.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-549>549</a></span>
<span class=normal><a href=#__codelineno-0-550>550</a></span>
<span class=normal><a href=#__codelineno-0-551>551</a></span>
<span class=normal><a href=#__codelineno-0-552>552</a></span>
<span class=normal><a href=#__codelineno-0-553>553</a></span>
<span class=normal><a href=#__codelineno-0-554>554</a></span>
<span class=normal><a href=#__codelineno-0-555>555</a></span>
<span class=normal><a href=#__codelineno-0-556>556</a></span>
<span class=normal><a href=#__codelineno-0-557>557</a></span>
<span class=normal><a href=#__codelineno-0-558>558</a></span>
<span class=normal><a href=#__codelineno-0-559>559</a></span>
<span class=normal><a href=#__codelineno-0-560>560</a></span>
<span class=normal><a href=#__codelineno-0-561>561</a></span>
<span class=normal><a href=#__codelineno-0-562>562</a></span>
<span class=normal><a href=#__codelineno-0-563>563</a></span>
<span class=normal><a href=#__codelineno-0-564>564</a></span>
<span class=normal><a href=#__codelineno-0-565>565</a></span>
<span class=normal><a href=#__codelineno-0-566>566</a></span>
<span class=normal><a href=#__codelineno-0-567>567</a></span>
<span class=normal><a href=#__codelineno-0-568>568</a></span>
<span class=normal><a href=#__codelineno-0-569>569</a></span>
<span class=normal><a href=#__codelineno-0-570>570</a></span>
<span class=normal><a href=#__codelineno-0-571>571</a></span>
<span class=normal><a href=#__codelineno-0-572>572</a></span>
<span class=normal><a href=#__codelineno-0-573>573</a></span>
<span class=normal><a href=#__codelineno-0-574>574</a></span>
<span class=normal><a href=#__codelineno-0-575>575</a></span>
<span class=normal><a href=#__codelineno-0-576>576</a></span>
<span class=normal><a href=#__codelineno-0-577>577</a></span>
<span class=normal><a href=#__codelineno-0-578>578</a></span>
<span class=normal><a href=#__codelineno-0-579>579</a></span>
<span class=normal><a href=#__codelineno-0-580>580</a></span>
<span class=normal><a href=#__codelineno-0-581>581</a></span>
<span class=normal><a href=#__codelineno-0-582>582</a></span>
<span class=normal><a href=#__codelineno-0-583>583</a></span>
<span class=normal><a href=#__codelineno-0-584>584</a></span>
<span class=normal><a href=#__codelineno-0-585>585</a></span>
<span class=normal><a href=#__codelineno-0-586>586</a></span>
<span class=normal><a href=#__codelineno-0-587>587</a></span>
<span class=normal><a href=#__codelineno-0-588>588</a></span>
<span class=normal><a href=#__codelineno-0-589>589</a></span>
<span class=normal><a href=#__codelineno-0-590>590</a></span>
<span class=normal><a href=#__codelineno-0-591>591</a></span>
<span class=normal><a href=#__codelineno-0-592>592</a></span>
<span class=normal><a href=#__codelineno-0-593>593</a></span>
<span class=normal><a href=#__codelineno-0-594>594</a></span>
<span class=normal><a href=#__codelineno-0-595>595</a></span>
<span class=normal><a href=#__codelineno-0-596>596</a></span>
<span class=normal><a href=#__codelineno-0-597>597</a></span>
<span class=normal><a href=#__codelineno-0-598>598</a></span>
<span class=normal><a href=#__codelineno-0-599>599</a></span>
<span class=normal><a href=#__codelineno-0-600>600</a></span>
<span class=normal><a href=#__codelineno-0-601>601</a></span>
<span class=normal><a href=#__codelineno-0-602>602</a></span>
<span class=normal><a href=#__codelineno-0-603>603</a></span>
<span class=normal><a href=#__codelineno-0-604>604</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-549 name=__codelineno-0-549></a><span class=nd>@classmethod</span>
<a id=__codelineno-0-550 name=__codelineno-0-550></a><span class=k>def</span> <span class=nf>render</span><span class=p>(</span>
<a id=__codelineno-0-551 name=__codelineno-0-551></a> <span class=bp>cls</span><span class=p>,</span>
<a id=__codelineno-0-552 name=__codelineno-0-552></a> <span class=n>context</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>Union</span><span class=p>[</span><span class=n>Dict</span><span class=p>[</span><span class=nb>str</span><span class=p>,</span> <span class=n>Any</span><span class=p>],</span> <span class=n>Context</span><span class=p>]]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-553 name=__codelineno-0-553></a> <span class=n>args</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>ArgsType</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-554 name=__codelineno-0-554></a> <span class=n>kwargs</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>KwargsType</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-555 name=__codelineno-0-555></a> <span class=n>slots</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>SlotsType</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-556 name=__codelineno-0-556></a> <span class=n>escape_slots_content</span><span class=p>:</span> <span class=nb>bool</span> <span class=o>=</span> <span class=kc>True</span><span class=p>,</span>
<a id=__codelineno-0-557 name=__codelineno-0-557></a> <span class=nb>type</span><span class=p>:</span> <span class=n>RenderType</span> <span class=o>=</span> <span class=s2>&quot;document&quot;</span><span class=p>,</span>
<a id=__codelineno-0-558 name=__codelineno-0-558></a> <span class=n>render_dependencies</span><span class=p>:</span> <span class=nb>bool</span> <span class=o>=</span> <span class=kc>True</span><span class=p>,</span>
<a id=__codelineno-0-559 name=__codelineno-0-559></a><span class=p>)</span> <span class=o>-&gt;</span> <span class=nb>str</span><span class=p>:</span>
<a id=__codelineno-0-560 name=__codelineno-0-560></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-561 name=__codelineno-0-561></a><span class=sd> Render the component into a string.</span>
<a id=__codelineno-0-562 name=__codelineno-0-562></a>
<a id=__codelineno-0-563 name=__codelineno-0-563></a><span class=sd> Inputs:</span>
<a id=__codelineno-0-564 name=__codelineno-0-564></a><span class=sd> - `args` - Positional args for the component. This is the same as calling the component</span>
<a id=__codelineno-0-565 name=__codelineno-0-565></a><span class=sd> as `{% component &quot;my_comp&quot; arg1 arg2 ... %}`</span>
<a id=__codelineno-0-566 name=__codelineno-0-566></a><span class=sd> - `kwargs` - Kwargs for the component. This is the same as calling the component</span>
<a id=__codelineno-0-567 name=__codelineno-0-567></a><span class=sd> as `{% component &quot;my_comp&quot; key1=val1 key2=val2 ... %}`</span>
<a id=__codelineno-0-568 name=__codelineno-0-568></a><span class=sd> - `slots` - Component slot fills. This is the same as pasing `{% fill %}` tags to the component.</span>
<a id=__codelineno-0-569 name=__codelineno-0-569></a><span class=sd> Accepts a dictionary of `{ slot_name: slot_content }` where `slot_content` can be a string</span>
<a id=__codelineno-0-570 name=__codelineno-0-570></a><span class=sd> or render function.</span>
<a id=__codelineno-0-571 name=__codelineno-0-571></a><span class=sd> - `escape_slots_content` - Whether the content from `slots` should be escaped.</span>
<a id=__codelineno-0-572 name=__codelineno-0-572></a><span class=sd> - `context` - A context (dictionary or Django&#39;s Context) within which the component</span>
<a id=__codelineno-0-573 name=__codelineno-0-573></a><span class=sd> is rendered. The keys on the context can be accessed from within the template.</span>
<a id=__codelineno-0-574 name=__codelineno-0-574></a><span class=sd> - NOTE: In &quot;isolated&quot; mode, context is NOT accessible, and data MUST be passed via</span>
<a id=__codelineno-0-575 name=__codelineno-0-575></a><span class=sd> component&#39;s args and kwargs.</span>
<a id=__codelineno-0-576 name=__codelineno-0-576></a><span class=sd> - `type` - Configure how to handle JS and CSS dependencies.</span>
<a id=__codelineno-0-577 name=__codelineno-0-577></a><span class=sd> - `&quot;document&quot;` (default) - JS dependencies are inserted into `{% component_js_dependencies %}`,</span>
<a id=__codelineno-0-578 name=__codelineno-0-578></a><span class=sd> or to the end of the `&lt;body&gt;` tag. CSS dependencies are inserted into</span>
<a id=__codelineno-0-579 name=__codelineno-0-579></a><span class=sd> `{% component_css_dependencies %}`, or the end of the `&lt;head&gt;` tag.</span>
<a id=__codelineno-0-580 name=__codelineno-0-580></a><span class=sd> - `render_dependencies` - Set this to `False` if you want to insert the resulting HTML into another component.</span>
<a id=__codelineno-0-581 name=__codelineno-0-581></a>
<a id=__codelineno-0-582 name=__codelineno-0-582></a><span class=sd> Example:</span>
<a id=__codelineno-0-583 name=__codelineno-0-583></a><span class=sd> ```py</span>
<a id=__codelineno-0-584 name=__codelineno-0-584></a><span class=sd> MyComponent.render(</span>
<a id=__codelineno-0-585 name=__codelineno-0-585></a><span class=sd> args=[1, &quot;two&quot;, {}],</span>
<a id=__codelineno-0-586 name=__codelineno-0-586></a><span class=sd> kwargs={</span>
<a id=__codelineno-0-587 name=__codelineno-0-587></a><span class=sd> &quot;key&quot;: 123,</span>
<a id=__codelineno-0-588 name=__codelineno-0-588></a><span class=sd> },</span>
<a id=__codelineno-0-589 name=__codelineno-0-589></a><span class=sd> slots={</span>
<a id=__codelineno-0-590 name=__codelineno-0-590></a><span class=sd> &quot;header&quot;: &#39;STATIC TEXT HERE&#39;,</span>
<a id=__codelineno-0-591 name=__codelineno-0-591></a><span class=sd> &quot;footer&quot;: lambda ctx, slot_kwargs, slot_ref: f&#39;CTX: {ctx[&#39;hello&#39;]} SLOT_DATA: {slot_kwargs[&#39;abc&#39;]}&#39;,</span>
<a id=__codelineno-0-592 name=__codelineno-0-592></a><span class=sd> },</span>
<a id=__codelineno-0-593 name=__codelineno-0-593></a><span class=sd> escape_slots_content=False,</span>
<a id=__codelineno-0-594 name=__codelineno-0-594></a><span class=sd> )</span>
<a id=__codelineno-0-595 name=__codelineno-0-595></a><span class=sd> ```</span>
<a id=__codelineno-0-596 name=__codelineno-0-596></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-597 name=__codelineno-0-597></a> <span class=c1># This method may be called as class method or as instance method.</span>
<a id=__codelineno-0-598 name=__codelineno-0-598></a> <span class=c1># If called as class method, create a new instance.</span>
<a id=__codelineno-0-599 name=__codelineno-0-599></a> <span class=k>if</span> <span class=nb>isinstance</span><span class=p>(</span><span class=bp>cls</span><span class=p>,</span> <span class=n>Component</span><span class=p>):</span>
<a id=__codelineno-0-600 name=__codelineno-0-600></a> <span class=n>comp</span><span class=p>:</span> <span class=n>Component</span> <span class=o>=</span> <span class=bp>cls</span>
<a id=__codelineno-0-601 name=__codelineno-0-601></a> <span class=k>else</span><span class=p>:</span>
<a id=__codelineno-0-602 name=__codelineno-0-602></a> <span class=n>comp</span> <span class=o>=</span> <span class=bp>cls</span><span class=p>()</span>
<a id=__codelineno-0-603 name=__codelineno-0-603></a>
<a id=__codelineno-0-604 name=__codelineno-0-604></a> <span class=k>return</span> <span class=n>comp</span><span class=o>.</span><span class=n>_render</span><span class=p>(</span><span class=n>context</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>escape_slots_content</span><span class=p>,</span> <span class=nb>type</span><span class=p>,</span> <span class=n>render_dependencies</span><span class=p>)</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h5 id=django_components.components.dynamic.DynamicComponent.render_to_response class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">render_to_response</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-classmethod"><code>classmethod</code></small> </span> <a href=#django_components.components.dynamic.DynamicComponent.render_to_response class=headerlink title="Permanent link">¤</a></h5> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>render_to_response</span><span class=p>(</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a> <span class=n>context</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Union href=https://docs.python.org/3.12/library/typing.html#typing.Union>Union</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Dict href=https://docs.python.org/3.12/library/typing.html#typing.Dict>Dict</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span> <span class=n><a class="autorefs autorefs-external" title=typing.Any href=https://docs.python.org/3.12/library/typing.html#typing.Any>Any</a></span><span class=p>],</span> <span class=n><span title=django.template.context.Context>Context</span></span><span class=p>]]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a> <span class=n>slots</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><span title=django_components.component.SlotsType>SlotsType</span></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a> <span class=n>escape_slots_content</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/functions.html#bool>bool</a></span> <span class=o>=</span> <span class=kc>True</span><span class=p>,</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a> <span class=n>args</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><span title=django_components.component.ArgsType>ArgsType</span></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-6 name=__codelineno-0-6 href=#__codelineno-0-6></a> <span class=n>kwargs</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><span title=django_components.component.KwargsType>KwargsType</span></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-7 name=__codelineno-0-7 href=#__codelineno-0-7></a> <span class=nb>type</span><span class=p>:</span> <span class=n><span title=django_components.dependencies.RenderType>RenderType</span></span> <span class=o>=</span> <span class=s2>&quot;document&quot;</span><span class=p>,</span>
<a id=__codelineno-0-8 name=__codelineno-0-8 href=#__codelineno-0-8></a> <span class=o>*</span><span class=n>response_args</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Any href=https://docs.python.org/3.12/library/typing.html#typing.Any>Any</a></span><span class=p>,</span>
<a id=__codelineno-0-9 name=__codelineno-0-9 href=#__codelineno-0-9></a> <span class=o>**</span><span class=n>response_kwargs</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Any href=https://docs.python.org/3.12/library/typing.html#typing.Any>Any</a></span>
<a id=__codelineno-0-10 name=__codelineno-0-10 href=#__codelineno-0-10></a><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-external" title=django.http.HttpResponse href=https://docs.djangoproject.com/en/5.0/ref/request-response/#django.http.HttpResponse>HttpResponse</a></span>
</code></pre></div> <div class="doc doc-contents "> <p>Render the component and wrap the content in the response class.</p> <p>The response class is taken from <code>Component.response_class</code>. Defaults to <code>django.http.HttpResponse</code>.</p> <p>This is the interface for the <code>django.views.View</code> class which allows us to use components as Django views with <code>component.as_view()</code>.</p> <p>Inputs: - <code>args</code> - Positional args for the component. This is the same as calling the component as <code>{% component "my_comp" arg1 arg2 ... %}</code> - <code>kwargs</code> - Kwargs for the component. This is the same as calling the component as <code>{% component "my_comp" key1=val1 key2=val2 ... %}</code> - <code>slots</code> - Component slot fills. This is the same as pasing <code>{% fill %}</code> tags to the component. Accepts a dictionary of <code>{ slot_name: slot_content }</code> where <code>slot_content</code> can be a string or render function. - <code>escape_slots_content</code> - Whether the content from <code>slots</code> should be escaped. - <code>context</code> - A context (dictionary or Django's Context) within which the component is rendered. The keys on the context can be accessed from within the template. - NOTE: In "isolated" mode, context is NOT accessible, and data MUST be passed via component's args and kwargs. - <code>type</code> - Configure how to handle JS and CSS dependencies. - <code>"document"</code> (default) - JS dependencies are inserted into <code>{% component_js_dependencies %}</code>, or to the end of the <code>&lt;body&gt;</code> tag. CSS dependencies are inserted into <code>{% component_css_dependencies %}</code>, or the end of the <code>&lt;head&gt;</code> tag.</p> <p>Any additional args and kwargs are passed to the <code>response_class</code>.</p> <p>Example: <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>MyComponent</span><span class=o>.</span><span class=n>render_to_response</span><span class=p>(</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a> <span class=n>args</span><span class=o>=</span><span class=p>[</span><span class=mi>1</span><span class=p>,</span> <span class=s2>&quot;two&quot;</span><span class=p>,</span> <span class=p>{}],</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a> <span class=n>kwargs</span><span class=o>=</span><span class=p>{</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a> <span class=s2>&quot;key&quot;</span><span class=p>:</span> <span class=mi>123</span><span class=p>,</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a> <span class=p>},</span>
<a id=__codelineno-0-6 name=__codelineno-0-6 href=#__codelineno-0-6></a> <span class=n>slots</span><span class=o>=</span><span class=p>{</span>
<a id=__codelineno-0-7 name=__codelineno-0-7 href=#__codelineno-0-7></a> <span class=s2>&quot;header&quot;</span><span class=p>:</span> <span class=s1>&#39;STATIC TEXT HERE&#39;</span><span class=p>,</span>
<a id=__codelineno-0-8 name=__codelineno-0-8 href=#__codelineno-0-8></a> <span class=s2>&quot;footer&quot;</span><span class=p>:</span> <span class=k>lambda</span> <span class=n>ctx</span><span class=p>,</span> <span class=n>slot_kwargs</span><span class=p>,</span> <span class=n>slot_ref</span><span class=p>:</span> <span class=sa>f</span><span class=s1>&#39;CTX: </span><span class=si>{</span><span class=n>ctx</span><span class=p>[</span><span class=s1>&#39;hello&#39;</span><span class=p>]</span><span class=si>}</span><span class=s1> SLOT_DATA: </span><span class=si>{</span><span class=n>slot_kwargs</span><span class=p>[</span><span class=s1>&#39;abc&#39;</span><span class=p>]</span><span class=si>}</span><span class=s1>&#39;</span><span class=p>,</span>
<a id=__codelineno-0-9 name=__codelineno-0-9 href=#__codelineno-0-9></a> <span class=p>},</span>
<a id=__codelineno-0-10 name=__codelineno-0-10 href=#__codelineno-0-10></a> <span class=n>escape_slots_content</span><span class=o>=</span><span class=kc>False</span><span class=p>,</span>
<a id=__codelineno-0-11 name=__codelineno-0-11 href=#__codelineno-0-11></a> <span class=c1># HttpResponse input</span>
<a id=__codelineno-0-12 name=__codelineno-0-12 href=#__codelineno-0-12></a> <span class=n>status</span><span class=o>=</span><span class=mi>201</span><span class=p>,</span>
<a id=__codelineno-0-13 name=__codelineno-0-13 href=#__codelineno-0-13></a> <span class=n>headers</span><span class=o>=</span><span class=p>{</span><span class=o>...</span><span class=p>},</span>
<a id=__codelineno-0-14 name=__codelineno-0-14 href=#__codelineno-0-14></a><span class=p>)</span>
<a id=__codelineno-0-15 name=__codelineno-0-15 href=#__codelineno-0-15></a><span class=c1># HttpResponse(content=..., status=201, headers=...)</span>
</code></pre></div></p> <details class=quote> <summary>Source code in <code>src/django_components/component.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-479>479</a></span>
<span class=normal><a href=#__codelineno-0-480>480</a></span>
<span class=normal><a href=#__codelineno-0-481>481</a></span>
<span class=normal><a href=#__codelineno-0-482>482</a></span>
<span class=normal><a href=#__codelineno-0-483>483</a></span>
<span class=normal><a href=#__codelineno-0-484>484</a></span>
<span class=normal><a href=#__codelineno-0-485>485</a></span>
<span class=normal><a href=#__codelineno-0-486>486</a></span>
<span class=normal><a href=#__codelineno-0-487>487</a></span>
<span class=normal><a href=#__codelineno-0-488>488</a></span>
<span class=normal><a href=#__codelineno-0-489>489</a></span>
<span class=normal><a href=#__codelineno-0-490>490</a></span>
<span class=normal><a href=#__codelineno-0-491>491</a></span>
<span class=normal><a href=#__codelineno-0-492>492</a></span>
<span class=normal><a href=#__codelineno-0-493>493</a></span>
<span class=normal><a href=#__codelineno-0-494>494</a></span>
<span class=normal><a href=#__codelineno-0-495>495</a></span>
<span class=normal><a href=#__codelineno-0-496>496</a></span>
<span class=normal><a href=#__codelineno-0-497>497</a></span>
<span class=normal><a href=#__codelineno-0-498>498</a></span>
<span class=normal><a href=#__codelineno-0-499>499</a></span>
<span class=normal><a href=#__codelineno-0-500>500</a></span>
<span class=normal><a href=#__codelineno-0-501>501</a></span>
<span class=normal><a href=#__codelineno-0-502>502</a></span>
<span class=normal><a href=#__codelineno-0-503>503</a></span>
<span class=normal><a href=#__codelineno-0-504>504</a></span>
<span class=normal><a href=#__codelineno-0-505>505</a></span>
<span class=normal><a href=#__codelineno-0-506>506</a></span>
<span class=normal><a href=#__codelineno-0-507>507</a></span>
<span class=normal><a href=#__codelineno-0-508>508</a></span>
<span class=normal><a href=#__codelineno-0-509>509</a></span>
<span class=normal><a href=#__codelineno-0-510>510</a></span>
<span class=normal><a href=#__codelineno-0-511>511</a></span>
<span class=normal><a href=#__codelineno-0-512>512</a></span>
<span class=normal><a href=#__codelineno-0-513>513</a></span>
<span class=normal><a href=#__codelineno-0-514>514</a></span>
<span class=normal><a href=#__codelineno-0-515>515</a></span>
<span class=normal><a href=#__codelineno-0-516>516</a></span>
<span class=normal><a href=#__codelineno-0-517>517</a></span>
<span class=normal><a href=#__codelineno-0-518>518</a></span>
<span class=normal><a href=#__codelineno-0-519>519</a></span>
<span class=normal><a href=#__codelineno-0-520>520</a></span>
<span class=normal><a href=#__codelineno-0-521>521</a></span>
<span class=normal><a href=#__codelineno-0-522>522</a></span>
<span class=normal><a href=#__codelineno-0-523>523</a></span>
<span class=normal><a href=#__codelineno-0-524>524</a></span>
<span class=normal><a href=#__codelineno-0-525>525</a></span>
<span class=normal><a href=#__codelineno-0-526>526</a></span>
<span class=normal><a href=#__codelineno-0-527>527</a></span>
<span class=normal><a href=#__codelineno-0-528>528</a></span>
<span class=normal><a href=#__codelineno-0-529>529</a></span>
<span class=normal><a href=#__codelineno-0-530>530</a></span>
<span class=normal><a href=#__codelineno-0-531>531</a></span>
<span class=normal><a href=#__codelineno-0-532>532</a></span>
<span class=normal><a href=#__codelineno-0-533>533</a></span>
<span class=normal><a href=#__codelineno-0-534>534</a></span>
<span class=normal><a href=#__codelineno-0-535>535</a></span>
<span class=normal><a href=#__codelineno-0-536>536</a></span>
<span class=normal><a href=#__codelineno-0-537>537</a></span>
<span class=normal><a href=#__codelineno-0-538>538</a></span>
<span class=normal><a href=#__codelineno-0-539>539</a></span>
<span class=normal><a href=#__codelineno-0-540>540</a></span>
<span class=normal><a href=#__codelineno-0-541>541</a></span>
<span class=normal><a href=#__codelineno-0-542>542</a></span>
<span class=normal><a href=#__codelineno-0-543>543</a></span>
<span class=normal><a href=#__codelineno-0-544>544</a></span>
<span class=normal><a href=#__codelineno-0-545>545</a></span>
<span class=normal><a href=#__codelineno-0-546>546</a></span>
<span class=normal><a href=#__codelineno-0-547>547</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-479 name=__codelineno-0-479></a><span class=nd>@classmethod</span>
<a id=__codelineno-0-480 name=__codelineno-0-480></a><span class=k>def</span> <span class=nf>render_to_response</span><span class=p>(</span>
<a id=__codelineno-0-481 name=__codelineno-0-481></a> <span class=bp>cls</span><span class=p>,</span>
<a id=__codelineno-0-482 name=__codelineno-0-482></a> <span class=n>context</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>Union</span><span class=p>[</span><span class=n>Dict</span><span class=p>[</span><span class=nb>str</span><span class=p>,</span> <span class=n>Any</span><span class=p>],</span> <span class=n>Context</span><span class=p>]]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-483 name=__codelineno-0-483></a> <span class=n>slots</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>SlotsType</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-484 name=__codelineno-0-484></a> <span class=n>escape_slots_content</span><span class=p>:</span> <span class=nb>bool</span> <span class=o>=</span> <span class=kc>True</span><span class=p>,</span>
<a id=__codelineno-0-485 name=__codelineno-0-485></a> <span class=n>args</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>ArgsType</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-486 name=__codelineno-0-486></a> <span class=n>kwargs</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>KwargsType</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-487 name=__codelineno-0-487></a> <span class=nb>type</span><span class=p>:</span> <span class=n>RenderType</span> <span class=o>=</span> <span class=s2>&quot;document&quot;</span><span class=p>,</span>
<a id=__codelineno-0-488 name=__codelineno-0-488></a> <span class=o>*</span><span class=n>response_args</span><span class=p>:</span> <span class=n>Any</span><span class=p>,</span>
<a id=__codelineno-0-489 name=__codelineno-0-489></a> <span class=o>**</span><span class=n>response_kwargs</span><span class=p>:</span> <span class=n>Any</span><span class=p>,</span>
<a id=__codelineno-0-490 name=__codelineno-0-490></a><span class=p>)</span> <span class=o>-&gt;</span> <span class=n>HttpResponse</span><span class=p>:</span>
<a id=__codelineno-0-491 name=__codelineno-0-491></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-492 name=__codelineno-0-492></a><span class=sd> Render the component and wrap the content in the response class.</span>
<a id=__codelineno-0-493 name=__codelineno-0-493></a>
<a id=__codelineno-0-494 name=__codelineno-0-494></a><span class=sd> The response class is taken from `Component.response_class`. Defaults to `django.http.HttpResponse`.</span>
<a id=__codelineno-0-495 name=__codelineno-0-495></a>
<a id=__codelineno-0-496 name=__codelineno-0-496></a><span class=sd> This is the interface for the `django.views.View` class which allows us to</span>
<a id=__codelineno-0-497 name=__codelineno-0-497></a><span class=sd> use components as Django views with `component.as_view()`.</span>
<a id=__codelineno-0-498 name=__codelineno-0-498></a>
<a id=__codelineno-0-499 name=__codelineno-0-499></a><span class=sd> Inputs:</span>
<a id=__codelineno-0-500 name=__codelineno-0-500></a><span class=sd> - `args` - Positional args for the component. This is the same as calling the component</span>
<a id=__codelineno-0-501 name=__codelineno-0-501></a><span class=sd> as `{% component &quot;my_comp&quot; arg1 arg2 ... %}`</span>
<a id=__codelineno-0-502 name=__codelineno-0-502></a><span class=sd> - `kwargs` - Kwargs for the component. This is the same as calling the component</span>
<a id=__codelineno-0-503 name=__codelineno-0-503></a><span class=sd> as `{% component &quot;my_comp&quot; key1=val1 key2=val2 ... %}`</span>
<a id=__codelineno-0-504 name=__codelineno-0-504></a><span class=sd> - `slots` - Component slot fills. This is the same as pasing `{% fill %}` tags to the component.</span>
<a id=__codelineno-0-505 name=__codelineno-0-505></a><span class=sd> Accepts a dictionary of `{ slot_name: slot_content }` where `slot_content` can be a string</span>
<a id=__codelineno-0-506 name=__codelineno-0-506></a><span class=sd> or render function.</span>
<a id=__codelineno-0-507 name=__codelineno-0-507></a><span class=sd> - `escape_slots_content` - Whether the content from `slots` should be escaped.</span>
<a id=__codelineno-0-508 name=__codelineno-0-508></a><span class=sd> - `context` - A context (dictionary or Django&#39;s Context) within which the component</span>
<a id=__codelineno-0-509 name=__codelineno-0-509></a><span class=sd> is rendered. The keys on the context can be accessed from within the template.</span>
<a id=__codelineno-0-510 name=__codelineno-0-510></a><span class=sd> - NOTE: In &quot;isolated&quot; mode, context is NOT accessible, and data MUST be passed via</span>
<a id=__codelineno-0-511 name=__codelineno-0-511></a><span class=sd> component&#39;s args and kwargs.</span>
<a id=__codelineno-0-512 name=__codelineno-0-512></a><span class=sd> - `type` - Configure how to handle JS and CSS dependencies.</span>
<a id=__codelineno-0-513 name=__codelineno-0-513></a><span class=sd> - `&quot;document&quot;` (default) - JS dependencies are inserted into `{% component_js_dependencies %}`,</span>
<a id=__codelineno-0-514 name=__codelineno-0-514></a><span class=sd> or to the end of the `&lt;body&gt;` tag. CSS dependencies are inserted into</span>
<a id=__codelineno-0-515 name=__codelineno-0-515></a><span class=sd> `{% component_css_dependencies %}`, or the end of the `&lt;head&gt;` tag.</span>
<a id=__codelineno-0-516 name=__codelineno-0-516></a>
<a id=__codelineno-0-517 name=__codelineno-0-517></a><span class=sd> Any additional args and kwargs are passed to the `response_class`.</span>
<a id=__codelineno-0-518 name=__codelineno-0-518></a>
<a id=__codelineno-0-519 name=__codelineno-0-519></a><span class=sd> Example:</span>
<a id=__codelineno-0-520 name=__codelineno-0-520></a><span class=sd> ```py</span>
<a id=__codelineno-0-521 name=__codelineno-0-521></a><span class=sd> MyComponent.render_to_response(</span>
<a id=__codelineno-0-522 name=__codelineno-0-522></a><span class=sd> args=[1, &quot;two&quot;, {}],</span>
<a id=__codelineno-0-523 name=__codelineno-0-523></a><span class=sd> kwargs={</span>
<a id=__codelineno-0-524 name=__codelineno-0-524></a><span class=sd> &quot;key&quot;: 123,</span>
<a id=__codelineno-0-525 name=__codelineno-0-525></a><span class=sd> },</span>
<a id=__codelineno-0-526 name=__codelineno-0-526></a><span class=sd> slots={</span>
<a id=__codelineno-0-527 name=__codelineno-0-527></a><span class=sd> &quot;header&quot;: &#39;STATIC TEXT HERE&#39;,</span>
<a id=__codelineno-0-528 name=__codelineno-0-528></a><span class=sd> &quot;footer&quot;: lambda ctx, slot_kwargs, slot_ref: f&#39;CTX: {ctx[&#39;hello&#39;]} SLOT_DATA: {slot_kwargs[&#39;abc&#39;]}&#39;,</span>
<a id=__codelineno-0-529 name=__codelineno-0-529></a><span class=sd> },</span>
<a id=__codelineno-0-530 name=__codelineno-0-530></a><span class=sd> escape_slots_content=False,</span>
<a id=__codelineno-0-531 name=__codelineno-0-531></a><span class=sd> # HttpResponse input</span>
<a id=__codelineno-0-532 name=__codelineno-0-532></a><span class=sd> status=201,</span>
<a id=__codelineno-0-533 name=__codelineno-0-533></a><span class=sd> headers={...},</span>
<a id=__codelineno-0-534 name=__codelineno-0-534></a><span class=sd> )</span>
<a id=__codelineno-0-535 name=__codelineno-0-535></a><span class=sd> # HttpResponse(content=..., status=201, headers=...)</span>
<a id=__codelineno-0-536 name=__codelineno-0-536></a><span class=sd> ```</span>
<a id=__codelineno-0-537 name=__codelineno-0-537></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-538 name=__codelineno-0-538></a> <span class=n>content</span> <span class=o>=</span> <span class=bp>cls</span><span class=o>.</span><span class=n>render</span><span class=p>(</span>
<a id=__codelineno-0-539 name=__codelineno-0-539></a> <span class=n>args</span><span class=o>=</span><span class=n>args</span><span class=p>,</span>
<a id=__codelineno-0-540 name=__codelineno-0-540></a> <span class=n>kwargs</span><span class=o>=</span><span class=n>kwargs</span><span class=p>,</span>
<a id=__codelineno-0-541 name=__codelineno-0-541></a> <span class=n>context</span><span class=o>=</span><span class=n>context</span><span class=p>,</span>
<a id=__codelineno-0-542 name=__codelineno-0-542></a> <span class=n>slots</span><span class=o>=</span><span class=n>slots</span><span class=p>,</span>
<a id=__codelineno-0-543 name=__codelineno-0-543></a> <span class=n>escape_slots_content</span><span class=o>=</span><span class=n>escape_slots_content</span><span class=p>,</span>
<a id=__codelineno-0-544 name=__codelineno-0-544></a> <span class=nb>type</span><span class=o>=</span><span class=nb>type</span><span class=p>,</span>
<a id=__codelineno-0-545 name=__codelineno-0-545></a> <span class=n>render_dependencies</span><span class=o>=</span><span class=kc>True</span><span class=p>,</span>
<a id=__codelineno-0-546 name=__codelineno-0-546></a> <span class=p>)</span>
<a id=__codelineno-0-547 name=__codelineno-0-547></a> <span class=k>return</span> <span class=bp>cls</span><span class=o>.</span><span class=n>response_class</span><span class=p>(</span><span class=n>content</span><span class=p>,</span> <span class=o>*</span><span class=n>response_args</span><span class=p>,</span> <span class=o>**</span><span class=n>response_kwargs</span><span class=p>)</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> <div class="doc doc-object doc-module"> <h2 id=django_components.context class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-module"></code> <span class="doc doc-object-name doc-module-name">context</span> <a href=#django_components.context class=headerlink title="Permanent link">¤</a></h2> <div class="doc doc-contents "> <p>This file centralizes various ways we use Django's Context class pass data across components, nodes, slots, and contexts.</p> <p>You can think of the Context as our storage system.</p> <p><span class=doc-section-title>Functions:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.context.copy_forloop_context href=#django_components.context.copy_forloop_context>copy_forloop_context</a></code></b> <div class=doc-md-description> <p>Forward the info about the current loop</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.context.get_injected_context_var href=#django_components.context.get_injected_context_var>get_injected_context_var</a></code></b> <div class=doc-md-description> <p>Retrieve a 'provided' field. The field MUST have been previously 'provided'</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.context.set_provided_context_var href=#django_components.context.set_provided_context_var>set_provided_context_var</a></code></b> <div class=doc-md-description> <p>'Provide' given data under given key. In other words, this data can be retrieved</p> </div> </li> </ul> <div class="doc doc-children"> <div class="doc doc-object doc-function"> <h3 id=django_components.context.copy_forloop_context class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-function"></code> <span class="doc doc-object-name doc-function-name">copy_forloop_context</span> <a href=#django_components.context.copy_forloop_context class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>copy_forloop_context</span><span class=p>(</span><span class=n>from_context</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=django.template.Context href=https://docs.djangoproject.com/en/5.0/ref/templates/api/#django.template.Context>Context</a></span><span class=p>,</span> <span class=n>to_context</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=django.template.Context href=https://docs.djangoproject.com/en/5.0/ref/templates/api/#django.template.Context>Context</a></span><span class=p>)</span> <span class=o>-&gt;</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>Forward the info about the current loop</p> <details class=quote> <summary>Source code in <code>src/django_components/context.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-39>39</a></span>
<span class=normal><a href=#__codelineno-0-40>40</a></span>
<span class=normal><a href=#__codelineno-0-41>41</a></span>
<span class=normal><a href=#__codelineno-0-42>42</a></span>
<span class=normal><a href=#__codelineno-0-43>43</a></span>
<span class=normal><a href=#__codelineno-0-44>44</a></span>
<span class=normal><a href=#__codelineno-0-45>45</a></span>
<span class=normal><a href=#__codelineno-0-46>46</a></span>
<span class=normal><a href=#__codelineno-0-47>47</a></span>
<span class=normal><a href=#__codelineno-0-48>48</a></span>
<span class=normal><a href=#__codelineno-0-49>49</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-39 name=__codelineno-0-39></a><span class=k>def</span> <span class=nf>copy_forloop_context</span><span class=p>(</span><span class=n>from_context</span><span class=p>:</span> <span class=n>Context</span><span class=p>,</span> <span class=n>to_context</span><span class=p>:</span> <span class=n>Context</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=kc>None</span><span class=p>:</span>
<a id=__codelineno-0-40 name=__codelineno-0-40></a><span class=w> </span><span class=sd>&quot;&quot;&quot;Forward the info about the current loop&quot;&quot;&quot;</span>
<a id=__codelineno-0-41 name=__codelineno-0-41></a> <span class=c1># Note that the ForNode (which implements for loop behavior) does not</span>
<a id=__codelineno-0-42 name=__codelineno-0-42></a> <span class=c1># only add the `forloop` key, but also keys corresponding to the loop elements</span>
<a id=__codelineno-0-43 name=__codelineno-0-43></a> <span class=c1># So if the loop syntax is `{% for my_val in my_lists %}`, then ForNode also</span>
<a id=__codelineno-0-44 name=__codelineno-0-44></a> <span class=c1># sets a `my_val` key.</span>
<a id=__codelineno-0-45 name=__codelineno-0-45></a> <span class=c1># For this reason, instead of copying individual keys, we copy the whole stack layer</span>
<a id=__codelineno-0-46 name=__codelineno-0-46></a> <span class=c1># set by ForNode.</span>
<a id=__codelineno-0-47 name=__codelineno-0-47></a> <span class=k>if</span> <span class=s2>&quot;forloop&quot;</span> <span class=ow>in</span> <span class=n>from_context</span><span class=p>:</span>
<a id=__codelineno-0-48 name=__codelineno-0-48></a> <span class=n>forloop_dict_index</span> <span class=o>=</span> <span class=n>find_last_index</span><span class=p>(</span><span class=n>from_context</span><span class=o>.</span><span class=n>dicts</span><span class=p>,</span> <span class=k>lambda</span> <span class=n>d</span><span class=p>:</span> <span class=s2>&quot;forloop&quot;</span> <span class=ow>in</span> <span class=n>d</span><span class=p>)</span>
<a id=__codelineno-0-49 name=__codelineno-0-49></a> <span class=n>to_context</span><span class=o>.</span><span class=n>update</span><span class=p>(</span><span class=n>from_context</span><span class=o>.</span><span class=n>dicts</span><span class=p>[</span><span class=n>forloop_dict_index</span><span class=p>])</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h3 id=django_components.context.get_injected_context_var class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-function"></code> <span class="doc doc-object-name doc-function-name">get_injected_context_var</span> <a href=#django_components.context.get_injected_context_var class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>get_injected_context_var</span><span class=p>(</span><span class=n>component_name</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span> <span class=n>context</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=django.template.Context href=https://docs.djangoproject.com/en/5.0/ref/templates/api/#django.template.Context>Context</a></span><span class=p>,</span> <span class=n>key</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span> <span class=n>default</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Any href=https://docs.python.org/3.12/library/typing.html#typing.Any>Any</a></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-external" title=typing.Any href=https://docs.python.org/3.12/library/typing.html#typing.Any>Any</a></span>
</code></pre></div> <div class="doc doc-contents "> <p>Retrieve a 'provided' field. The field MUST have been previously 'provided' by the component's ancestors using the <code>{% provide %}</code> template tag.</p> <details class=quote> <summary>Source code in <code>src/django_components/context.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-52>52</a></span>
<span class=normal><a href=#__codelineno-0-53>53</a></span>
<span class=normal><a href=#__codelineno-0-54>54</a></span>
<span class=normal><a href=#__codelineno-0-55>55</a></span>
<span class=normal><a href=#__codelineno-0-56>56</a></span>
<span class=normal><a href=#__codelineno-0-57>57</a></span>
<span class=normal><a href=#__codelineno-0-58>58</a></span>
<span class=normal><a href=#__codelineno-0-59>59</a></span>
<span class=normal><a href=#__codelineno-0-60>60</a></span>
<span class=normal><a href=#__codelineno-0-61>61</a></span>
<span class=normal><a href=#__codelineno-0-62>62</a></span>
<span class=normal><a href=#__codelineno-0-63>63</a></span>
<span class=normal><a href=#__codelineno-0-64>64</a></span>
<span class=normal><a href=#__codelineno-0-65>65</a></span>
<span class=normal><a href=#__codelineno-0-66>66</a></span>
<span class=normal><a href=#__codelineno-0-67>67</a></span>
<span class=normal><a href=#__codelineno-0-68>68</a></span>
<span class=normal><a href=#__codelineno-0-69>69</a></span>
<span class=normal><a href=#__codelineno-0-70>70</a></span>
<span class=normal><a href=#__codelineno-0-71>71</a></span>
<span class=normal><a href=#__codelineno-0-72>72</a></span>
<span class=normal><a href=#__codelineno-0-73>73</a></span>
<span class=normal><a href=#__codelineno-0-74>74</a></span>
<span class=normal><a href=#__codelineno-0-75>75</a></span>
<span class=normal><a href=#__codelineno-0-76>76</a></span>
<span class=normal><a href=#__codelineno-0-77>77</a></span>
<span class=normal><a href=#__codelineno-0-78>78</a></span>
<span class=normal><a href=#__codelineno-0-79>79</a></span>
<span class=normal><a href=#__codelineno-0-80>80</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-52 name=__codelineno-0-52></a><span class=k>def</span> <span class=nf>get_injected_context_var</span><span class=p>(</span>
<a id=__codelineno-0-53 name=__codelineno-0-53></a> <span class=n>component_name</span><span class=p>:</span> <span class=nb>str</span><span class=p>,</span>
<a id=__codelineno-0-54 name=__codelineno-0-54></a> <span class=n>context</span><span class=p>:</span> <span class=n>Context</span><span class=p>,</span>
<a id=__codelineno-0-55 name=__codelineno-0-55></a> <span class=n>key</span><span class=p>:</span> <span class=nb>str</span><span class=p>,</span>
<a id=__codelineno-0-56 name=__codelineno-0-56></a> <span class=n>default</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>Any</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-57 name=__codelineno-0-57></a><span class=p>)</span> <span class=o>-&gt;</span> <span class=n>Any</span><span class=p>:</span>
<a id=__codelineno-0-58 name=__codelineno-0-58></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-59 name=__codelineno-0-59></a><span class=sd> Retrieve a &#39;provided&#39; field. The field MUST have been previously &#39;provided&#39;</span>
<a id=__codelineno-0-60 name=__codelineno-0-60></a><span class=sd> by the component&#39;s ancestors using the `{% provide %}` template tag.</span>
<a id=__codelineno-0-61 name=__codelineno-0-61></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-62 name=__codelineno-0-62></a> <span class=c1># NOTE: For simplicity, we keep the provided values directly on the context.</span>
<a id=__codelineno-0-63 name=__codelineno-0-63></a> <span class=c1># This plays nicely with Django&#39;s Context, which behaves like a stack, so &quot;newer&quot;</span>
<a id=__codelineno-0-64 name=__codelineno-0-64></a> <span class=c1># values overshadow the &quot;older&quot; ones.</span>
<a id=__codelineno-0-65 name=__codelineno-0-65></a> <span class=n>internal_key</span> <span class=o>=</span> <span class=n>_INJECT_CONTEXT_KEY_PREFIX</span> <span class=o>+</span> <span class=n>key</span>
<a id=__codelineno-0-66 name=__codelineno-0-66></a>
<a id=__codelineno-0-67 name=__codelineno-0-67></a> <span class=c1># Return provided value if found</span>
<a id=__codelineno-0-68 name=__codelineno-0-68></a> <span class=k>if</span> <span class=n>internal_key</span> <span class=ow>in</span> <span class=n>context</span><span class=p>:</span>
<a id=__codelineno-0-69 name=__codelineno-0-69></a> <span class=k>return</span> <span class=n>context</span><span class=p>[</span><span class=n>internal_key</span><span class=p>]</span>
<a id=__codelineno-0-70 name=__codelineno-0-70></a>
<a id=__codelineno-0-71 name=__codelineno-0-71></a> <span class=c1># If a default was given, return that</span>
<a id=__codelineno-0-72 name=__codelineno-0-72></a> <span class=k>if</span> <span class=n>default</span> <span class=ow>is</span> <span class=ow>not</span> <span class=kc>None</span><span class=p>:</span>
<a id=__codelineno-0-73 name=__codelineno-0-73></a> <span class=k>return</span> <span class=n>default</span>
<a id=__codelineno-0-74 name=__codelineno-0-74></a>
<a id=__codelineno-0-75 name=__codelineno-0-75></a> <span class=c1># Otherwise raise error</span>
<a id=__codelineno-0-76 name=__codelineno-0-76></a> <span class=k>raise</span> <span class=ne>KeyError</span><span class=p>(</span>
<a id=__codelineno-0-77 name=__codelineno-0-77></a> <span class=sa>f</span><span class=s2>&quot;Component &#39;</span><span class=si>{</span><span class=n>component_name</span><span class=si>}</span><span class=s2>&#39; tried to inject a variable &#39;</span><span class=si>{</span><span class=n>key</span><span class=si>}</span><span class=s2>&#39; before it was provided.&quot;</span>
<a id=__codelineno-0-78 name=__codelineno-0-78></a> <span class=sa>f</span><span class=s2>&quot; To fix this, make sure that at least one ancestor of component &#39;</span><span class=si>{</span><span class=n>component_name</span><span class=si>}</span><span class=s2>&#39; has&quot;</span>
<a id=__codelineno-0-79 name=__codelineno-0-79></a> <span class=sa>f</span><span class=s2>&quot; the variable &#39;</span><span class=si>{</span><span class=n>key</span><span class=si>}</span><span class=s2>&#39; in their &#39;provide&#39; attribute.&quot;</span>
<a id=__codelineno-0-80 name=__codelineno-0-80></a> <span class=p>)</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h3 id=django_components.context.set_provided_context_var class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-function"></code> <span class="doc doc-object-name doc-function-name">set_provided_context_var</span> <a href=#django_components.context.set_provided_context_var class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>set_provided_context_var</span><span class=p>(</span><span class=n>context</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=django.template.Context href=https://docs.djangoproject.com/en/5.0/ref/templates/api/#django.template.Context>Context</a></span><span class=p>,</span> <span class=n>key</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span> <span class=n>provided_kwargs</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Dict href=https://docs.python.org/3.12/library/typing.html#typing.Dict>Dict</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span> <span class=n><a class="autorefs autorefs-external" title=typing.Any href=https://docs.python.org/3.12/library/typing.html#typing.Any>Any</a></span><span class=p>])</span> <span class=o>-&gt;</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>'Provide' given data under given key. In other words, this data can be retrieved using <code>self.inject(key)</code> inside of <code>get_context_data()</code> method of components that are nested inside the <code>{% provide %}</code> tag.</p> <details class=quote> <summary>Source code in <code>src/django_components/context.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-83> 83</a></span>
<span class=normal><a href=#__codelineno-0-84> 84</a></span>
<span class=normal><a href=#__codelineno-0-85> 85</a></span>
<span class=normal><a href=#__codelineno-0-86> 86</a></span>
<span class=normal><a href=#__codelineno-0-87> 87</a></span>
<span class=normal><a href=#__codelineno-0-88> 88</a></span>
<span class=normal><a href=#__codelineno-0-89> 89</a></span>
<span class=normal><a href=#__codelineno-0-90> 90</a></span>
<span class=normal><a href=#__codelineno-0-91> 91</a></span>
<span class=normal><a href=#__codelineno-0-92> 92</a></span>
<span class=normal><a href=#__codelineno-0-93> 93</a></span>
<span class=normal><a href=#__codelineno-0-94> 94</a></span>
<span class=normal><a href=#__codelineno-0-95> 95</a></span>
<span class=normal><a href=#__codelineno-0-96> 96</a></span>
<span class=normal><a href=#__codelineno-0-97> 97</a></span>
<span class=normal><a href=#__codelineno-0-98> 98</a></span>
<span class=normal><a href=#__codelineno-0-99> 99</a></span>
<span class=normal><a href=#__codelineno-0-100>100</a></span>
<span class=normal><a href=#__codelineno-0-101>101</a></span>
<span class=normal><a href=#__codelineno-0-102>102</a></span>
<span class=normal><a href=#__codelineno-0-103>103</a></span>
<span class=normal><a href=#__codelineno-0-104>104</a></span>
<span class=normal><a href=#__codelineno-0-105>105</a></span>
<span class=normal><a href=#__codelineno-0-106>106</a></span>
<span class=normal><a href=#__codelineno-0-107>107</a></span>
<span class=normal><a href=#__codelineno-0-108>108</a></span>
<span class=normal><a href=#__codelineno-0-109>109</a></span>
<span class=normal><a href=#__codelineno-0-110>110</a></span>
<span class=normal><a href=#__codelineno-0-111>111</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-83 name=__codelineno-0-83></a><span class=k>def</span> <span class=nf>set_provided_context_var</span><span class=p>(</span>
<a id=__codelineno-0-84 name=__codelineno-0-84></a> <span class=n>context</span><span class=p>:</span> <span class=n>Context</span><span class=p>,</span>
<a id=__codelineno-0-85 name=__codelineno-0-85></a> <span class=n>key</span><span class=p>:</span> <span class=nb>str</span><span class=p>,</span>
<a id=__codelineno-0-86 name=__codelineno-0-86></a> <span class=n>provided_kwargs</span><span class=p>:</span> <span class=n>Dict</span><span class=p>[</span><span class=nb>str</span><span class=p>,</span> <span class=n>Any</span><span class=p>],</span>
<a id=__codelineno-0-87 name=__codelineno-0-87></a><span class=p>)</span> <span class=o>-&gt;</span> <span class=kc>None</span><span class=p>:</span>
<a id=__codelineno-0-88 name=__codelineno-0-88></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-89 name=__codelineno-0-89></a><span class=sd> &#39;Provide&#39; given data under given key. In other words, this data can be retrieved</span>
<a id=__codelineno-0-90 name=__codelineno-0-90></a><span class=sd> using `self.inject(key)` inside of `get_context_data()` method of components that</span>
<a id=__codelineno-0-91 name=__codelineno-0-91></a><span class=sd> are nested inside the `{% provide %}` tag.</span>
<a id=__codelineno-0-92 name=__codelineno-0-92></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-93 name=__codelineno-0-93></a> <span class=c1># NOTE: We raise TemplateSyntaxError since this func should be called only from</span>
<a id=__codelineno-0-94 name=__codelineno-0-94></a> <span class=c1># within template.</span>
<a id=__codelineno-0-95 name=__codelineno-0-95></a> <span class=k>if</span> <span class=ow>not</span> <span class=n>key</span><span class=p>:</span>
<a id=__codelineno-0-96 name=__codelineno-0-96></a> <span class=k>raise</span> <span class=n>TemplateSyntaxError</span><span class=p>(</span>
<a id=__codelineno-0-97 name=__codelineno-0-97></a> <span class=s2>&quot;Provide tag received an empty string. Key must be non-empty and a valid identifier.&quot;</span>
<a id=__codelineno-0-98 name=__codelineno-0-98></a> <span class=p>)</span>
<a id=__codelineno-0-99 name=__codelineno-0-99></a> <span class=k>if</span> <span class=ow>not</span> <span class=n>key</span><span class=o>.</span><span class=n>isidentifier</span><span class=p>():</span>
<a id=__codelineno-0-100 name=__codelineno-0-100></a> <span class=k>raise</span> <span class=n>TemplateSyntaxError</span><span class=p>(</span>
<a id=__codelineno-0-101 name=__codelineno-0-101></a> <span class=s2>&quot;Provide tag received a non-identifier string. Key must be non-empty and a valid identifier.&quot;</span>
<a id=__codelineno-0-102 name=__codelineno-0-102></a> <span class=p>)</span>
<a id=__codelineno-0-103 name=__codelineno-0-103></a>
<a id=__codelineno-0-104 name=__codelineno-0-104></a> <span class=c1># We turn the kwargs into a NamedTuple so that the object that&#39;s &quot;provided&quot;</span>
<a id=__codelineno-0-105 name=__codelineno-0-105></a> <span class=c1># is immutable. This ensures that the data returned from `inject` will always</span>
<a id=__codelineno-0-106 name=__codelineno-0-106></a> <span class=c1># have all the keys that were passed to the `provide` tag.</span>
<a id=__codelineno-0-107 name=__codelineno-0-107></a> <span class=n>tpl_cls</span> <span class=o>=</span> <span class=n>namedtuple</span><span class=p>(</span><span class=s2>&quot;DepInject&quot;</span><span class=p>,</span> <span class=n>provided_kwargs</span><span class=o>.</span><span class=n>keys</span><span class=p>())</span> <span class=c1># type: ignore[misc]</span>
<a id=__codelineno-0-108 name=__codelineno-0-108></a> <span class=n>payload</span> <span class=o>=</span> <span class=n>tpl_cls</span><span class=p>(</span><span class=o>**</span><span class=n>provided_kwargs</span><span class=p>)</span>
<a id=__codelineno-0-109 name=__codelineno-0-109></a>
<a id=__codelineno-0-110 name=__codelineno-0-110></a> <span class=n>internal_key</span> <span class=o>=</span> <span class=n>_INJECT_CONTEXT_KEY_PREFIX</span> <span class=o>+</span> <span class=n>key</span>
<a id=__codelineno-0-111 name=__codelineno-0-111></a> <span class=n>context</span><span class=p>[</span><span class=n>internal_key</span><span class=p>]</span> <span class=o>=</span> <span class=n>payload</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> </div> </div> </div> <div class="doc doc-object doc-module"> <h2 id=django_components.dependencies class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-module"></code> <span class="doc doc-object-name doc-module-name">dependencies</span> <a href=#django_components.dependencies class=headerlink title="Permanent link">¤</a></h2> <div class="doc doc-contents "> <p>All code related to management of component dependencies (JS and CSS scripts)</p> <p><span class=doc-section-title>Modules:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.dependencies.types href=#django_components.types>types</a></code></b> <div class=doc-md-description> <p>Helper types for IDEs.</p> </div> </li> </ul> <p><span class=doc-section-title>Classes:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.dependencies.ComponentDependencyMiddleware href=#django_components.dependencies.ComponentDependencyMiddleware>ComponentDependencyMiddleware</a></code></b> <div class=doc-md-description> <p>Middleware that inserts CSS/JS dependencies for all rendered</p> </div> </li> </ul> <p><span class=doc-section-title>Functions:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.dependencies.render_dependencies href=#django_components.dependencies.render_dependencies>render_dependencies</a></code></b> <div class=doc-md-description> <p>Given a string that contains parts that were rendered by components,</p> </div> </li> </ul> <div class="doc doc-children"> <div class="doc doc-object doc-class"> <h3 id=django_components.dependencies.ComponentDependencyMiddleware class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-class"></code> <span class="doc doc-object-name doc-class-name">ComponentDependencyMiddleware</span> <a href=#django_components.dependencies.ComponentDependencyMiddleware class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>ComponentDependencyMiddleware</span><span class=p>(</span><span class=n>get_response</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Callable href=https://docs.python.org/3.12/library/typing.html#typing.Callable>Callable</a></span><span class=p>[[</span><span class=n><a class="autorefs autorefs-external" title=django.http.HttpRequest href=https://docs.djangoproject.com/en/5.0/ref/request-response/#django.http.HttpRequest>HttpRequest</a></span><span class=p>],</span> <span class=n><a class="autorefs autorefs-external" title=django.http.HttpResponse href=https://docs.djangoproject.com/en/5.0/ref/request-response/#django.http.HttpResponse>HttpResponse</a></span><span class=p>])</span>
</code></pre></div> <div class="doc doc-contents "> <p>Middleware that inserts CSS/JS dependencies for all rendered components at points marked with template tags.</p> <details class=quote> <summary>Source code in <code>src/django_components/dependencies.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-766>766</a></span>
<span class=normal><a href=#__codelineno-0-767>767</a></span>
<span class=normal><a href=#__codelineno-0-768>768</a></span>
<span class=normal><a href=#__codelineno-0-769>769</a></span>
<span class=normal><a href=#__codelineno-0-770>770</a></span>
<span class=normal><a href=#__codelineno-0-771>771</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-766 name=__codelineno-0-766></a><span class=k>def</span> <span class=fm>__init__</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>get_response</span><span class=p>:</span> <span class=s2>&quot;Callable[[HttpRequest], HttpResponse]&quot;</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=kc>None</span><span class=p>:</span>
<a id=__codelineno-0-767 name=__codelineno-0-767></a> <span class=bp>self</span><span class=o>.</span><span class=n>get_response</span> <span class=o>=</span> <span class=n>get_response</span>
<a id=__codelineno-0-768 name=__codelineno-0-768></a>
<a id=__codelineno-0-769 name=__codelineno-0-769></a> <span class=c1># NOTE: Required to work with async</span>
<a id=__codelineno-0-770 name=__codelineno-0-770></a> <span class=k>if</span> <span class=n>iscoroutinefunction</span><span class=p>(</span><span class=bp>self</span><span class=o>.</span><span class=n>get_response</span><span class=p>):</span>
<a id=__codelineno-0-771 name=__codelineno-0-771></a> <span class=n>markcoroutinefunction</span><span class=p>(</span><span class=bp>self</span><span class=p>)</span>
</code></pre></div></td></tr></table></div> </details> <div class="doc doc-children"> </div> </div> </div> <div class="doc doc-object doc-function"> <h3 id=django_components.dependencies.render_dependencies class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-function"></code> <span class="doc doc-object-name doc-function-name">render_dependencies</span> <a href=#django_components.dependencies.render_dependencies class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>render_dependencies</span><span class=p>(</span><span class=n>content</span><span class=p>:</span> <span class=n><span title=django_components.dependencies.TContent>TContent</span></span><span class=p>,</span> <span class=nb>type</span><span class=p>:</span> <span class=n><span title=django_components.dependencies.RenderType>RenderType</span></span> <span class=o>=</span> <span class=s1>&#39;document&#39;</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><span title=django_components.dependencies.TContent>TContent</span></span>
</code></pre></div> <div class="doc doc-contents "> <p>Given a string that contains parts that were rendered by components, this function inserts all used JS and CSS.</p> <p>By default, the string is parsed as an HTML and: - CSS is inserted at the end of <code>&lt;head&gt;</code> (if present) - JS is inserted at the end of <code>&lt;body&gt;</code> (if present)</p> <p>If you used <code>{% component_js_dependencies %}</code> or <code>{% component_css_dependencies %}</code>, then the JS and CSS will be inserted only at these locations.</p> <p>Example: <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=k>def</span> <span class=nf>my_view</span><span class=p>(</span><span class=n>request</span><span class=p>):</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a> <span class=n>template</span> <span class=o>=</span> <span class=n>Template</span><span class=p>(</span><span class=s1>&#39;&#39;&#39;</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=s1> {</span><span class=si>% lo</span><span class=s1>ad components %}</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a><span class=s1> &lt;!doctype html&gt;</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a><span class=s1> &lt;html&gt;</span>
<a id=__codelineno-0-6 name=__codelineno-0-6 href=#__codelineno-0-6></a><span class=s1> &lt;head&gt;&lt;/head&gt;</span>
<a id=__codelineno-0-7 name=__codelineno-0-7 href=#__codelineno-0-7></a><span class=s1> &lt;body&gt;</span>
<a id=__codelineno-0-8 name=__codelineno-0-8 href=#__codelineno-0-8></a><span class=s1> &lt;h1&gt;{{ table_name }}&lt;/h1&gt;</span>
<a id=__codelineno-0-9 name=__codelineno-0-9 href=#__codelineno-0-9></a><span class=s1> {</span><span class=si>% c</span><span class=s1>omponent &quot;table&quot; name=table_name / %}</span>
<a id=__codelineno-0-10 name=__codelineno-0-10 href=#__codelineno-0-10></a><span class=s1> &lt;/body&gt;</span>
<a id=__codelineno-0-11 name=__codelineno-0-11 href=#__codelineno-0-11></a><span class=s1> &lt;/html&gt;</span>
<a id=__codelineno-0-12 name=__codelineno-0-12 href=#__codelineno-0-12></a><span class=s1> &#39;&#39;&#39;</span><span class=p>)</span>
<a id=__codelineno-0-13 name=__codelineno-0-13 href=#__codelineno-0-13></a>
<a id=__codelineno-0-14 name=__codelineno-0-14 href=#__codelineno-0-14></a> <span class=n>html</span> <span class=o>=</span> <span class=n>template</span><span class=o>.</span><span class=n>render</span><span class=p>(</span>
<a id=__codelineno-0-15 name=__codelineno-0-15 href=#__codelineno-0-15></a> <span class=n>Context</span><span class=p>({</span>
<a id=__codelineno-0-16 name=__codelineno-0-16 href=#__codelineno-0-16></a> <span class=s2>&quot;table_name&quot;</span><span class=p>:</span> <span class=n>request</span><span class=o>.</span><span class=n>GET</span><span class=p>[</span><span class=s2>&quot;name&quot;</span><span class=p>],</span>
<a id=__codelineno-0-17 name=__codelineno-0-17 href=#__codelineno-0-17></a> <span class=p>})</span>
<a id=__codelineno-0-18 name=__codelineno-0-18 href=#__codelineno-0-18></a> <span class=p>)</span>
<a id=__codelineno-0-19 name=__codelineno-0-19 href=#__codelineno-0-19></a>
<a id=__codelineno-0-20 name=__codelineno-0-20 href=#__codelineno-0-20></a> <span class=c1># This inserts components&#39; JS and CSS</span>
<a id=__codelineno-0-21 name=__codelineno-0-21 href=#__codelineno-0-21></a> <span class=n>processed_html</span> <span class=o>=</span> <span class=n>render_dependencies</span><span class=p>(</span><span class=n>html</span><span class=p>)</span>
<a id=__codelineno-0-22 name=__codelineno-0-22 href=#__codelineno-0-22></a>
<a id=__codelineno-0-23 name=__codelineno-0-23 href=#__codelineno-0-23></a> <span class=k>return</span> <span class=n>HttpResponse</span><span class=p>(</span><span class=n>processed_html</span><span class=p>)</span>
</code></pre></div></p> <details class=quote> <summary>Source code in <code>src/django_components/dependencies.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-289>289</a></span>
<span class=normal><a href=#__codelineno-0-290>290</a></span>
<span class=normal><a href=#__codelineno-0-291>291</a></span>
<span class=normal><a href=#__codelineno-0-292>292</a></span>
<span class=normal><a href=#__codelineno-0-293>293</a></span>
<span class=normal><a href=#__codelineno-0-294>294</a></span>
<span class=normal><a href=#__codelineno-0-295>295</a></span>
<span class=normal><a href=#__codelineno-0-296>296</a></span>
<span class=normal><a href=#__codelineno-0-297>297</a></span>
<span class=normal><a href=#__codelineno-0-298>298</a></span>
<span class=normal><a href=#__codelineno-0-299>299</a></span>
<span class=normal><a href=#__codelineno-0-300>300</a></span>
<span class=normal><a href=#__codelineno-0-301>301</a></span>
<span class=normal><a href=#__codelineno-0-302>302</a></span>
<span class=normal><a href=#__codelineno-0-303>303</a></span>
<span class=normal><a href=#__codelineno-0-304>304</a></span>
<span class=normal><a href=#__codelineno-0-305>305</a></span>
<span class=normal><a href=#__codelineno-0-306>306</a></span>
<span class=normal><a href=#__codelineno-0-307>307</a></span>
<span class=normal><a href=#__codelineno-0-308>308</a></span>
<span class=normal><a href=#__codelineno-0-309>309</a></span>
<span class=normal><a href=#__codelineno-0-310>310</a></span>
<span class=normal><a href=#__codelineno-0-311>311</a></span>
<span class=normal><a href=#__codelineno-0-312>312</a></span>
<span class=normal><a href=#__codelineno-0-313>313</a></span>
<span class=normal><a href=#__codelineno-0-314>314</a></span>
<span class=normal><a href=#__codelineno-0-315>315</a></span>
<span class=normal><a href=#__codelineno-0-316>316</a></span>
<span class=normal><a href=#__codelineno-0-317>317</a></span>
<span class=normal><a href=#__codelineno-0-318>318</a></span>
<span class=normal><a href=#__codelineno-0-319>319</a></span>
<span class=normal><a href=#__codelineno-0-320>320</a></span>
<span class=normal><a href=#__codelineno-0-321>321</a></span>
<span class=normal><a href=#__codelineno-0-322>322</a></span>
<span class=normal><a href=#__codelineno-0-323>323</a></span>
<span class=normal><a href=#__codelineno-0-324>324</a></span>
<span class=normal><a href=#__codelineno-0-325>325</a></span>
<span class=normal><a href=#__codelineno-0-326>326</a></span>
<span class=normal><a href=#__codelineno-0-327>327</a></span>
<span class=normal><a href=#__codelineno-0-328>328</a></span>
<span class=normal><a href=#__codelineno-0-329>329</a></span>
<span class=normal><a href=#__codelineno-0-330>330</a></span>
<span class=normal><a href=#__codelineno-0-331>331</a></span>
<span class=normal><a href=#__codelineno-0-332>332</a></span>
<span class=normal><a href=#__codelineno-0-333>333</a></span>
<span class=normal><a href=#__codelineno-0-334>334</a></span>
<span class=normal><a href=#__codelineno-0-335>335</a></span>
<span class=normal><a href=#__codelineno-0-336>336</a></span>
<span class=normal><a href=#__codelineno-0-337>337</a></span>
<span class=normal><a href=#__codelineno-0-338>338</a></span>
<span class=normal><a href=#__codelineno-0-339>339</a></span>
<span class=normal><a href=#__codelineno-0-340>340</a></span>
<span class=normal><a href=#__codelineno-0-341>341</a></span>
<span class=normal><a href=#__codelineno-0-342>342</a></span>
<span class=normal><a href=#__codelineno-0-343>343</a></span>
<span class=normal><a href=#__codelineno-0-344>344</a></span>
<span class=normal><a href=#__codelineno-0-345>345</a></span>
<span class=normal><a href=#__codelineno-0-346>346</a></span>
<span class=normal><a href=#__codelineno-0-347>347</a></span>
<span class=normal><a href=#__codelineno-0-348>348</a></span>
<span class=normal><a href=#__codelineno-0-349>349</a></span>
<span class=normal><a href=#__codelineno-0-350>350</a></span>
<span class=normal><a href=#__codelineno-0-351>351</a></span>
<span class=normal><a href=#__codelineno-0-352>352</a></span>
<span class=normal><a href=#__codelineno-0-353>353</a></span>
<span class=normal><a href=#__codelineno-0-354>354</a></span>
<span class=normal><a href=#__codelineno-0-355>355</a></span>
<span class=normal><a href=#__codelineno-0-356>356</a></span>
<span class=normal><a href=#__codelineno-0-357>357</a></span>
<span class=normal><a href=#__codelineno-0-358>358</a></span>
<span class=normal><a href=#__codelineno-0-359>359</a></span>
<span class=normal><a href=#__codelineno-0-360>360</a></span>
<span class=normal><a href=#__codelineno-0-361>361</a></span>
<span class=normal><a href=#__codelineno-0-362>362</a></span>
<span class=normal><a href=#__codelineno-0-363>363</a></span>
<span class=normal><a href=#__codelineno-0-364>364</a></span>
<span class=normal><a href=#__codelineno-0-365>365</a></span>
<span class=normal><a href=#__codelineno-0-366>366</a></span>
<span class=normal><a href=#__codelineno-0-367>367</a></span>
<span class=normal><a href=#__codelineno-0-368>368</a></span>
<span class=normal><a href=#__codelineno-0-369>369</a></span>
<span class=normal><a href=#__codelineno-0-370>370</a></span>
<span class=normal><a href=#__codelineno-0-371>371</a></span>
<span class=normal><a href=#__codelineno-0-372>372</a></span>
<span class=normal><a href=#__codelineno-0-373>373</a></span>
<span class=normal><a href=#__codelineno-0-374>374</a></span>
<span class=normal><a href=#__codelineno-0-375>375</a></span>
<span class=normal><a href=#__codelineno-0-376>376</a></span>
<span class=normal><a href=#__codelineno-0-377>377</a></span>
<span class=normal><a href=#__codelineno-0-378>378</a></span>
<span class=normal><a href=#__codelineno-0-379>379</a></span>
<span class=normal><a href=#__codelineno-0-380>380</a></span>
<span class=normal><a href=#__codelineno-0-381>381</a></span>
<span class=normal><a href=#__codelineno-0-382>382</a></span>
<span class=normal><a href=#__codelineno-0-383>383</a></span>
<span class=normal><a href=#__codelineno-0-384>384</a></span>
<span class=normal><a href=#__codelineno-0-385>385</a></span>
<span class=normal><a href=#__codelineno-0-386>386</a></span>
<span class=normal><a href=#__codelineno-0-387>387</a></span>
<span class=normal><a href=#__codelineno-0-388>388</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-289 name=__codelineno-0-289></a><span class=k>def</span> <span class=nf>render_dependencies</span><span class=p>(</span><span class=n>content</span><span class=p>:</span> <span class=n>TContent</span><span class=p>,</span> <span class=nb>type</span><span class=p>:</span> <span class=n>RenderType</span> <span class=o>=</span> <span class=s2>&quot;document&quot;</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n>TContent</span><span class=p>:</span>
<a id=__codelineno-0-290 name=__codelineno-0-290></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-291 name=__codelineno-0-291></a><span class=sd> Given a string that contains parts that were rendered by components,</span>
<a id=__codelineno-0-292 name=__codelineno-0-292></a><span class=sd> this function inserts all used JS and CSS.</span>
<a id=__codelineno-0-293 name=__codelineno-0-293></a>
<a id=__codelineno-0-294 name=__codelineno-0-294></a><span class=sd> By default, the string is parsed as an HTML and:</span>
<a id=__codelineno-0-295 name=__codelineno-0-295></a><span class=sd> - CSS is inserted at the end of `&lt;head&gt;` (if present)</span>
<a id=__codelineno-0-296 name=__codelineno-0-296></a><span class=sd> - JS is inserted at the end of `&lt;body&gt;` (if present)</span>
<a id=__codelineno-0-297 name=__codelineno-0-297></a>
<a id=__codelineno-0-298 name=__codelineno-0-298></a><span class=sd> If you used `{% component_js_dependencies %}` or `{% component_css_dependencies %}`,</span>
<a id=__codelineno-0-299 name=__codelineno-0-299></a><span class=sd> then the JS and CSS will be inserted only at these locations.</span>
<a id=__codelineno-0-300 name=__codelineno-0-300></a>
<a id=__codelineno-0-301 name=__codelineno-0-301></a><span class=sd> Example:</span>
<a id=__codelineno-0-302 name=__codelineno-0-302></a><span class=sd> ```python</span>
<a id=__codelineno-0-303 name=__codelineno-0-303></a><span class=sd> def my_view(request):</span>
<a id=__codelineno-0-304 name=__codelineno-0-304></a><span class=sd> template = Template(&#39;&#39;&#39;</span>
<a id=__codelineno-0-305 name=__codelineno-0-305></a><span class=sd> {% load components %}</span>
<a id=__codelineno-0-306 name=__codelineno-0-306></a><span class=sd> &lt;!doctype html&gt;</span>
<a id=__codelineno-0-307 name=__codelineno-0-307></a><span class=sd> &lt;html&gt;</span>
<a id=__codelineno-0-308 name=__codelineno-0-308></a><span class=sd> &lt;head&gt;&lt;/head&gt;</span>
<a id=__codelineno-0-309 name=__codelineno-0-309></a><span class=sd> &lt;body&gt;</span>
<a id=__codelineno-0-310 name=__codelineno-0-310></a><span class=sd> &lt;h1&gt;{{ table_name }}&lt;/h1&gt;</span>
<a id=__codelineno-0-311 name=__codelineno-0-311></a><span class=sd> {% component &quot;table&quot; name=table_name / %}</span>
<a id=__codelineno-0-312 name=__codelineno-0-312></a><span class=sd> &lt;/body&gt;</span>
<a id=__codelineno-0-313 name=__codelineno-0-313></a><span class=sd> &lt;/html&gt;</span>
<a id=__codelineno-0-314 name=__codelineno-0-314></a><span class=sd> &#39;&#39;&#39;)</span>
<a id=__codelineno-0-315 name=__codelineno-0-315></a>
<a id=__codelineno-0-316 name=__codelineno-0-316></a><span class=sd> html = template.render(</span>
<a id=__codelineno-0-317 name=__codelineno-0-317></a><span class=sd> Context({</span>
<a id=__codelineno-0-318 name=__codelineno-0-318></a><span class=sd> &quot;table_name&quot;: request.GET[&quot;name&quot;],</span>
<a id=__codelineno-0-319 name=__codelineno-0-319></a><span class=sd> })</span>
<a id=__codelineno-0-320 name=__codelineno-0-320></a><span class=sd> )</span>
<a id=__codelineno-0-321 name=__codelineno-0-321></a>
<a id=__codelineno-0-322 name=__codelineno-0-322></a><span class=sd> # This inserts components&#39; JS and CSS</span>
<a id=__codelineno-0-323 name=__codelineno-0-323></a><span class=sd> processed_html = render_dependencies(html)</span>
<a id=__codelineno-0-324 name=__codelineno-0-324></a>
<a id=__codelineno-0-325 name=__codelineno-0-325></a><span class=sd> return HttpResponse(processed_html)</span>
<a id=__codelineno-0-326 name=__codelineno-0-326></a><span class=sd> ```</span>
<a id=__codelineno-0-327 name=__codelineno-0-327></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-328 name=__codelineno-0-328></a> <span class=n>is_safestring</span> <span class=o>=</span> <span class=nb>isinstance</span><span class=p>(</span><span class=n>content</span><span class=p>,</span> <span class=n>SafeString</span><span class=p>)</span>
<a id=__codelineno-0-329 name=__codelineno-0-329></a>
<a id=__codelineno-0-330 name=__codelineno-0-330></a> <span class=k>if</span> <span class=nb>isinstance</span><span class=p>(</span><span class=n>content</span><span class=p>,</span> <span class=nb>str</span><span class=p>):</span>
<a id=__codelineno-0-331 name=__codelineno-0-331></a> <span class=n>content_</span> <span class=o>=</span> <span class=n>content</span><span class=o>.</span><span class=n>encode</span><span class=p>()</span>
<a id=__codelineno-0-332 name=__codelineno-0-332></a> <span class=k>else</span><span class=p>:</span>
<a id=__codelineno-0-333 name=__codelineno-0-333></a> <span class=n>content_</span> <span class=o>=</span> <span class=n>cast</span><span class=p>(</span><span class=nb>bytes</span><span class=p>,</span> <span class=n>content</span><span class=p>)</span>
<a id=__codelineno-0-334 name=__codelineno-0-334></a>
<a id=__codelineno-0-335 name=__codelineno-0-335></a> <span class=n>content_</span><span class=p>,</span> <span class=n>js_dependencies</span><span class=p>,</span> <span class=n>css_dependencies</span> <span class=o>=</span> <span class=n>_process_dep_declarations</span><span class=p>(</span><span class=n>content_</span><span class=p>,</span> <span class=nb>type</span><span class=p>)</span>
<a id=__codelineno-0-336 name=__codelineno-0-336></a>
<a id=__codelineno-0-337 name=__codelineno-0-337></a> <span class=c1># Replace the placeholders with the actual content</span>
<a id=__codelineno-0-338 name=__codelineno-0-338></a> <span class=n>did_find_js_placeholder</span> <span class=o>=</span> <span class=kc>False</span>
<a id=__codelineno-0-339 name=__codelineno-0-339></a> <span class=n>did_find_css_placeholder</span> <span class=o>=</span> <span class=kc>False</span>
<a id=__codelineno-0-340 name=__codelineno-0-340></a>
<a id=__codelineno-0-341 name=__codelineno-0-341></a> <span class=k>def</span> <span class=nf>on_replace_match</span><span class=p>(</span><span class=n>match</span><span class=p>:</span> <span class=s2>&quot;re.Match[bytes]&quot;</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=nb>bytes</span><span class=p>:</span>
<a id=__codelineno-0-342 name=__codelineno-0-342></a> <span class=k>nonlocal</span> <span class=n>did_find_css_placeholder</span>
<a id=__codelineno-0-343 name=__codelineno-0-343></a> <span class=k>nonlocal</span> <span class=n>did_find_js_placeholder</span>
<a id=__codelineno-0-344 name=__codelineno-0-344></a>
<a id=__codelineno-0-345 name=__codelineno-0-345></a> <span class=k>if</span> <span class=n>match</span><span class=p>[</span><span class=mi>0</span><span class=p>]</span> <span class=o>==</span> <span class=n>CSS_PLACEHOLDER_BYTES</span><span class=p>:</span>
<a id=__codelineno-0-346 name=__codelineno-0-346></a> <span class=n>replacement</span> <span class=o>=</span> <span class=n>css_dependencies</span>
<a id=__codelineno-0-347 name=__codelineno-0-347></a> <span class=n>did_find_css_placeholder</span> <span class=o>=</span> <span class=kc>True</span>
<a id=__codelineno-0-348 name=__codelineno-0-348></a> <span class=k>elif</span> <span class=n>match</span><span class=p>[</span><span class=mi>0</span><span class=p>]</span> <span class=o>==</span> <span class=n>JS_PLACEHOLDER_BYTES</span><span class=p>:</span>
<a id=__codelineno-0-349 name=__codelineno-0-349></a> <span class=n>replacement</span> <span class=o>=</span> <span class=n>js_dependencies</span>
<a id=__codelineno-0-350 name=__codelineno-0-350></a> <span class=n>did_find_js_placeholder</span> <span class=o>=</span> <span class=kc>True</span>
<a id=__codelineno-0-351 name=__codelineno-0-351></a> <span class=k>else</span><span class=p>:</span>
<a id=__codelineno-0-352 name=__codelineno-0-352></a> <span class=k>raise</span> <span class=ne>RuntimeError</span><span class=p>(</span>
<a id=__codelineno-0-353 name=__codelineno-0-353></a> <span class=s2>&quot;Unexpected error: Regex for component dependencies processing&quot;</span>
<a id=__codelineno-0-354 name=__codelineno-0-354></a> <span class=sa>f</span><span class=s2>&quot; matched unknown string &#39;</span><span class=si>{</span><span class=n>match</span><span class=p>[</span><span class=mi>0</span><span class=p>]</span><span class=o>.</span><span class=n>decode</span><span class=p>()</span><span class=si>}</span><span class=s2>&#39;&quot;</span>
<a id=__codelineno-0-355 name=__codelineno-0-355></a> <span class=p>)</span>
<a id=__codelineno-0-356 name=__codelineno-0-356></a> <span class=k>return</span> <span class=n>replacement</span>
<a id=__codelineno-0-357 name=__codelineno-0-357></a>
<a id=__codelineno-0-358 name=__codelineno-0-358></a> <span class=n>content_</span> <span class=o>=</span> <span class=n>PLACEHOLDER_REGEX</span><span class=o>.</span><span class=n>sub</span><span class=p>(</span><span class=n>on_replace_match</span><span class=p>,</span> <span class=n>content_</span><span class=p>)</span>
<a id=__codelineno-0-359 name=__codelineno-0-359></a>
<a id=__codelineno-0-360 name=__codelineno-0-360></a> <span class=c1># By default, if user didn&#39;t specify any `{% component_dependencies %}`,</span>
<a id=__codelineno-0-361 name=__codelineno-0-361></a> <span class=c1># then try to insert the JS scripts at the end of &lt;body&gt; and CSS sheets at the end</span>
<a id=__codelineno-0-362 name=__codelineno-0-362></a> <span class=c1># of &lt;head&gt;</span>
<a id=__codelineno-0-363 name=__codelineno-0-363></a> <span class=k>if</span> <span class=nb>type</span> <span class=o>==</span> <span class=s2>&quot;document&quot;</span> <span class=ow>and</span> <span class=p>(</span><span class=ow>not</span> <span class=n>did_find_js_placeholder</span> <span class=ow>or</span> <span class=ow>not</span> <span class=n>did_find_css_placeholder</span><span class=p>):</span>
<a id=__codelineno-0-364 name=__codelineno-0-364></a> <span class=n>tree</span> <span class=o>=</span> <span class=n>parse_document_or_nodes</span><span class=p>(</span><span class=n>content_</span><span class=o>.</span><span class=n>decode</span><span class=p>())</span>
<a id=__codelineno-0-365 name=__codelineno-0-365></a>
<a id=__codelineno-0-366 name=__codelineno-0-366></a> <span class=k>if</span> <span class=nb>isinstance</span><span class=p>(</span><span class=n>tree</span><span class=p>,</span> <span class=n>LexborHTMLParser</span><span class=p>):</span>
<a id=__codelineno-0-367 name=__codelineno-0-367></a> <span class=n>did_modify_html</span> <span class=o>=</span> <span class=kc>False</span>
<a id=__codelineno-0-368 name=__codelineno-0-368></a>
<a id=__codelineno-0-369 name=__codelineno-0-369></a> <span class=k>if</span> <span class=ow>not</span> <span class=n>did_find_css_placeholder</span> <span class=ow>and</span> <span class=n>tree</span><span class=o>.</span><span class=n>head</span><span class=p>:</span>
<a id=__codelineno-0-370 name=__codelineno-0-370></a> <span class=n>css_elems</span> <span class=o>=</span> <span class=n>parse_multiroot_html</span><span class=p>(</span><span class=n>css_dependencies</span><span class=o>.</span><span class=n>decode</span><span class=p>())</span>
<a id=__codelineno-0-371 name=__codelineno-0-371></a> <span class=k>for</span> <span class=n>css_elem</span> <span class=ow>in</span> <span class=n>css_elems</span><span class=p>:</span>
<a id=__codelineno-0-372 name=__codelineno-0-372></a> <span class=n>tree</span><span class=o>.</span><span class=n>head</span><span class=o>.</span><span class=n>insert_child</span><span class=p>(</span><span class=n>css_elem</span><span class=p>)</span> <span class=c1># type: ignore # TODO: Update to selectolax 0.3.25</span>
<a id=__codelineno-0-373 name=__codelineno-0-373></a> <span class=n>did_modify_html</span> <span class=o>=</span> <span class=kc>True</span>
<a id=__codelineno-0-374 name=__codelineno-0-374></a>
<a id=__codelineno-0-375 name=__codelineno-0-375></a> <span class=k>if</span> <span class=ow>not</span> <span class=n>did_find_js_placeholder</span> <span class=ow>and</span> <span class=n>tree</span><span class=o>.</span><span class=n>body</span><span class=p>:</span>
<a id=__codelineno-0-376 name=__codelineno-0-376></a> <span class=n>js_elems</span> <span class=o>=</span> <span class=n>parse_multiroot_html</span><span class=p>(</span><span class=n>js_dependencies</span><span class=o>.</span><span class=n>decode</span><span class=p>())</span>
<a id=__codelineno-0-377 name=__codelineno-0-377></a> <span class=k>for</span> <span class=n>js_elem</span> <span class=ow>in</span> <span class=n>js_elems</span><span class=p>:</span>
<a id=__codelineno-0-378 name=__codelineno-0-378></a> <span class=n>tree</span><span class=o>.</span><span class=n>body</span><span class=o>.</span><span class=n>insert_child</span><span class=p>(</span><span class=n>js_elem</span><span class=p>)</span> <span class=c1># type: ignore # TODO: Update to selectolax 0.3.25</span>
<a id=__codelineno-0-379 name=__codelineno-0-379></a> <span class=n>did_modify_html</span> <span class=o>=</span> <span class=kc>True</span>
<a id=__codelineno-0-380 name=__codelineno-0-380></a>
<a id=__codelineno-0-381 name=__codelineno-0-381></a> <span class=n>transformed</span> <span class=o>=</span> <span class=n>cast</span><span class=p>(</span><span class=nb>str</span><span class=p>,</span> <span class=n>tree</span><span class=o>.</span><span class=n>html</span><span class=p>)</span>
<a id=__codelineno-0-382 name=__codelineno-0-382></a> <span class=k>if</span> <span class=n>did_modify_html</span><span class=p>:</span>
<a id=__codelineno-0-383 name=__codelineno-0-383></a> <span class=n>content_</span> <span class=o>=</span> <span class=n>transformed</span><span class=o>.</span><span class=n>encode</span><span class=p>()</span>
<a id=__codelineno-0-384 name=__codelineno-0-384></a>
<a id=__codelineno-0-385 name=__codelineno-0-385></a> <span class=c1># Return the same type as we were given</span>
<a id=__codelineno-0-386 name=__codelineno-0-386></a> <span class=n>output</span> <span class=o>=</span> <span class=n>content_</span><span class=o>.</span><span class=n>decode</span><span class=p>()</span> <span class=k>if</span> <span class=nb>isinstance</span><span class=p>(</span><span class=n>content</span><span class=p>,</span> <span class=nb>str</span><span class=p>)</span> <span class=k>else</span> <span class=n>content_</span>
<a id=__codelineno-0-387 name=__codelineno-0-387></a> <span class=n>output</span> <span class=o>=</span> <span class=n>mark_safe</span><span class=p>(</span><span class=n>output</span><span class=p>)</span> <span class=k>if</span> <span class=n>is_safestring</span> <span class=k>else</span> <span class=n>output</span>
<a id=__codelineno-0-388 name=__codelineno-0-388></a> <span class=k>return</span> <span class=n>cast</span><span class=p>(</span><span class=n>TContent</span><span class=p>,</span> <span class=n>output</span><span class=p>)</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> </div> </div> </div> <div class="doc doc-object doc-module"> <h2 id=django_components.expression class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-module"></code> <span class="doc doc-object-name doc-module-name">expression</span> <a href=#django_components.expression class=headerlink title="Permanent link">¤</a></h2> <div class="doc doc-contents "> <p><span class=doc-section-title>Classes:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.expression.Operator href=#django_components.expression.Operator>Operator</a></code></b> <div class=doc-md-description> <p>Operator describes something that somehow changes the inputs</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.expression.SpreadOperator href=#django_components.expression.SpreadOperator>SpreadOperator</a></code></b> <div class=doc-md-description> <p>Operator that inserts one or more kwargs at the specified location.</p> </div> </li> </ul> <p><span class=doc-section-title>Functions:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.expression.process_aggregate_kwargs href=#django_components.expression.process_aggregate_kwargs>process_aggregate_kwargs</a></code></b> <div class=doc-md-description> <p>This function aggregates "prefixed" kwargs into dicts. "Prefixed" kwargs</p> </div> </li> </ul> <div class="doc doc-children"> <div class="doc doc-object doc-class"> <h3 id=django_components.expression.Operator class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-class"></code> <span class="doc doc-object-name doc-class-name">Operator</span> <a href=#django_components.expression.Operator class=headerlink title="Permanent link">¤</a></h3> <div class="doc doc-contents "> <p class="doc doc-class-bases"> Bases: <code><a class="autorefs autorefs-external" title=abc.ABC href=https://docs.python.org/3.12/library/abc.html#abc.ABC>ABC</a></code></p> <p>Operator describes something that somehow changes the inputs to template tags (the <code>{% %}</code>).</p> <p>For example, a SpreadOperator inserts one or more kwargs at the specified location.</p> <div class="doc doc-children"> </div> </div> </div> <div class="doc doc-object doc-class"> <h3 id=django_components.expression.SpreadOperator class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-class"></code> <span class="doc doc-object-name doc-class-name">SpreadOperator</span> <a href=#django_components.expression.SpreadOperator class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>SpreadOperator</span><span class=p>(</span><span class=n>expr</span><span class=p>:</span> <span class=n><span title=django_components.expression.Expression>Expression</span></span><span class=p>)</span>
</code></pre></div> <div class="doc doc-contents "> <p class="doc doc-class-bases"> Bases: <code><a class="autorefs autorefs-internal" title=django_components.expression.Operator href=#django_components.expression.Operator>Operator</a></code></p> <p>Operator that inserts one or more kwargs at the specified location.</p> <details class=quote> <summary>Source code in <code>src/django_components/expression.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-29>29</a></span>
<span class=normal><a href=#__codelineno-0-30>30</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-29 name=__codelineno-0-29></a><span class=k>def</span> <span class=fm>__init__</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>expr</span><span class=p>:</span> <span class=n>Expression</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=kc>None</span><span class=p>:</span>
<a id=__codelineno-0-30 name=__codelineno-0-30></a> <span class=bp>self</span><span class=o>.</span><span class=n>expr</span> <span class=o>=</span> <span class=n>expr</span>
</code></pre></div></td></tr></table></div> </details> <div class="doc doc-children"> </div> </div> </div> <div class="doc doc-object doc-function"> <h3 id=django_components.expression.process_aggregate_kwargs class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-function"></code> <span class="doc doc-object-name doc-function-name">process_aggregate_kwargs</span> <a href=#django_components.expression.process_aggregate_kwargs class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>process_aggregate_kwargs</span><span class=p>(</span><span class=n>kwargs</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Mapping href=https://docs.python.org/3.12/library/typing.html#typing.Mapping>Mapping</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span> <span class=n><a class="autorefs autorefs-external" title=typing.Any href=https://docs.python.org/3.12/library/typing.html#typing.Any>Any</a></span><span class=p>])</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-external" title=typing.Dict href=https://docs.python.org/3.12/library/typing.html#typing.Dict>Dict</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span> <span class=n><a class="autorefs autorefs-external" title=typing.Any href=https://docs.python.org/3.12/library/typing.html#typing.Any>Any</a></span><span class=p>]</span>
</code></pre></div> <div class="doc doc-contents "> <p>This function aggregates "prefixed" kwargs into dicts. "Prefixed" kwargs start with some prefix delimited with <code>:</code> (e.g. <code>attrs:</code>).</p> <p>Example: <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>process_component_kwargs</span><span class=p>({</span><span class=s2>&quot;abc:one&quot;</span><span class=p>:</span> <span class=mi>1</span><span class=p>,</span> <span class=s2>&quot;abc:two&quot;</span><span class=p>:</span> <span class=mi>2</span><span class=p>,</span> <span class=s2>&quot;def:three&quot;</span><span class=p>:</span> <span class=mi>3</span><span class=p>,</span> <span class=s2>&quot;four&quot;</span><span class=p>:</span> <span class=mi>4</span><span class=p>})</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a><span class=c1># {&quot;abc&quot;: {&quot;one&quot;: 1, &quot;two&quot;: 2}, &quot;def&quot;: {&quot;three&quot;: 3}, &quot;four&quot;: 4}</span>
</code></pre></div></p> <hr> <p>We want to support a use case similar to Vue's fallthrough attributes. In other words, where a component author can designate a prop (input) which is a dict and which will be rendered as HTML attributes.</p> <p>This is useful for allowing component users to tweak styling or add event handling to the underlying HTML. E.g.:</p> <p><code>class="pa-4 d-flex text-black"</code> or <code>@click.stop="alert('clicked!')"</code></p> <p>So if the prop is <code>attrs</code>, and the component is called like so: <div class=highlight><pre><span></span><code><a id=__codelineno-1-1 name=__codelineno-1-1 href=#__codelineno-1-1></a><span class=cp>{%</span> <span class=k>component</span> <span class=s2>&quot;my_comp&quot;</span> <span class=nv>attrs</span><span class=o>=</span><span class=nv>attrs</span> <span class=cp>%}</span>
</code></pre></div></p> <p>then, if <code>attrs</code> is: <div class=highlight><pre><span></span><code><a id=__codelineno-2-1 name=__codelineno-2-1 href=#__codelineno-2-1></a><span class=p>{</span><span class=s2>&quot;class&quot;</span><span class=p>:</span> <span class=s2>&quot;text-red pa-4&quot;</span><span class=p>,</span> <span class=s2>&quot;@click&quot;</span><span class=p>:</span> <span class=s2>&quot;dispatch(&#39;my_event&#39;, 123)&quot;</span><span class=p>}</span>
</code></pre></div></p> <p>and the component template is: <div class=highlight><pre><span></span><code><a id=__codelineno-3-1 name=__codelineno-3-1 href=#__codelineno-3-1></a><span class=x>&lt;div </span><span class=cp>{%</span> <span class=k>html_attrs</span> <span class=nv>attrs</span> <span class=nv>add</span><span class=o>:</span><span class=nv>class</span><span class=o>=</span><span class=s2>&quot;extra-class&quot;</span> <span class=cp>%}</span><span class=x>&gt;&lt;/div&gt;</span>
</code></pre></div></p> <p>Then this renders: <div class=highlight><pre><span></span><code><a id=__codelineno-4-1 name=__codelineno-4-1 href=#__codelineno-4-1></a><span class=p>&lt;</span><span class=nt>div</span> <span class=na>class</span><span class=o>=</span><span class=s>&quot;text-red pa-4 extra-class&quot;</span> <span class=err>@</span><span class=na>click</span><span class=o>=</span><span class=s>&quot;dispatch(&#39;my_event&#39;, 123)&quot;</span> <span class=p>&gt;&lt;/</span><span class=nt>div</span><span class=p>&gt;</span>
</code></pre></div></p> <p>However, this way it is difficult for the component user to define the <code>attrs</code> variable, especially if they want to combine static and dynamic values. Because they will need to pre-process the <code>attrs</code> dict.</p> <p>So, instead, we allow to "aggregate" props into a dict. So all props that start with <code>attrs:</code>, like <code>attrs:class="text-red"</code>, will be collected into a dict at key <code>attrs</code>.</p> <p>This provides sufficient flexiblity to make it easy for component users to provide "fallthrough attributes", and sufficiently easy for component authors to process that input while still being able to provide their own keys.</p> <details class=quote> <summary>Source code in <code>src/django_components/expression.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-235>235</a></span>
<span class=normal><a href=#__codelineno-0-236>236</a></span>
<span class=normal><a href=#__codelineno-0-237>237</a></span>
<span class=normal><a href=#__codelineno-0-238>238</a></span>
<span class=normal><a href=#__codelineno-0-239>239</a></span>
<span class=normal><a href=#__codelineno-0-240>240</a></span>
<span class=normal><a href=#__codelineno-0-241>241</a></span>
<span class=normal><a href=#__codelineno-0-242>242</a></span>
<span class=normal><a href=#__codelineno-0-243>243</a></span>
<span class=normal><a href=#__codelineno-0-244>244</a></span>
<span class=normal><a href=#__codelineno-0-245>245</a></span>
<span class=normal><a href=#__codelineno-0-246>246</a></span>
<span class=normal><a href=#__codelineno-0-247>247</a></span>
<span class=normal><a href=#__codelineno-0-248>248</a></span>
<span class=normal><a href=#__codelineno-0-249>249</a></span>
<span class=normal><a href=#__codelineno-0-250>250</a></span>
<span class=normal><a href=#__codelineno-0-251>251</a></span>
<span class=normal><a href=#__codelineno-0-252>252</a></span>
<span class=normal><a href=#__codelineno-0-253>253</a></span>
<span class=normal><a href=#__codelineno-0-254>254</a></span>
<span class=normal><a href=#__codelineno-0-255>255</a></span>
<span class=normal><a href=#__codelineno-0-256>256</a></span>
<span class=normal><a href=#__codelineno-0-257>257</a></span>
<span class=normal><a href=#__codelineno-0-258>258</a></span>
<span class=normal><a href=#__codelineno-0-259>259</a></span>
<span class=normal><a href=#__codelineno-0-260>260</a></span>
<span class=normal><a href=#__codelineno-0-261>261</a></span>
<span class=normal><a href=#__codelineno-0-262>262</a></span>
<span class=normal><a href=#__codelineno-0-263>263</a></span>
<span class=normal><a href=#__codelineno-0-264>264</a></span>
<span class=normal><a href=#__codelineno-0-265>265</a></span>
<span class=normal><a href=#__codelineno-0-266>266</a></span>
<span class=normal><a href=#__codelineno-0-267>267</a></span>
<span class=normal><a href=#__codelineno-0-268>268</a></span>
<span class=normal><a href=#__codelineno-0-269>269</a></span>
<span class=normal><a href=#__codelineno-0-270>270</a></span>
<span class=normal><a href=#__codelineno-0-271>271</a></span>
<span class=normal><a href=#__codelineno-0-272>272</a></span>
<span class=normal><a href=#__codelineno-0-273>273</a></span>
<span class=normal><a href=#__codelineno-0-274>274</a></span>
<span class=normal><a href=#__codelineno-0-275>275</a></span>
<span class=normal><a href=#__codelineno-0-276>276</a></span>
<span class=normal><a href=#__codelineno-0-277>277</a></span>
<span class=normal><a href=#__codelineno-0-278>278</a></span>
<span class=normal><a href=#__codelineno-0-279>279</a></span>
<span class=normal><a href=#__codelineno-0-280>280</a></span>
<span class=normal><a href=#__codelineno-0-281>281</a></span>
<span class=normal><a href=#__codelineno-0-282>282</a></span>
<span class=normal><a href=#__codelineno-0-283>283</a></span>
<span class=normal><a href=#__codelineno-0-284>284</a></span>
<span class=normal><a href=#__codelineno-0-285>285</a></span>
<span class=normal><a href=#__codelineno-0-286>286</a></span>
<span class=normal><a href=#__codelineno-0-287>287</a></span>
<span class=normal><a href=#__codelineno-0-288>288</a></span>
<span class=normal><a href=#__codelineno-0-289>289</a></span>
<span class=normal><a href=#__codelineno-0-290>290</a></span>
<span class=normal><a href=#__codelineno-0-291>291</a></span>
<span class=normal><a href=#__codelineno-0-292>292</a></span>
<span class=normal><a href=#__codelineno-0-293>293</a></span>
<span class=normal><a href=#__codelineno-0-294>294</a></span>
<span class=normal><a href=#__codelineno-0-295>295</a></span>
<span class=normal><a href=#__codelineno-0-296>296</a></span>
<span class=normal><a href=#__codelineno-0-297>297</a></span>
<span class=normal><a href=#__codelineno-0-298>298</a></span>
<span class=normal><a href=#__codelineno-0-299>299</a></span>
<span class=normal><a href=#__codelineno-0-300>300</a></span>
<span class=normal><a href=#__codelineno-0-301>301</a></span>
<span class=normal><a href=#__codelineno-0-302>302</a></span>
<span class=normal><a href=#__codelineno-0-303>303</a></span>
<span class=normal><a href=#__codelineno-0-304>304</a></span>
<span class=normal><a href=#__codelineno-0-305>305</a></span>
<span class=normal><a href=#__codelineno-0-306>306</a></span>
<span class=normal><a href=#__codelineno-0-307>307</a></span>
<span class=normal><a href=#__codelineno-0-308>308</a></span>
<span class=normal><a href=#__codelineno-0-309>309</a></span>
<span class=normal><a href=#__codelineno-0-310>310</a></span>
<span class=normal><a href=#__codelineno-0-311>311</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-235 name=__codelineno-0-235></a><span class=k>def</span> <span class=nf>process_aggregate_kwargs</span><span class=p>(</span><span class=n>kwargs</span><span class=p>:</span> <span class=n>Mapping</span><span class=p>[</span><span class=nb>str</span><span class=p>,</span> <span class=n>Any</span><span class=p>])</span> <span class=o>-&gt;</span> <span class=n>Dict</span><span class=p>[</span><span class=nb>str</span><span class=p>,</span> <span class=n>Any</span><span class=p>]:</span>
<a id=__codelineno-0-236 name=__codelineno-0-236></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-237 name=__codelineno-0-237></a><span class=sd> This function aggregates &quot;prefixed&quot; kwargs into dicts. &quot;Prefixed&quot; kwargs</span>
<a id=__codelineno-0-238 name=__codelineno-0-238></a><span class=sd> start with some prefix delimited with `:` (e.g. `attrs:`).</span>
<a id=__codelineno-0-239 name=__codelineno-0-239></a>
<a id=__codelineno-0-240 name=__codelineno-0-240></a><span class=sd> Example:</span>
<a id=__codelineno-0-241 name=__codelineno-0-241></a><span class=sd> ```py</span>
<a id=__codelineno-0-242 name=__codelineno-0-242></a><span class=sd> process_component_kwargs({&quot;abc:one&quot;: 1, &quot;abc:two&quot;: 2, &quot;def:three&quot;: 3, &quot;four&quot;: 4})</span>
<a id=__codelineno-0-243 name=__codelineno-0-243></a><span class=sd> # {&quot;abc&quot;: {&quot;one&quot;: 1, &quot;two&quot;: 2}, &quot;def&quot;: {&quot;three&quot;: 3}, &quot;four&quot;: 4}</span>
<a id=__codelineno-0-244 name=__codelineno-0-244></a><span class=sd> ```</span>
<a id=__codelineno-0-245 name=__codelineno-0-245></a>
<a id=__codelineno-0-246 name=__codelineno-0-246></a><span class=sd> ---</span>
<a id=__codelineno-0-247 name=__codelineno-0-247></a>
<a id=__codelineno-0-248 name=__codelineno-0-248></a><span class=sd> We want to support a use case similar to Vue&#39;s fallthrough attributes.</span>
<a id=__codelineno-0-249 name=__codelineno-0-249></a><span class=sd> In other words, where a component author can designate a prop (input)</span>
<a id=__codelineno-0-250 name=__codelineno-0-250></a><span class=sd> which is a dict and which will be rendered as HTML attributes.</span>
<a id=__codelineno-0-251 name=__codelineno-0-251></a>
<a id=__codelineno-0-252 name=__codelineno-0-252></a><span class=sd> This is useful for allowing component users to tweak styling or add</span>
<a id=__codelineno-0-253 name=__codelineno-0-253></a><span class=sd> event handling to the underlying HTML. E.g.:</span>
<a id=__codelineno-0-254 name=__codelineno-0-254></a>
<a id=__codelineno-0-255 name=__codelineno-0-255></a><span class=sd> `class=&quot;pa-4 d-flex text-black&quot;` or `@click.stop=&quot;alert(&#39;clicked!&#39;)&quot;`</span>
<a id=__codelineno-0-256 name=__codelineno-0-256></a>
<a id=__codelineno-0-257 name=__codelineno-0-257></a><span class=sd> So if the prop is `attrs`, and the component is called like so:</span>
<a id=__codelineno-0-258 name=__codelineno-0-258></a><span class=sd> ```django</span>
<a id=__codelineno-0-259 name=__codelineno-0-259></a><span class=sd> {% component &quot;my_comp&quot; attrs=attrs %}</span>
<a id=__codelineno-0-260 name=__codelineno-0-260></a><span class=sd> ```</span>
<a id=__codelineno-0-261 name=__codelineno-0-261></a>
<a id=__codelineno-0-262 name=__codelineno-0-262></a><span class=sd> then, if `attrs` is:</span>
<a id=__codelineno-0-263 name=__codelineno-0-263></a><span class=sd> ```py</span>
<a id=__codelineno-0-264 name=__codelineno-0-264></a><span class=sd> {&quot;class&quot;: &quot;text-red pa-4&quot;, &quot;@click&quot;: &quot;dispatch(&#39;my_event&#39;, 123)&quot;}</span>
<a id=__codelineno-0-265 name=__codelineno-0-265></a><span class=sd> ```</span>
<a id=__codelineno-0-266 name=__codelineno-0-266></a>
<a id=__codelineno-0-267 name=__codelineno-0-267></a><span class=sd> and the component template is:</span>
<a id=__codelineno-0-268 name=__codelineno-0-268></a><span class=sd> ```django</span>
<a id=__codelineno-0-269 name=__codelineno-0-269></a><span class=sd> &lt;div {% html_attrs attrs add:class=&quot;extra-class&quot; %}&gt;&lt;/div&gt;</span>
<a id=__codelineno-0-270 name=__codelineno-0-270></a><span class=sd> ```</span>
<a id=__codelineno-0-271 name=__codelineno-0-271></a>
<a id=__codelineno-0-272 name=__codelineno-0-272></a><span class=sd> Then this renders:</span>
<a id=__codelineno-0-273 name=__codelineno-0-273></a><span class=sd> ```html</span>
<a id=__codelineno-0-274 name=__codelineno-0-274></a><span class=sd> &lt;div class=&quot;text-red pa-4 extra-class&quot; @click=&quot;dispatch(&#39;my_event&#39;, 123)&quot; &gt;&lt;/div&gt;</span>
<a id=__codelineno-0-275 name=__codelineno-0-275></a><span class=sd> ```</span>
<a id=__codelineno-0-276 name=__codelineno-0-276></a>
<a id=__codelineno-0-277 name=__codelineno-0-277></a><span class=sd> However, this way it is difficult for the component user to define the `attrs`</span>
<a id=__codelineno-0-278 name=__codelineno-0-278></a><span class=sd> variable, especially if they want to combine static and dynamic values. Because</span>
<a id=__codelineno-0-279 name=__codelineno-0-279></a><span class=sd> they will need to pre-process the `attrs` dict.</span>
<a id=__codelineno-0-280 name=__codelineno-0-280></a>
<a id=__codelineno-0-281 name=__codelineno-0-281></a><span class=sd> So, instead, we allow to &quot;aggregate&quot; props into a dict. So all props that start</span>
<a id=__codelineno-0-282 name=__codelineno-0-282></a><span class=sd> with `attrs:`, like `attrs:class=&quot;text-red&quot;`, will be collected into a dict</span>
<a id=__codelineno-0-283 name=__codelineno-0-283></a><span class=sd> at key `attrs`.</span>
<a id=__codelineno-0-284 name=__codelineno-0-284></a>
<a id=__codelineno-0-285 name=__codelineno-0-285></a><span class=sd> This provides sufficient flexiblity to make it easy for component users to provide</span>
<a id=__codelineno-0-286 name=__codelineno-0-286></a><span class=sd> &quot;fallthrough attributes&quot;, and sufficiently easy for component authors to process</span>
<a id=__codelineno-0-287 name=__codelineno-0-287></a><span class=sd> that input while still being able to provide their own keys.</span>
<a id=__codelineno-0-288 name=__codelineno-0-288></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-289 name=__codelineno-0-289></a> <span class=n>processed_kwargs</span> <span class=o>=</span> <span class=p>{}</span>
<a id=__codelineno-0-290 name=__codelineno-0-290></a> <span class=n>nested_kwargs</span><span class=p>:</span> <span class=n>Dict</span><span class=p>[</span><span class=nb>str</span><span class=p>,</span> <span class=n>Dict</span><span class=p>[</span><span class=nb>str</span><span class=p>,</span> <span class=n>Any</span><span class=p>]]</span> <span class=o>=</span> <span class=p>{}</span>
<a id=__codelineno-0-291 name=__codelineno-0-291></a> <span class=k>for</span> <span class=n>key</span><span class=p>,</span> <span class=n>val</span> <span class=ow>in</span> <span class=n>kwargs</span><span class=o>.</span><span class=n>items</span><span class=p>():</span>
<a id=__codelineno-0-292 name=__codelineno-0-292></a> <span class=k>if</span> <span class=ow>not</span> <span class=n>is_aggregate_key</span><span class=p>(</span><span class=n>key</span><span class=p>):</span>
<a id=__codelineno-0-293 name=__codelineno-0-293></a> <span class=n>processed_kwargs</span><span class=p>[</span><span class=n>key</span><span class=p>]</span> <span class=o>=</span> <span class=n>val</span>
<a id=__codelineno-0-294 name=__codelineno-0-294></a> <span class=k>continue</span>
<a id=__codelineno-0-295 name=__codelineno-0-295></a>
<a id=__codelineno-0-296 name=__codelineno-0-296></a> <span class=c1># NOTE: Trim off the prefix from keys</span>
<a id=__codelineno-0-297 name=__codelineno-0-297></a> <span class=n>prefix</span><span class=p>,</span> <span class=n>sub_key</span> <span class=o>=</span> <span class=n>key</span><span class=o>.</span><span class=n>split</span><span class=p>(</span><span class=s2>&quot;:&quot;</span><span class=p>,</span> <span class=mi>1</span><span class=p>)</span>
<a id=__codelineno-0-298 name=__codelineno-0-298></a> <span class=k>if</span> <span class=n>prefix</span> <span class=ow>not</span> <span class=ow>in</span> <span class=n>nested_kwargs</span><span class=p>:</span>
<a id=__codelineno-0-299 name=__codelineno-0-299></a> <span class=n>nested_kwargs</span><span class=p>[</span><span class=n>prefix</span><span class=p>]</span> <span class=o>=</span> <span class=p>{}</span>
<a id=__codelineno-0-300 name=__codelineno-0-300></a> <span class=n>nested_kwargs</span><span class=p>[</span><span class=n>prefix</span><span class=p>][</span><span class=n>sub_key</span><span class=p>]</span> <span class=o>=</span> <span class=n>val</span>
<a id=__codelineno-0-301 name=__codelineno-0-301></a>
<a id=__codelineno-0-302 name=__codelineno-0-302></a> <span class=c1># Assign aggregated values into normal input</span>
<a id=__codelineno-0-303 name=__codelineno-0-303></a> <span class=k>for</span> <span class=n>key</span><span class=p>,</span> <span class=n>val</span> <span class=ow>in</span> <span class=n>nested_kwargs</span><span class=o>.</span><span class=n>items</span><span class=p>():</span>
<a id=__codelineno-0-304 name=__codelineno-0-304></a> <span class=k>if</span> <span class=n>key</span> <span class=ow>in</span> <span class=n>processed_kwargs</span><span class=p>:</span>
<a id=__codelineno-0-305 name=__codelineno-0-305></a> <span class=k>raise</span> <span class=n>TemplateSyntaxError</span><span class=p>(</span>
<a id=__codelineno-0-306 name=__codelineno-0-306></a> <span class=sa>f</span><span class=s2>&quot;Received argument &#39;</span><span class=si>{</span><span class=n>key</span><span class=si>}</span><span class=s2>&#39; both as a regular input (</span><span class=si>{</span><span class=n>key</span><span class=si>}</span><span class=s2>=...)&quot;</span>
<a id=__codelineno-0-307 name=__codelineno-0-307></a> <span class=sa>f</span><span class=s2>&quot; and as an aggregate dict (&#39;</span><span class=si>{</span><span class=n>key</span><span class=si>}</span><span class=s2>:key=...&#39;). Must be only one of the two&quot;</span>
<a id=__codelineno-0-308 name=__codelineno-0-308></a> <span class=p>)</span>
<a id=__codelineno-0-309 name=__codelineno-0-309></a> <span class=n>processed_kwargs</span><span class=p>[</span><span class=n>key</span><span class=p>]</span> <span class=o>=</span> <span class=n>val</span>
<a id=__codelineno-0-310 name=__codelineno-0-310></a>
<a id=__codelineno-0-311 name=__codelineno-0-311></a> <span class=k>return</span> <span class=n>processed_kwargs</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> </div> </div> </div> <div class="doc doc-object doc-module"> <h2 id=django_components.finders class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-module"></code> <span class="doc doc-object-name doc-module-name">finders</span> <a href=#django_components.finders class=headerlink title="Permanent link">¤</a></h2> <div class="doc doc-contents "> <p><span class=doc-section-title>Classes:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.finders.ComponentsFileSystemFinder href=#django_components.finders.ComponentsFileSystemFinder>ComponentsFileSystemFinder</a></code></b> <div class=doc-md-description> <p>A static files finder based on <code>FileSystemFinder</code>.</p> </div> </li> </ul> <div class="doc doc-children"> <div class="doc doc-object doc-class"> <h3 id=django_components.finders.ComponentsFileSystemFinder class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-class"></code> <span class="doc doc-object-name doc-class-name">ComponentsFileSystemFinder</span> <a href=#django_components.finders.ComponentsFileSystemFinder class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>ComponentsFileSystemFinder</span><span class=p>(</span><span class=n>app_names</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Any href=https://docs.python.org/3.12/library/typing.html#typing.Any>Any</a></span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span> <span class=o>*</span><span class=n>args</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Any href=https://docs.python.org/3.12/library/typing.html#typing.Any>Any</a></span><span class=p>,</span> <span class=o>**</span><span class=n>kwargs</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Any href=https://docs.python.org/3.12/library/typing.html#typing.Any>Any</a></span><span class=p>)</span>
</code></pre></div> <div class="doc doc-contents "> <p class="doc doc-class-bases"> Bases: <code><span title=django.contrib.staticfiles.finders.BaseFinder>BaseFinder</span></code></p> <p>A static files finder based on <code>FileSystemFinder</code>.</p> <p>Differences: - This finder uses <code>COMPONENTS.dirs</code> setting to locate files instead of <code>STATICFILES_DIRS</code>. - Whether a file within <code>COMPONENTS.dirs</code> is considered a STATIC file is configured by <code>COMPONENTS.static_files_allowed</code> and <code>COMPONENTS.static_files_forbidden</code>. - If <code>COMPONENTS.dirs</code> is not set, defaults to <code>settings.BASE_DIR / "components"</code></p> <p><span class=doc-section-title>Methods:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.finders.ComponentsFileSystemFinder.find href=#django_components.finders.ComponentsFileSystemFinder.find>find</a></code></b> <div class=doc-md-description> <p>Look for files in the extra locations as defined in COMPONENTS.dirs.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.finders.ComponentsFileSystemFinder.find_location href=#django_components.finders.ComponentsFileSystemFinder.find_location>find_location</a></code></b> <div class=doc-md-description> <p>Find a requested static file in a location and return the found</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.finders.ComponentsFileSystemFinder.list href=#django_components.finders.ComponentsFileSystemFinder.list>list</a></code></b> <div class=doc-md-description> <p>List all files in all locations.</p> </div> </li> </ul> <details class=quote> <summary>Source code in <code>src/django_components/finders.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-36>36</a></span>
<span class=normal><a href=#__codelineno-0-37>37</a></span>
<span class=normal><a href=#__codelineno-0-38>38</a></span>
<span class=normal><a href=#__codelineno-0-39>39</a></span>
<span class=normal><a href=#__codelineno-0-40>40</a></span>
<span class=normal><a href=#__codelineno-0-41>41</a></span>
<span class=normal><a href=#__codelineno-0-42>42</a></span>
<span class=normal><a href=#__codelineno-0-43>43</a></span>
<span class=normal><a href=#__codelineno-0-44>44</a></span>
<span class=normal><a href=#__codelineno-0-45>45</a></span>
<span class=normal><a href=#__codelineno-0-46>46</a></span>
<span class=normal><a href=#__codelineno-0-47>47</a></span>
<span class=normal><a href=#__codelineno-0-48>48</a></span>
<span class=normal><a href=#__codelineno-0-49>49</a></span>
<span class=normal><a href=#__codelineno-0-50>50</a></span>
<span class=normal><a href=#__codelineno-0-51>51</a></span>
<span class=normal><a href=#__codelineno-0-52>52</a></span>
<span class=normal><a href=#__codelineno-0-53>53</a></span>
<span class=normal><a href=#__codelineno-0-54>54</a></span>
<span class=normal><a href=#__codelineno-0-55>55</a></span>
<span class=normal><a href=#__codelineno-0-56>56</a></span>
<span class=normal><a href=#__codelineno-0-57>57</a></span>
<span class=normal><a href=#__codelineno-0-58>58</a></span>
<span class=normal><a href=#__codelineno-0-59>59</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-36 name=__codelineno-0-36></a><span class=k>def</span> <span class=fm>__init__</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>app_names</span><span class=p>:</span> <span class=n>Any</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span> <span class=o>*</span><span class=n>args</span><span class=p>:</span> <span class=n>Any</span><span class=p>,</span> <span class=o>**</span><span class=n>kwargs</span><span class=p>:</span> <span class=n>Any</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=kc>None</span><span class=p>:</span>
<a id=__codelineno-0-37 name=__codelineno-0-37></a> <span class=n>component_dirs</span> <span class=o>=</span> <span class=p>[</span><span class=nb>str</span><span class=p>(</span><span class=n>p</span><span class=p>)</span> <span class=k>for</span> <span class=n>p</span> <span class=ow>in</span> <span class=n>get_component_dirs</span><span class=p>()]</span>
<a id=__codelineno-0-38 name=__codelineno-0-38></a>
<a id=__codelineno-0-39 name=__codelineno-0-39></a> <span class=c1># NOTE: The rest of the __init__ is the same as `django.contrib.staticfiles.finders.FileSystemFinder`,</span>
<a id=__codelineno-0-40 name=__codelineno-0-40></a> <span class=c1># but using our locations instead of STATICFILES_DIRS.</span>
<a id=__codelineno-0-41 name=__codelineno-0-41></a>
<a id=__codelineno-0-42 name=__codelineno-0-42></a> <span class=c1># List of locations with static files</span>
<a id=__codelineno-0-43 name=__codelineno-0-43></a> <span class=bp>self</span><span class=o>.</span><span class=n>locations</span><span class=p>:</span> <span class=n>List</span><span class=p>[</span><span class=n>Tuple</span><span class=p>[</span><span class=nb>str</span><span class=p>,</span> <span class=nb>str</span><span class=p>]]</span> <span class=o>=</span> <span class=p>[]</span>
<a id=__codelineno-0-44 name=__codelineno-0-44></a>
<a id=__codelineno-0-45 name=__codelineno-0-45></a> <span class=c1># Maps dir paths to an appropriate storage instance</span>
<a id=__codelineno-0-46 name=__codelineno-0-46></a> <span class=bp>self</span><span class=o>.</span><span class=n>storages</span><span class=p>:</span> <span class=n>Dict</span><span class=p>[</span><span class=nb>str</span><span class=p>,</span> <span class=n>FileSystemStorage</span><span class=p>]</span> <span class=o>=</span> <span class=p>{}</span>
<a id=__codelineno-0-47 name=__codelineno-0-47></a> <span class=k>for</span> <span class=n>root</span> <span class=ow>in</span> <span class=n>component_dirs</span><span class=p>:</span>
<a id=__codelineno-0-48 name=__codelineno-0-48></a> <span class=k>if</span> <span class=nb>isinstance</span><span class=p>(</span><span class=n>root</span><span class=p>,</span> <span class=p>(</span><span class=nb>list</span><span class=p>,</span> <span class=nb>tuple</span><span class=p>)):</span>
<a id=__codelineno-0-49 name=__codelineno-0-49></a> <span class=n>prefix</span><span class=p>,</span> <span class=n>root</span> <span class=o>=</span> <span class=n>root</span>
<a id=__codelineno-0-50 name=__codelineno-0-50></a> <span class=k>else</span><span class=p>:</span>
<a id=__codelineno-0-51 name=__codelineno-0-51></a> <span class=n>prefix</span> <span class=o>=</span> <span class=s2>&quot;&quot;</span>
<a id=__codelineno-0-52 name=__codelineno-0-52></a> <span class=k>if</span> <span class=p>(</span><span class=n>prefix</span><span class=p>,</span> <span class=n>root</span><span class=p>)</span> <span class=ow>not</span> <span class=ow>in</span> <span class=bp>self</span><span class=o>.</span><span class=n>locations</span><span class=p>:</span>
<a id=__codelineno-0-53 name=__codelineno-0-53></a> <span class=bp>self</span><span class=o>.</span><span class=n>locations</span><span class=o>.</span><span class=n>append</span><span class=p>((</span><span class=n>prefix</span><span class=p>,</span> <span class=n>root</span><span class=p>))</span>
<a id=__codelineno-0-54 name=__codelineno-0-54></a> <span class=k>for</span> <span class=n>prefix</span><span class=p>,</span> <span class=n>root</span> <span class=ow>in</span> <span class=bp>self</span><span class=o>.</span><span class=n>locations</span><span class=p>:</span>
<a id=__codelineno-0-55 name=__codelineno-0-55></a> <span class=n>filesystem_storage</span> <span class=o>=</span> <span class=n>FileSystemStorage</span><span class=p>(</span><span class=n>location</span><span class=o>=</span><span class=n>root</span><span class=p>)</span>
<a id=__codelineno-0-56 name=__codelineno-0-56></a> <span class=n>filesystem_storage</span><span class=o>.</span><span class=n>prefix</span> <span class=o>=</span> <span class=n>prefix</span>
<a id=__codelineno-0-57 name=__codelineno-0-57></a> <span class=bp>self</span><span class=o>.</span><span class=n>storages</span><span class=p>[</span><span class=n>root</span><span class=p>]</span> <span class=o>=</span> <span class=n>filesystem_storage</span>
<a id=__codelineno-0-58 name=__codelineno-0-58></a>
<a id=__codelineno-0-59 name=__codelineno-0-59></a> <span class=nb>super</span><span class=p>()</span><span class=o>.</span><span class=fm>__init__</span><span class=p>(</span><span class=o>*</span><span class=n>args</span><span class=p>,</span> <span class=o>**</span><span class=n>kwargs</span><span class=p>)</span>
</code></pre></div></td></tr></table></div> </details> <div class="doc doc-children"> <div class="doc doc-object doc-function"> <h4 id=django_components.finders.ComponentsFileSystemFinder.find class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">find</span> <a href=#django_components.finders.ComponentsFileSystemFinder.find class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>find</span><span class=p>(</span><span class=n>path</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span> <span class=nb>all</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/functions.html#bool>bool</a></span> <span class=o>=</span> <span class=kc>False</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-external" title=typing.Union href=https://docs.python.org/3.12/library/typing.html#typing.Union>Union</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.List href=https://docs.python.org/3.12/library/typing.html#typing.List>List</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>],</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]</span>
</code></pre></div> <div class="doc doc-contents "> <p>Look for files in the extra locations as defined in COMPONENTS.dirs.</p> <details class=quote> <summary>Source code in <code>src/django_components/finders.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-93> 93</a></span>
<span class=normal><a href=#__codelineno-0-94> 94</a></span>
<span class=normal><a href=#__codelineno-0-95> 95</a></span>
<span class=normal><a href=#__codelineno-0-96> 96</a></span>
<span class=normal><a href=#__codelineno-0-97> 97</a></span>
<span class=normal><a href=#__codelineno-0-98> 98</a></span>
<span class=normal><a href=#__codelineno-0-99> 99</a></span>
<span class=normal><a href=#__codelineno-0-100>100</a></span>
<span class=normal><a href=#__codelineno-0-101>101</a></span>
<span class=normal><a href=#__codelineno-0-102>102</a></span>
<span class=normal><a href=#__codelineno-0-103>103</a></span>
<span class=normal><a href=#__codelineno-0-104>104</a></span>
<span class=normal><a href=#__codelineno-0-105>105</a></span>
<span class=normal><a href=#__codelineno-0-106>106</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-93 name=__codelineno-0-93></a><span class=k>def</span> <span class=nf>find</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>path</span><span class=p>:</span> <span class=nb>str</span><span class=p>,</span> <span class=nb>all</span><span class=p>:</span> <span class=nb>bool</span> <span class=o>=</span> <span class=kc>False</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n>Union</span><span class=p>[</span><span class=n>List</span><span class=p>[</span><span class=nb>str</span><span class=p>],</span> <span class=nb>str</span><span class=p>]:</span>
<a id=__codelineno-0-94 name=__codelineno-0-94></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-95 name=__codelineno-0-95></a><span class=sd> Look for files in the extra locations as defined in COMPONENTS.dirs.</span>
<a id=__codelineno-0-96 name=__codelineno-0-96></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-97 name=__codelineno-0-97></a> <span class=n>matches</span><span class=p>:</span> <span class=n>List</span><span class=p>[</span><span class=nb>str</span><span class=p>]</span> <span class=o>=</span> <span class=p>[]</span>
<a id=__codelineno-0-98 name=__codelineno-0-98></a> <span class=k>for</span> <span class=n>prefix</span><span class=p>,</span> <span class=n>root</span> <span class=ow>in</span> <span class=bp>self</span><span class=o>.</span><span class=n>locations</span><span class=p>:</span>
<a id=__codelineno-0-99 name=__codelineno-0-99></a> <span class=k>if</span> <span class=n>root</span> <span class=ow>not</span> <span class=ow>in</span> <span class=n>searched_locations</span><span class=p>:</span>
<a id=__codelineno-0-100 name=__codelineno-0-100></a> <span class=n>searched_locations</span><span class=o>.</span><span class=n>append</span><span class=p>(</span><span class=n>root</span><span class=p>)</span>
<a id=__codelineno-0-101 name=__codelineno-0-101></a> <span class=n>matched_path</span> <span class=o>=</span> <span class=bp>self</span><span class=o>.</span><span class=n>find_location</span><span class=p>(</span><span class=n>root</span><span class=p>,</span> <span class=n>path</span><span class=p>,</span> <span class=n>prefix</span><span class=p>)</span>
<a id=__codelineno-0-102 name=__codelineno-0-102></a> <span class=k>if</span> <span class=n>matched_path</span><span class=p>:</span>
<a id=__codelineno-0-103 name=__codelineno-0-103></a> <span class=k>if</span> <span class=ow>not</span> <span class=nb>all</span><span class=p>:</span>
<a id=__codelineno-0-104 name=__codelineno-0-104></a> <span class=k>return</span> <span class=n>matched_path</span>
<a id=__codelineno-0-105 name=__codelineno-0-105></a> <span class=n>matches</span><span class=o>.</span><span class=n>append</span><span class=p>(</span><span class=n>matched_path</span><span class=p>)</span>
<a id=__codelineno-0-106 name=__codelineno-0-106></a> <span class=k>return</span> <span class=n>matches</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h4 id=django_components.finders.ComponentsFileSystemFinder.find_location class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">find_location</span> <a href=#django_components.finders.ComponentsFileSystemFinder.find_location class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>find_location</span><span class=p>(</span><span class=n>root</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span> <span class=n>path</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span> <span class=n>prefix</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]</span>
</code></pre></div> <div class="doc doc-contents "> <p>Find a requested static file in a location and return the found absolute path (or <code>None</code> if no match).</p> <details class=quote> <summary>Source code in <code>src/django_components/finders.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-109>109</a></span>
<span class=normal><a href=#__codelineno-0-110>110</a></span>
<span class=normal><a href=#__codelineno-0-111>111</a></span>
<span class=normal><a href=#__codelineno-0-112>112</a></span>
<span class=normal><a href=#__codelineno-0-113>113</a></span>
<span class=normal><a href=#__codelineno-0-114>114</a></span>
<span class=normal><a href=#__codelineno-0-115>115</a></span>
<span class=normal><a href=#__codelineno-0-116>116</a></span>
<span class=normal><a href=#__codelineno-0-117>117</a></span>
<span class=normal><a href=#__codelineno-0-118>118</a></span>
<span class=normal><a href=#__codelineno-0-119>119</a></span>
<span class=normal><a href=#__codelineno-0-120>120</a></span>
<span class=normal><a href=#__codelineno-0-121>121</a></span>
<span class=normal><a href=#__codelineno-0-122>122</a></span>
<span class=normal><a href=#__codelineno-0-123>123</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-109 name=__codelineno-0-109></a><span class=k>def</span> <span class=nf>find_location</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>root</span><span class=p>:</span> <span class=nb>str</span><span class=p>,</span> <span class=n>path</span><span class=p>:</span> <span class=nb>str</span><span class=p>,</span> <span class=n>prefix</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=nb>str</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</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-0-110 name=__codelineno-0-110></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-111 name=__codelineno-0-111></a><span class=sd> Find a requested static file in a location and return the found</span>
<a id=__codelineno-0-112 name=__codelineno-0-112></a><span class=sd> absolute path (or ``None`` if no match).</span>
<a id=__codelineno-0-113 name=__codelineno-0-113></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-114 name=__codelineno-0-114></a> <span class=k>if</span> <span class=n>prefix</span><span class=p>:</span>
<a id=__codelineno-0-115 name=__codelineno-0-115></a> <span class=n>prefix</span> <span class=o>=</span> <span class=s2>&quot;</span><span class=si>%s%s</span><span class=s2>&quot;</span> <span class=o>%</span> <span class=p>(</span><span class=n>prefix</span><span class=p>,</span> <span class=n>os</span><span class=o>.</span><span class=n>sep</span><span class=p>)</span>
<a id=__codelineno-0-116 name=__codelineno-0-116></a> <span class=k>if</span> <span class=ow>not</span> <span class=n>path</span><span class=o>.</span><span class=n>startswith</span><span class=p>(</span><span class=n>prefix</span><span class=p>):</span>
<a id=__codelineno-0-117 name=__codelineno-0-117></a> <span class=k>return</span> <span class=kc>None</span>
<a id=__codelineno-0-118 name=__codelineno-0-118></a> <span class=n>path</span> <span class=o>=</span> <span class=n>path</span><span class=o>.</span><span class=n>removeprefix</span><span class=p>(</span><span class=n>prefix</span><span class=p>)</span>
<a id=__codelineno-0-119 name=__codelineno-0-119></a> <span class=n>path</span> <span class=o>=</span> <span class=n>safe_join</span><span class=p>(</span><span class=n>root</span><span class=p>,</span> <span class=n>path</span><span class=p>)</span>
<a id=__codelineno-0-120 name=__codelineno-0-120></a>
<a id=__codelineno-0-121 name=__codelineno-0-121></a> <span class=k>if</span> <span class=n>os</span><span class=o>.</span><span class=n>path</span><span class=o>.</span><span class=n>exists</span><span class=p>(</span><span class=n>path</span><span class=p>)</span> <span class=ow>and</span> <span class=bp>self</span><span class=o>.</span><span class=n>_is_path_valid</span><span class=p>(</span><span class=n>path</span><span class=p>):</span>
<a id=__codelineno-0-122 name=__codelineno-0-122></a> <span class=k>return</span> <span class=n>path</span>
<a id=__codelineno-0-123 name=__codelineno-0-123></a> <span class=k>return</span> <span class=kc>None</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h4 id=django_components.finders.ComponentsFileSystemFinder.list class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">list</span> <a href=#django_components.finders.ComponentsFileSystemFinder.list class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nb>list</span><span class=p>(</span><span class=nf>ignore_patterns</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.List href=https://docs.python.org/3.12/library/typing.html#typing.List>List</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>])</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-external" title=typing.Iterable href=https://docs.python.org/3.12/library/typing.html#typing.Iterable>Iterable</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Tuple href=https://docs.python.org/3.12/library/typing.html#typing.Tuple>Tuple</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span> <span class=n><a class="autorefs autorefs-external" title=django.core.files.storage.FileSystemStorage href=https://docs.djangoproject.com/en/5.0/ref/files/storage/#django.core.files.storage.FileSystemStorage>FileSystemStorage</a></span><span class=p>]]</span>
</code></pre></div> <div class="doc doc-contents "> <p>List all files in all locations.</p> <details class=quote> <summary>Source code in <code>src/django_components/finders.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-130>130</a></span>
<span class=normal><a href=#__codelineno-0-131>131</a></span>
<span class=normal><a href=#__codelineno-0-132>132</a></span>
<span class=normal><a href=#__codelineno-0-133>133</a></span>
<span class=normal><a href=#__codelineno-0-134>134</a></span>
<span class=normal><a href=#__codelineno-0-135>135</a></span>
<span class=normal><a href=#__codelineno-0-136>136</a></span>
<span class=normal><a href=#__codelineno-0-137>137</a></span>
<span class=normal><a href=#__codelineno-0-138>138</a></span>
<span class=normal><a href=#__codelineno-0-139>139</a></span>
<span class=normal><a href=#__codelineno-0-140>140</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-130 name=__codelineno-0-130></a><span class=k>def</span> <span class=nf>list</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>ignore_patterns</span><span class=p>:</span> <span class=n>List</span><span class=p>[</span><span class=nb>str</span><span class=p>])</span> <span class=o>-&gt;</span> <span class=n>Iterable</span><span class=p>[</span><span class=n>Tuple</span><span class=p>[</span><span class=nb>str</span><span class=p>,</span> <span class=n>FileSystemStorage</span><span class=p>]]:</span>
<a id=__codelineno-0-131 name=__codelineno-0-131></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-132 name=__codelineno-0-132></a><span class=sd> List all files in all locations.</span>
<a id=__codelineno-0-133 name=__codelineno-0-133></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-134 name=__codelineno-0-134></a> <span class=k>for</span> <span class=n>prefix</span><span class=p>,</span> <span class=n>root</span> <span class=ow>in</span> <span class=bp>self</span><span class=o>.</span><span class=n>locations</span><span class=p>:</span>
<a id=__codelineno-0-135 name=__codelineno-0-135></a> <span class=c1># Skip nonexistent directories.</span>
<a id=__codelineno-0-136 name=__codelineno-0-136></a> <span class=k>if</span> <span class=n>os</span><span class=o>.</span><span class=n>path</span><span class=o>.</span><span class=n>isdir</span><span class=p>(</span><span class=n>root</span><span class=p>):</span>
<a id=__codelineno-0-137 name=__codelineno-0-137></a> <span class=n>storage</span> <span class=o>=</span> <span class=bp>self</span><span class=o>.</span><span class=n>storages</span><span class=p>[</span><span class=n>root</span><span class=p>]</span>
<a id=__codelineno-0-138 name=__codelineno-0-138></a> <span class=k>for</span> <span class=n>path</span> <span class=ow>in</span> <span class=n>get_files</span><span class=p>(</span><span class=n>storage</span><span class=p>,</span> <span class=n>ignore_patterns</span><span class=p>):</span>
<a id=__codelineno-0-139 name=__codelineno-0-139></a> <span class=k>if</span> <span class=bp>self</span><span class=o>.</span><span class=n>_is_path_valid</span><span class=p>(</span><span class=n>path</span><span class=p>):</span>
<a id=__codelineno-0-140 name=__codelineno-0-140></a> <span class=k>yield</span> <span class=n>path</span><span class=p>,</span> <span class=n>storage</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> </div> </div> </div> </div> </div> </div> <div class="doc doc-object doc-module"> <h2 id=django_components.library class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-module"></code> <span class="doc doc-object-name doc-module-name">library</span> <a href=#django_components.library class=headerlink title="Permanent link">¤</a></h2> <div class="doc doc-contents "> <p>Module for interfacing with Django's Library (<code>django.template.library</code>)</p> <p><span class=doc-section-title>Classes:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.library.TagProtectedError href=#django_components.library.TagProtectedError>TagProtectedError</a></code></b> <div class=doc-md-description> <p>The way the <a href=../../concepts/advanced/tag_formatter><code>TagFormatter</code></a> works is that,</p> </div> </li> </ul> <p><span class=doc-section-title>Attributes:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.library.PROTECTED_TAGS href=#django_components.library.PROTECTED_TAGS>PROTECTED_TAGS</a></code></b> <div class=doc-md-description> <p>These are the names that users cannot choose for their components,</p> </div> </li> </ul> <div class="doc doc-children"> <div class="doc doc-object doc-attribute"> <h3 id=django_components.library.PROTECTED_TAGS class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">PROTECTED_TAGS</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-module-attribute"><code>module-attribute</code></small> </span> <a href=#django_components.library.PROTECTED_TAGS class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>PROTECTED_TAGS</span> <span class=o>=</span> <span class=p>[</span><span class=s1>&#39;component_css_dependencies&#39;</span><span class=p>,</span> <span class=s1>&#39;component_js_dependencies&#39;</span><span class=p>,</span> <span class=s1>&#39;fill&#39;</span><span class=p>,</span> <span class=s1>&#39;html_attrs&#39;</span><span class=p>,</span> <span class=s1>&#39;provide&#39;</span><span class=p>,</span> <span class=s1>&#39;slot&#39;</span><span class=p>]</span>
</code></pre></div> <div class="doc doc-contents "> <p>These are the names that users cannot choose for their components, as they would conflict with other tags in the Library.</p> </div> </div> <div class="doc doc-object doc-class"> <h3 id=django_components.library.TagProtectedError class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-class"></code> <span class="doc doc-object-name doc-class-name">TagProtectedError</span> <a href=#django_components.library.TagProtectedError class=headerlink title="Permanent link">¤</a></h3> <div class="doc doc-contents "> <p class="doc doc-class-bases"> Bases: <code><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/exceptions.html#Exception>Exception</a></code></p> <p>The way the <a href=../../concepts/advanced/tag_formatter><code>TagFormatter</code></a> works is that, based on which start and end tags are used for rendering components, the <a href=../api#django_components.ComponentRegistry><code>ComponentRegistry</code></a> behind the scenes <a href=https://docs.djangoproject.com/en/5.1/howto/custom-template-tags/#registering-the-tag>un-/registers the template tags</a> with the associated instance of Django's <a href=https://docs.djangoproject.com/en/5.1/howto/custom-template-tags/#code-layout><code>Library</code></a>.</p> <p>In other words, if I have registered a component <code>"table"</code>, and I use the shorthand syntax:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=cp>{%</span> <span class=k>table</span> <span class=p>...</span> <span class=cp>%}</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a><span class=cp>{%</span> <span class=k>endtable</span> <span class=cp>%}</span>
</code></pre></div> <p>Then <a href=../api#django_components.ComponentRegistry><code>ComponentRegistry</code></a> registers the tag <code>table</code> onto the Django's Library instance.</p> <p>However, that means that if we registered a component <code>"slot"</code>, then we would overwrite the <a href=../template_tags#slot><code>{% slot %}</code></a> tag from django_components.</p> <p>Thus, this exception is raised when a component is attempted to be registered under a forbidden name, such that it would overwrite one of django_component's own template tags.</p> </div> </div> </div> </div> </div> <div class="doc doc-object doc-module"> <h2 id=django_components.management class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-module"></code> <span class="doc doc-object-name doc-module-name">management</span> <a href=#django_components.management class=headerlink title="Permanent link">¤</a></h2> <div class="doc doc-contents "> <p><span class=doc-section-title>Modules:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.management.commands href=#django_components.management.commands>commands</a></code></b> <div class=doc-md-description> </div> </li> </ul> <div class="doc doc-children"> <div class="doc doc-object doc-module"> <h3 id=django_components.management.commands class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-module"></code> <span class="doc doc-object-name doc-module-name">commands</span> <a href=#django_components.management.commands class=headerlink title="Permanent link">¤</a></h3> <div class="doc doc-contents "> <p><span class=doc-section-title>Modules:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.management.commands.startcomponent href=#django_components.management.commands.startcomponent>startcomponent</a></code></b> <div class=doc-md-description> </div> </li> </ul> <div class="doc doc-children"> <div class="doc doc-object doc-module"> <h4 id=django_components.management.commands.startcomponent class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-module"></code> <span class="doc doc-object-name doc-module-name">startcomponent</span> <a href=#django_components.management.commands.startcomponent class=headerlink title="Permanent link">¤</a></h4> <div class="doc doc-contents "> <p><span class=doc-section-title>Classes:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.management.commands.startcomponent.Command href=#django_components.management.commands.startcomponent.Command>Command</a></code></b> <div class=doc-md-description> <h6 id=django_components.management.commands.startcomponent--management-command-usage>Management Command Usage<a class=headerlink href=#django_components.management.commands.startcomponent--management-command-usage title="Permanent link">¤</a></h6> </div> </li> </ul> <div class="doc doc-children"> <div class="doc doc-object doc-class"> <h5 id=django_components.management.commands.startcomponent.Command class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-class"></code> <span class="doc doc-object-name doc-class-name">Command</span> <a href=#django_components.management.commands.startcomponent.Command class=headerlink title="Permanent link">¤</a></h5> <div class="doc doc-contents "> <p class="doc doc-class-bases"> Bases: <code><span title=django.core.management.base.BaseCommand>BaseCommand</span></code></p> <h6 id=django_components.management.commands.startcomponent.Command--management-command-usage>Management Command Usage<a class=headerlink href=#django_components.management.commands.startcomponent.Command--management-command-usage title="Permanent link">¤</a></h6> <p>To use the command, run the following command in your terminal:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a>python<span class=w> </span>manage.py<span class=w> </span>startcomponent<span class=w> </span>&lt;name&gt;<span class=w> </span>--path<span class=w> </span>&lt;path&gt;<span class=w> </span>--js<span class=w> </span>&lt;js_filename&gt;<span class=w> </span>--css<span class=w> </span>&lt;css_filename&gt;<span class=w> </span>--template<span class=w> </span>&lt;template_filename&gt;<span class=w> </span>--force<span class=w> </span>--verbose<span class=w> </span>--dry-run
</code></pre></div> <p>Replace <code>&lt;name&gt;</code>, <code>&lt;path&gt;</code>, <code>&lt;js_filename&gt;</code>, <code>&lt;css_filename&gt;</code>, and <code>&lt;template_filename&gt;</code> with your desired values.</p> <h6 id=django_components.management.commands.startcomponent.Command--management-command-examples>Management Command Examples<a class=headerlink href=#django_components.management.commands.startcomponent.Command--management-command-examples title="Permanent link">¤</a></h6> <p>Here are some examples of how you can use the command:</p> <h6 id=django_components.management.commands.startcomponent.Command--creating-a-component-with-default-settings>Creating a Component with Default Settings<a class=headerlink href=#django_components.management.commands.startcomponent.Command--creating-a-component-with-default-settings title="Permanent link">¤</a></h6> <p>To create a component with the default settings, you only need to provide the name of the component:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-1-1 name=__codelineno-1-1 href=#__codelineno-1-1></a>python<span class=w> </span>manage.py<span class=w> </span>startcomponent<span class=w> </span>my_component
</code></pre></div> <p>This will create a new component named <code>my_component</code> in the <code>components</code> directory of your Django project. The JavaScript, CSS, and template files will be named <code>script.js</code>, <code>style.css</code>, and <code>template.html</code>, respectively.</p> <h6 id=django_components.management.commands.startcomponent.Command--creating-a-component-with-custom-settings>Creating a Component with Custom Settings<a class=headerlink href=#django_components.management.commands.startcomponent.Command--creating-a-component-with-custom-settings title="Permanent link">¤</a></h6> <p>You can also create a component with custom settings by providing additional arguments:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-2-1 name=__codelineno-2-1 href=#__codelineno-2-1></a>python<span class=w> </span>manage.py<span class=w> </span>startcomponent<span class=w> </span>new_component<span class=w> </span>--path<span class=w> </span>my_components<span class=w> </span>--js<span class=w> </span>my_script.js<span class=w> </span>--css<span class=w> </span>my_style.css<span class=w> </span>--template<span class=w> </span>my_template.html
</code></pre></div> <p>This will create a new component named <code>new_component</code> in the <code>my_components</code> directory. The JavaScript, CSS, and template files will be named <code>my_script.js</code>, <code>my_style.css</code>, and <code>my_template.html</code>, respectively.</p> <h6 id=django_components.management.commands.startcomponent.Command--overwriting-an-existing-component>Overwriting an Existing Component<a class=headerlink href=#django_components.management.commands.startcomponent.Command--overwriting-an-existing-component title="Permanent link">¤</a></h6> <p>If you want to overwrite an existing component, you can use the <code>--force</code> option:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-3-1 name=__codelineno-3-1 href=#__codelineno-3-1></a>python<span class=w> </span>manage.py<span class=w> </span>startcomponent<span class=w> </span>my_component<span class=w> </span>--force
</code></pre></div> <p>This will overwrite the existing <code>my_component</code> if it exists.</p> <h6 id=django_components.management.commands.startcomponent.Command--simulating-component-creation>Simulating Component Creation<a class=headerlink href=#django_components.management.commands.startcomponent.Command--simulating-component-creation title="Permanent link">¤</a></h6> <p>If you want to simulate the creation of a component without actually creating any files, you can use the <code>--dry-run</code> option:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-4-1 name=__codelineno-4-1 href=#__codelineno-4-1></a>python<span class=w> </span>manage.py<span class=w> </span>startcomponent<span class=w> </span>my_component<span class=w> </span>--dry-run
</code></pre></div> <p>This will simulate the creation of <code>my_component</code> without creating any files.</p> <div class="doc doc-children"> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> <div class="doc doc-object doc-module"> <h2 id=django_components.middleware class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-module"></code> <span class="doc doc-object-name doc-module-name">middleware</span> <a href=#django_components.middleware class=headerlink title="Permanent link">¤</a></h2> <div class="doc doc-contents "> <p><span class=doc-section-title>Classes:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.middleware.ComponentDependencyMiddleware href=#django_components.middleware.ComponentDependencyMiddleware>ComponentDependencyMiddleware</a></code></b> <div class=doc-md-description> <p>Middleware that inserts CSS/JS dependencies for all rendered</p> </div> </li> </ul> <div class="doc doc-children"> <div class="doc doc-object doc-class"> <h3 id=django_components.middleware.ComponentDependencyMiddleware class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-class"></code> <span class="doc doc-object-name doc-class-name">ComponentDependencyMiddleware</span> <a href=#django_components.middleware.ComponentDependencyMiddleware class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>ComponentDependencyMiddleware</span><span class=p>(</span><span class=n>get_response</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Callable href=https://docs.python.org/3.12/library/typing.html#typing.Callable>Callable</a></span><span class=p>[[</span><span class=n><a class="autorefs autorefs-external" title=django.http.HttpRequest href=https://docs.djangoproject.com/en/5.0/ref/request-response/#django.http.HttpRequest>HttpRequest</a></span><span class=p>],</span> <span class=n><a class="autorefs autorefs-external" title=django.http.HttpResponse href=https://docs.djangoproject.com/en/5.0/ref/request-response/#django.http.HttpResponse>HttpResponse</a></span><span class=p>])</span>
</code></pre></div> <div class="doc doc-contents "> <p>Middleware that inserts CSS/JS dependencies for all rendered components at points marked with template tags.</p> <details class=quote> <summary>Source code in <code>src/django_components/dependencies.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-766>766</a></span>
<span class=normal><a href=#__codelineno-0-767>767</a></span>
<span class=normal><a href=#__codelineno-0-768>768</a></span>
<span class=normal><a href=#__codelineno-0-769>769</a></span>
<span class=normal><a href=#__codelineno-0-770>770</a></span>
<span class=normal><a href=#__codelineno-0-771>771</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-766 name=__codelineno-0-766></a><span class=k>def</span> <span class=fm>__init__</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>get_response</span><span class=p>:</span> <span class=s2>&quot;Callable[[HttpRequest], HttpResponse]&quot;</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=kc>None</span><span class=p>:</span>
<a id=__codelineno-0-767 name=__codelineno-0-767></a> <span class=bp>self</span><span class=o>.</span><span class=n>get_response</span> <span class=o>=</span> <span class=n>get_response</span>
<a id=__codelineno-0-768 name=__codelineno-0-768></a>
<a id=__codelineno-0-769 name=__codelineno-0-769></a> <span class=c1># NOTE: Required to work with async</span>
<a id=__codelineno-0-770 name=__codelineno-0-770></a> <span class=k>if</span> <span class=n>iscoroutinefunction</span><span class=p>(</span><span class=bp>self</span><span class=o>.</span><span class=n>get_response</span><span class=p>):</span>
<a id=__codelineno-0-771 name=__codelineno-0-771></a> <span class=n>markcoroutinefunction</span><span class=p>(</span><span class=bp>self</span><span class=p>)</span>
</code></pre></div></td></tr></table></div> </details> <div class="doc doc-children"> </div> </div> </div> </div> </div> </div> <div class="doc doc-object doc-module"> <h2 id=django_components.node class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-module"></code> <span class="doc doc-object-name doc-module-name">node</span> <a href=#django_components.node class=headerlink title="Permanent link">¤</a></h2> <div class="doc doc-contents "> <p><span class=doc-section-title>Classes:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.node.BaseNode href=#django_components.node.BaseNode>BaseNode</a></code></b> <div class=doc-md-description> <p>Shared behavior for our subclasses of Django's <code>Node</code></p> </div> </li> </ul> <div class="doc doc-children"> <div class="doc doc-object doc-class"> <h3 id=django_components.node.BaseNode class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-class"></code> <span class="doc doc-object-name doc-class-name">BaseNode</span> <a href=#django_components.node.BaseNode class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>BaseNode</span><span class=p>(</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a> <span class=n>nodelist</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><span title=django.template.base.NodeList>NodeList</span></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a> <span class=n>node_id</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a> <span class=n>args</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.List href=https://docs.python.org/3.12/library/typing.html#typing.List>List</a></span><span class=p>[</span><span class=n><span title=django_components.expression.Expression>Expression</span></span><span class=p>]]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a> <span class=n>kwargs</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><span title=django_components.expression.RuntimeKwargs>RuntimeKwargs</span></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-6 name=__codelineno-0-6 href=#__codelineno-0-6></a><span class=p>)</span>
</code></pre></div> <div class="doc doc-contents "> <p class="doc doc-class-bases"> Bases: <code><span title=django.template.base.Node>Node</span></code></p> <p>Shared behavior for our subclasses of Django's <code>Node</code></p> <details class=quote> <summary>Source code in <code>src/django_components/node.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-12>12</a></span>
<span class=normal><a href=#__codelineno-0-13>13</a></span>
<span class=normal><a href=#__codelineno-0-14>14</a></span>
<span class=normal><a href=#__codelineno-0-15>15</a></span>
<span class=normal><a href=#__codelineno-0-16>16</a></span>
<span class=normal><a href=#__codelineno-0-17>17</a></span>
<span class=normal><a href=#__codelineno-0-18>18</a></span>
<span class=normal><a href=#__codelineno-0-19>19</a></span>
<span class=normal><a href=#__codelineno-0-20>20</a></span>
<span class=normal><a href=#__codelineno-0-21>21</a></span>
<span class=normal><a href=#__codelineno-0-22>22</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-12 name=__codelineno-0-12></a><span class=k>def</span> <span class=fm>__init__</span><span class=p>(</span>
<a id=__codelineno-0-13 name=__codelineno-0-13></a> <span class=bp>self</span><span class=p>,</span>
<a id=__codelineno-0-14 name=__codelineno-0-14></a> <span class=n>nodelist</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>NodeList</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-15 name=__codelineno-0-15></a> <span class=n>node_id</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=nb>str</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-16 name=__codelineno-0-16></a> <span class=n>args</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>List</span><span class=p>[</span><span class=n>Expression</span><span class=p>]]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-17 name=__codelineno-0-17></a> <span class=n>kwargs</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>RuntimeKwargs</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-18 name=__codelineno-0-18></a><span class=p>):</span>
<a id=__codelineno-0-19 name=__codelineno-0-19></a> <span class=bp>self</span><span class=o>.</span><span class=n>nodelist</span> <span class=o>=</span> <span class=n>nodelist</span> <span class=ow>or</span> <span class=n>NodeList</span><span class=p>()</span>
<a id=__codelineno-0-20 name=__codelineno-0-20></a> <span class=bp>self</span><span class=o>.</span><span class=n>node_id</span> <span class=o>=</span> <span class=n>node_id</span> <span class=ow>or</span> <span class=n>gen_id</span><span class=p>()</span>
<a id=__codelineno-0-21 name=__codelineno-0-21></a> <span class=bp>self</span><span class=o>.</span><span class=n>args</span> <span class=o>=</span> <span class=n>args</span> <span class=ow>or</span> <span class=p>[]</span>
<a id=__codelineno-0-22 name=__codelineno-0-22></a> <span class=bp>self</span><span class=o>.</span><span class=n>kwargs</span> <span class=o>=</span> <span class=n>kwargs</span> <span class=ow>or</span> <span class=n>RuntimeKwargs</span><span class=p>({})</span>
</code></pre></div></td></tr></table></div> </details> <div class="doc doc-children"> </div> </div> </div> </div> </div> </div> <div class="doc doc-object doc-module"> <h2 id=django_components.provide class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-module"></code> <span class="doc doc-object-name doc-module-name">provide</span> <a href=#django_components.provide class=headerlink title="Permanent link">¤</a></h2> <div class="doc doc-contents "> <p><span class=doc-section-title>Classes:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.provide.ProvideNode href=#django_components.provide.ProvideNode>ProvideNode</a></code></b> <div class=doc-md-description> <p>Implementation of the <code>{% provide %}</code> tag.</p> </div> </li> </ul> <div class="doc doc-children"> <div class="doc doc-object doc-class"> <h3 id=django_components.provide.ProvideNode class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-class"></code> <span class="doc doc-object-name doc-class-name">ProvideNode</span> <a href=#django_components.provide.ProvideNode class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>ProvideNode</span><span class=p>(</span><span class=n>nodelist</span><span class=p>:</span> <span class=n><span title=django.template.base.NodeList>NodeList</span></span><span class=p>,</span> <span class=n>trace_id</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span> <span class=n>node_id</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span> <span class=n>kwargs</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><span title=django_components.expression.RuntimeKwargs>RuntimeKwargs</span></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>)</span>
</code></pre></div> <div class="doc doc-contents "> <p class="doc doc-class-bases"> Bases: <code><a class="autorefs autorefs-internal" title=django_components.node.BaseNode href=#django_components.node.BaseNode>BaseNode</a></code></p> <p>Implementation of the <code>{% provide %}</code> tag. For more info see <code>Component.inject</code>.</p> <details class=quote> <summary>Source code in <code>src/django_components/provide.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-22>22</a></span>
<span class=normal><a href=#__codelineno-0-23>23</a></span>
<span class=normal><a href=#__codelineno-0-24>24</a></span>
<span class=normal><a href=#__codelineno-0-25>25</a></span>
<span class=normal><a href=#__codelineno-0-26>26</a></span>
<span class=normal><a href=#__codelineno-0-27>27</a></span>
<span class=normal><a href=#__codelineno-0-28>28</a></span>
<span class=normal><a href=#__codelineno-0-29>29</a></span>
<span class=normal><a href=#__codelineno-0-30>30</a></span>
<span class=normal><a href=#__codelineno-0-31>31</a></span>
<span class=normal><a href=#__codelineno-0-32>32</a></span>
<span class=normal><a href=#__codelineno-0-33>33</a></span>
<span class=normal><a href=#__codelineno-0-34>34</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-22 name=__codelineno-0-22></a><span class=k>def</span> <span class=fm>__init__</span><span class=p>(</span>
<a id=__codelineno-0-23 name=__codelineno-0-23></a> <span class=bp>self</span><span class=p>,</span>
<a id=__codelineno-0-24 name=__codelineno-0-24></a> <span class=n>nodelist</span><span class=p>:</span> <span class=n>NodeList</span><span class=p>,</span>
<a id=__codelineno-0-25 name=__codelineno-0-25></a> <span class=n>trace_id</span><span class=p>:</span> <span class=nb>str</span><span class=p>,</span>
<a id=__codelineno-0-26 name=__codelineno-0-26></a> <span class=n>node_id</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=nb>str</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-27 name=__codelineno-0-27></a> <span class=n>kwargs</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>RuntimeKwargs</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-28 name=__codelineno-0-28></a><span class=p>):</span>
<a id=__codelineno-0-29 name=__codelineno-0-29></a> <span class=nb>super</span><span class=p>()</span><span class=o>.</span><span class=fm>__init__</span><span class=p>(</span><span class=n>nodelist</span><span class=o>=</span><span class=n>nodelist</span><span class=p>,</span> <span class=n>args</span><span class=o>=</span><span class=kc>None</span><span class=p>,</span> <span class=n>kwargs</span><span class=o>=</span><span class=n>kwargs</span><span class=p>,</span> <span class=n>node_id</span><span class=o>=</span><span class=n>node_id</span><span class=p>)</span>
<a id=__codelineno-0-30 name=__codelineno-0-30></a>
<a id=__codelineno-0-31 name=__codelineno-0-31></a> <span class=bp>self</span><span class=o>.</span><span class=n>nodelist</span> <span class=o>=</span> <span class=n>nodelist</span>
<a id=__codelineno-0-32 name=__codelineno-0-32></a> <span class=bp>self</span><span class=o>.</span><span class=n>node_id</span> <span class=o>=</span> <span class=n>node_id</span> <span class=ow>or</span> <span class=n>gen_id</span><span class=p>()</span>
<a id=__codelineno-0-33 name=__codelineno-0-33></a> <span class=bp>self</span><span class=o>.</span><span class=n>trace_id</span> <span class=o>=</span> <span class=n>trace_id</span>
<a id=__codelineno-0-34 name=__codelineno-0-34></a> <span class=bp>self</span><span class=o>.</span><span class=n>kwargs</span> <span class=o>=</span> <span class=n>kwargs</span> <span class=ow>or</span> <span class=n>RuntimeKwargs</span><span class=p>({})</span>
</code></pre></div></td></tr></table></div> </details> <div class="doc doc-children"> </div> </div> </div> </div> </div> </div> <div class="doc doc-object doc-module"> <h2 id=django_components.slots class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-module"></code> <span class="doc doc-object-name doc-module-name">slots</span> <a href=#django_components.slots class=headerlink title="Permanent link">¤</a></h2> <div class="doc doc-contents "> <p><span class=doc-section-title>Classes:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.slots.FillNode href=#django_components.slots.FillNode>FillNode</a></code></b> <div class=doc-md-description> <p>Node corresponding to <code>{% fill %}</code></p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.slots.Slot href=#django_components.slots.Slot>Slot</a></code></b> <div class=doc-md-description> <p>This class holds the slot content function along with related metadata.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.slots.SlotFill href=#django_components.slots.SlotFill>SlotFill</a></code></b> <div class=doc-md-description> <p>SlotFill describes what WILL be rendered.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.slots.SlotIsFilled href=#django_components.slots.SlotIsFilled>SlotIsFilled</a></code></b> <div class=doc-md-description> <p>Dictionary that returns <code>True</code> if the slot is filled (key is found), <code>False</code> otherwise.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.slots.SlotNode href=#django_components.slots.SlotNode>SlotNode</a></code></b> <div class=doc-md-description> <p>Node corresponding to <code>{% slot %}</code></p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.slots.SlotRef href=#django_components.slots.SlotRef>SlotRef</a></code></b> <div class=doc-md-description> <p>SlotRef allows to treat a slot as a variable. The slot is rendered only once</p> </div> </li> </ul> <p><span class=doc-section-title>Functions:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.slots.resolve_fills href=#django_components.slots.resolve_fills>resolve_fills</a></code></b> <div class=doc-md-description> <p>Given a component body (<code>django.template.NodeList</code>), find all slot fills,</p> </div> </li> </ul> <div class="doc doc-children"> <div class="doc doc-object doc-class"> <h3 id=django_components.slots.FillNode class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-class"></code> <span class="doc doc-object-name doc-class-name">FillNode</span> <a href=#django_components.slots.FillNode class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>FillNode</span><span class=p>(</span><span class=n>nodelist</span><span class=p>:</span> <span class=n><span title=django.template.base.NodeList>NodeList</span></span><span class=p>,</span> <span class=n>kwargs</span><span class=p>:</span> <span class=n><span title=django_components.expression.RuntimeKwargs>RuntimeKwargs</span></span><span class=p>,</span> <span class=n>trace_id</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span> <span class=n>node_id</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>)</span>
</code></pre></div> <div class="doc doc-contents "> <p class="doc doc-class-bases"> Bases: <code><a class="autorefs autorefs-internal" title=django_components.node.BaseNode href=#django_components.node.BaseNode>BaseNode</a></code></p> <p>Node corresponding to <code>{% fill %}</code></p> <details class=quote> <summary>Source code in <code>src/django_components/slots.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-376>376</a></span>
<span class=normal><a href=#__codelineno-0-377>377</a></span>
<span class=normal><a href=#__codelineno-0-378>378</a></span>
<span class=normal><a href=#__codelineno-0-379>379</a></span>
<span class=normal><a href=#__codelineno-0-380>380</a></span>
<span class=normal><a href=#__codelineno-0-381>381</a></span>
<span class=normal><a href=#__codelineno-0-382>382</a></span>
<span class=normal><a href=#__codelineno-0-383>383</a></span>
<span class=normal><a href=#__codelineno-0-384>384</a></span>
<span class=normal><a href=#__codelineno-0-385>385</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-376 name=__codelineno-0-376></a><span class=k>def</span> <span class=fm>__init__</span><span class=p>(</span>
<a id=__codelineno-0-377 name=__codelineno-0-377></a> <span class=bp>self</span><span class=p>,</span>
<a id=__codelineno-0-378 name=__codelineno-0-378></a> <span class=n>nodelist</span><span class=p>:</span> <span class=n>NodeList</span><span class=p>,</span>
<a id=__codelineno-0-379 name=__codelineno-0-379></a> <span class=n>kwargs</span><span class=p>:</span> <span class=n>RuntimeKwargs</span><span class=p>,</span>
<a id=__codelineno-0-380 name=__codelineno-0-380></a> <span class=n>trace_id</span><span class=p>:</span> <span class=nb>str</span><span class=p>,</span>
<a id=__codelineno-0-381 name=__codelineno-0-381></a> <span class=n>node_id</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=nb>str</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-382 name=__codelineno-0-382></a><span class=p>):</span>
<a id=__codelineno-0-383 name=__codelineno-0-383></a> <span class=nb>super</span><span class=p>()</span><span class=o>.</span><span class=fm>__init__</span><span class=p>(</span><span class=n>nodelist</span><span class=o>=</span><span class=n>nodelist</span><span class=p>,</span> <span class=n>args</span><span class=o>=</span><span class=kc>None</span><span class=p>,</span> <span class=n>kwargs</span><span class=o>=</span><span class=n>kwargs</span><span class=p>,</span> <span class=n>node_id</span><span class=o>=</span><span class=n>node_id</span><span class=p>)</span>
<a id=__codelineno-0-384 name=__codelineno-0-384></a>
<a id=__codelineno-0-385 name=__codelineno-0-385></a> <span class=bp>self</span><span class=o>.</span><span class=n>trace_id</span> <span class=o>=</span> <span class=n>trace_id</span>
</code></pre></div></td></tr></table></div> </details> <div class="doc doc-children"> </div> </div> </div> <div class="doc doc-object doc-class"> <h3 id=django_components.slots.Slot class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-class"></code> <span class="doc doc-object-name doc-class-name">Slot</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-dataclass"><code>dataclass</code></small> </span> <a href=#django_components.slots.Slot class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>Slot</span><span class=p>(</span><span class=n>content_func</span><span class=p>:</span> <span class=n><span title=django_components.slots.SlotFunc>SlotFunc</span></span><span class=p>[</span><span class=n><span title=django_components.slots.TSlotData>TSlotData</span></span><span class=p>])</span>
</code></pre></div> <div class="doc doc-contents "> <p class="doc doc-class-bases"> Bases: <code><a class="autorefs autorefs-external" title=typing.Generic href=https://docs.python.org/3.12/library/typing.html#typing.Generic>Generic</a>[<span title=django_components.slots.TSlotData>TSlotData</span>]</code></p> <p>This class holds the slot content function along with related metadata.</p> <div class="doc doc-children"> </div> </div> </div> <div class="doc doc-object doc-class"> <h3 id=django_components.slots.SlotFill class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-class"></code> <span class="doc doc-object-name doc-class-name">SlotFill</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-dataclass"><code>dataclass</code></small> </span> <a href=#django_components.slots.SlotFill class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>SlotFill</span><span class=p>(</span><span class=n>name</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span> <span class=n>is_filled</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/functions.html#bool>bool</a></span><span class=p>,</span> <span class=n>slot</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-internal" title=django_components.slots.Slot href=#django_components.slots.Slot>Slot</a></span><span class=p>[</span><span class=n><span title=django_components.slots.TSlotData>TSlotData</span></span><span class=p>])</span>
</code></pre></div> <div class="doc doc-contents "> <p class="doc doc-class-bases"> Bases: <code><a class="autorefs autorefs-external" title=typing.Generic href=https://docs.python.org/3.12/library/typing.html#typing.Generic>Generic</a>[<span title=django_components.slots.TSlotData>TSlotData</span>]</code></p> <p>SlotFill describes what WILL be rendered.</p> <p>The fill may be provided by the user from the outside (<code>is_filled=True</code>), or it may be the default content of the slot (<code>is_filled=False</code>).</p> <p><span class=doc-section-title>Attributes:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.slots.SlotFill.name href=#django_components.slots.SlotFill.name>name</a></code></b> (<code><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></code>) <div class=doc-md-description> <p>Name of the slot.</p> </div> </li> </ul> <div class="doc doc-children"> <div class="doc doc-object doc-attribute"> <h4 id=django_components.slots.SlotFill.name class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">name</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.slots.SlotFill.name class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>name</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span>
</code></pre></div> <div class="doc doc-contents "> <p>Name of the slot.</p> </div> </div> </div> </div> </div> <div class="doc doc-object doc-class"> <h3 id=django_components.slots.SlotIsFilled class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-class"></code> <span class="doc doc-object-name doc-class-name">SlotIsFilled</span> <a href=#django_components.slots.SlotIsFilled class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>SlotIsFilled</span><span class=p>(</span><span class=n>fills</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Dict href=https://docs.python.org/3.12/library/typing.html#typing.Dict>Dict</a></span><span class=p>,</span> <span class=o>*</span><span class=n>args</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Any href=https://docs.python.org/3.12/library/typing.html#typing.Any>Any</a></span><span class=p>,</span> <span class=o>**</span><span class=n>kwargs</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Any href=https://docs.python.org/3.12/library/typing.html#typing.Any>Any</a></span><span class=p>)</span>
</code></pre></div> <div class="doc doc-contents "> <p class="doc doc-class-bases"> Bases: <code><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#dict>dict</a></code></p> <p>Dictionary that returns <code>True</code> if the slot is filled (key is found), <code>False</code> otherwise.</p> <details class=quote> <summary>Source code in <code>src/django_components/slots.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-135>135</a></span>
<span class=normal><a href=#__codelineno-0-136>136</a></span>
<span class=normal><a href=#__codelineno-0-137>137</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-135 name=__codelineno-0-135></a><span class=k>def</span> <span class=fm>__init__</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>fills</span><span class=p>:</span> <span class=n>Dict</span><span class=p>,</span> <span class=o>*</span><span class=n>args</span><span class=p>:</span> <span class=n>Any</span><span class=p>,</span> <span class=o>**</span><span class=n>kwargs</span><span class=p>:</span> <span class=n>Any</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=kc>None</span><span class=p>:</span>
<a id=__codelineno-0-136 name=__codelineno-0-136></a> <span class=n>escaped_fill_names</span> <span class=o>=</span> <span class=p>{</span><span class=n>_escape_slot_name</span><span class=p>(</span><span class=n>fill_name</span><span class=p>):</span> <span class=kc>True</span> <span class=k>for</span> <span class=n>fill_name</span> <span class=ow>in</span> <span class=n>fills</span><span class=o>.</span><span class=n>keys</span><span class=p>()}</span>
<a id=__codelineno-0-137 name=__codelineno-0-137></a> <span class=nb>super</span><span class=p>()</span><span class=o>.</span><span class=fm>__init__</span><span class=p>(</span><span class=n>escaped_fill_names</span><span class=p>,</span> <span class=o>*</span><span class=n>args</span><span class=p>,</span> <span class=o>**</span><span class=n>kwargs</span><span class=p>)</span>
</code></pre></div></td></tr></table></div> </details> <div class="doc doc-children"> </div> </div> </div> <div class="doc doc-object doc-class"> <h3 id=django_components.slots.SlotNode class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-class"></code> <span class="doc doc-object-name doc-class-name">SlotNode</span> <a href=#django_components.slots.SlotNode class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>SlotNode</span><span class=p>(</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a> <span class=n>nodelist</span><span class=p>:</span> <span class=n><span title=django.template.base.NodeList>NodeList</span></span><span class=p>,</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a> <span class=n>trace_id</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a> <span class=n>node_id</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a> <span class=n>kwargs</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><span title=django_components.expression.RuntimeKwargs>RuntimeKwargs</span></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-6 name=__codelineno-0-6 href=#__codelineno-0-6></a> <span class=n>is_required</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/functions.html#bool>bool</a></span> <span class=o>=</span> <span class=kc>False</span><span class=p>,</span>
<a id=__codelineno-0-7 name=__codelineno-0-7 href=#__codelineno-0-7></a> <span class=n>is_default</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/functions.html#bool>bool</a></span> <span class=o>=</span> <span class=kc>False</span><span class=p>,</span>
<a id=__codelineno-0-8 name=__codelineno-0-8 href=#__codelineno-0-8></a><span class=p>)</span>
</code></pre></div> <div class="doc doc-contents "> <p class="doc doc-class-bases"> Bases: <code><a class="autorefs autorefs-internal" title=django_components.node.BaseNode href=#django_components.node.BaseNode>BaseNode</a></code></p> <p>Node corresponding to <code>{% slot %}</code></p> <details class=quote> <summary>Source code in <code>src/django_components/slots.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-155>155</a></span>
<span class=normal><a href=#__codelineno-0-156>156</a></span>
<span class=normal><a href=#__codelineno-0-157>157</a></span>
<span class=normal><a href=#__codelineno-0-158>158</a></span>
<span class=normal><a href=#__codelineno-0-159>159</a></span>
<span class=normal><a href=#__codelineno-0-160>160</a></span>
<span class=normal><a href=#__codelineno-0-161>161</a></span>
<span class=normal><a href=#__codelineno-0-162>162</a></span>
<span class=normal><a href=#__codelineno-0-163>163</a></span>
<span class=normal><a href=#__codelineno-0-164>164</a></span>
<span class=normal><a href=#__codelineno-0-165>165</a></span>
<span class=normal><a href=#__codelineno-0-166>166</a></span>
<span class=normal><a href=#__codelineno-0-167>167</a></span>
<span class=normal><a href=#__codelineno-0-168>168</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-155 name=__codelineno-0-155></a><span class=k>def</span> <span class=fm>__init__</span><span class=p>(</span>
<a id=__codelineno-0-156 name=__codelineno-0-156></a> <span class=bp>self</span><span class=p>,</span>
<a id=__codelineno-0-157 name=__codelineno-0-157></a> <span class=n>nodelist</span><span class=p>:</span> <span class=n>NodeList</span><span class=p>,</span>
<a id=__codelineno-0-158 name=__codelineno-0-158></a> <span class=n>trace_id</span><span class=p>:</span> <span class=nb>str</span><span class=p>,</span>
<a id=__codelineno-0-159 name=__codelineno-0-159></a> <span class=n>node_id</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=nb>str</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-160 name=__codelineno-0-160></a> <span class=n>kwargs</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>RuntimeKwargs</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-161 name=__codelineno-0-161></a> <span class=n>is_required</span><span class=p>:</span> <span class=nb>bool</span> <span class=o>=</span> <span class=kc>False</span><span class=p>,</span>
<a id=__codelineno-0-162 name=__codelineno-0-162></a> <span class=n>is_default</span><span class=p>:</span> <span class=nb>bool</span> <span class=o>=</span> <span class=kc>False</span><span class=p>,</span>
<a id=__codelineno-0-163 name=__codelineno-0-163></a><span class=p>):</span>
<a id=__codelineno-0-164 name=__codelineno-0-164></a> <span class=nb>super</span><span class=p>()</span><span class=o>.</span><span class=fm>__init__</span><span class=p>(</span><span class=n>nodelist</span><span class=o>=</span><span class=n>nodelist</span><span class=p>,</span> <span class=n>args</span><span class=o>=</span><span class=kc>None</span><span class=p>,</span> <span class=n>kwargs</span><span class=o>=</span><span class=n>kwargs</span><span class=p>,</span> <span class=n>node_id</span><span class=o>=</span><span class=n>node_id</span><span class=p>)</span>
<a id=__codelineno-0-165 name=__codelineno-0-165></a>
<a id=__codelineno-0-166 name=__codelineno-0-166></a> <span class=bp>self</span><span class=o>.</span><span class=n>is_required</span> <span class=o>=</span> <span class=n>is_required</span>
<a id=__codelineno-0-167 name=__codelineno-0-167></a> <span class=bp>self</span><span class=o>.</span><span class=n>is_default</span> <span class=o>=</span> <span class=n>is_default</span>
<a id=__codelineno-0-168 name=__codelineno-0-168></a> <span class=bp>self</span><span class=o>.</span><span class=n>trace_id</span> <span class=o>=</span> <span class=n>trace_id</span>
</code></pre></div></td></tr></table></div> </details> <div class="doc doc-children"> </div> </div> </div> <div class="doc doc-object doc-class"> <h3 id=django_components.slots.SlotRef class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-class"></code> <span class="doc doc-object-name doc-class-name">SlotRef</span> <a href=#django_components.slots.SlotRef class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>SlotRef</span><span class=p>(</span><span class=n>slot</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-internal" title=django_components.slots.SlotNode href=#django_components.slots.SlotNode>SlotNode</a></span><span class=p>,</span> <span class=n>context</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=django.template.Context href=https://docs.djangoproject.com/en/5.0/ref/templates/api/#django.template.Context>Context</a></span><span class=p>)</span>
</code></pre></div> <div class="doc doc-contents "> <p>SlotRef allows to treat a slot as a variable. The slot is rendered only once the instance is coerced to string.</p> <p>This is used to access slots as variables inside the templates. When a SlotRef is rendered in the template with <code>{{ my_lazy_slot }}</code>, it will output the contents of the slot.</p> <details class=quote> <summary>Source code in <code>src/django_components/slots.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-121>121</a></span>
<span class=normal><a href=#__codelineno-0-122>122</a></span>
<span class=normal><a href=#__codelineno-0-123>123</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-121 name=__codelineno-0-121></a><span class=k>def</span> <span class=fm>__init__</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>slot</span><span class=p>:</span> <span class=s2>&quot;SlotNode&quot;</span><span class=p>,</span> <span class=n>context</span><span class=p>:</span> <span class=n>Context</span><span class=p>):</span>
<a id=__codelineno-0-122 name=__codelineno-0-122></a> <span class=bp>self</span><span class=o>.</span><span class=n>_slot</span> <span class=o>=</span> <span class=n>slot</span>
<a id=__codelineno-0-123 name=__codelineno-0-123></a> <span class=bp>self</span><span class=o>.</span><span class=n>_context</span> <span class=o>=</span> <span class=n>context</span>
</code></pre></div></td></tr></table></div> </details> <div class="doc doc-children"> </div> </div> </div> <div class="doc doc-object doc-function"> <h3 id=django_components.slots.resolve_fills class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-function"></code> <span class="doc doc-object-name doc-function-name">resolve_fills</span> <a href=#django_components.slots.resolve_fills class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>resolve_fills</span><span class=p>(</span><span class=n>context</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=django.template.Context href=https://docs.djangoproject.com/en/5.0/ref/templates/api/#django.template.Context>Context</a></span><span class=p>,</span> <span class=n>nodelist</span><span class=p>:</span> <span class=n><span title=django.template.base.NodeList>NodeList</span></span><span class=p>,</span> <span class=n>component_name</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-external" title=typing.Dict href=https://docs.python.org/3.12/library/typing.html#typing.Dict>Dict</a></span><span class=p>[</span><span class=n><span title=django_components.slots.SlotName>SlotName</span></span><span class=p>,</span> <span class=n><a class="autorefs autorefs-internal" title=django_components.slots.Slot href=#django_components.slots.Slot>Slot</a></span><span class=p>]</span>
</code></pre></div> <div class="doc doc-contents "> <p>Given a component body (<code>django.template.NodeList</code>), find all slot fills, whether defined explicitly with <code>{% fill %}</code> or implicitly.</p> <p>So if we have a component body: <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=cp>{%</span> <span class=k>component</span> <span class=s2>&quot;mycomponent&quot;</span> <span class=cp>%}</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a><span class=x> </span><span class=cp>{%</span> <span class=k>fill</span> <span class=s2>&quot;first_fill&quot;</span> <span class=cp>%}</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=x> Hello!</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a><span class=x> </span><span class=cp>{%</span> <span class=k>endfill</span> <span class=cp>%}</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a><span class=x> </span><span class=cp>{%</span> <span class=k>fill</span> <span class=s2>&quot;second_fill&quot;</span> <span class=cp>%}</span>
<a id=__codelineno-0-6 name=__codelineno-0-6 href=#__codelineno-0-6></a><span class=x> Hello too!</span>
<a id=__codelineno-0-7 name=__codelineno-0-7 href=#__codelineno-0-7></a><span class=x> </span><span class=cp>{%</span> <span class=k>endfill</span> <span class=cp>%}</span>
<a id=__codelineno-0-8 name=__codelineno-0-8 href=#__codelineno-0-8></a><span class=cp>{%</span> <span class=k>endcomponent</span> <span class=cp>%}</span>
</code></pre></div></p> <p>Then this function finds 2 fill nodes: "first_fill" and "second_fill", and formats them as slot functions, returning:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-1-1 name=__codelineno-1-1 href=#__codelineno-1-1></a><span class=p>{</span>
<a id=__codelineno-1-2 name=__codelineno-1-2 href=#__codelineno-1-2></a> <span class=s2>&quot;first_fill&quot;</span><span class=p>:</span> <span class=n>SlotFunc</span><span class=p>(</span><span class=o>...</span><span class=p>),</span>
<a id=__codelineno-1-3 name=__codelineno-1-3 href=#__codelineno-1-3></a> <span class=s2>&quot;second_fill&quot;</span><span class=p>:</span> <span class=n>SlotFunc</span><span class=p>(</span><span class=o>...</span><span class=p>),</span>
<a id=__codelineno-1-4 name=__codelineno-1-4 href=#__codelineno-1-4></a><span class=p>}</span>
</code></pre></div> <p>If no fill nodes are found, then the content is treated as default slot content.</p> <div class=highlight><pre><span></span><code><a id=__codelineno-2-1 name=__codelineno-2-1 href=#__codelineno-2-1></a><span class=p>{</span>
<a id=__codelineno-2-2 name=__codelineno-2-2 href=#__codelineno-2-2></a> <span class=n>DEFAULT_SLOT_KEY</span><span class=p>:</span> <span class=n>SlotFunc</span><span class=p>(</span><span class=o>...</span><span class=p>),</span>
<a id=__codelineno-2-3 name=__codelineno-2-3 href=#__codelineno-2-3></a><span class=p>}</span>
</code></pre></div> <p>This function also handles for-loops, if/else statements, or include tags to generate fill tags:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-3-1 name=__codelineno-3-1 href=#__codelineno-3-1></a><span class=cp>{%</span> <span class=k>component</span> <span class=s2>&quot;mycomponent&quot;</span> <span class=cp>%}</span>
<a id=__codelineno-3-2 name=__codelineno-3-2 href=#__codelineno-3-2></a><span class=x> </span><span class=cp>{%</span> <span class=k>for</span> <span class=nv>slot_name</span> <span class=k>in</span> <span class=nv>slots</span> <span class=cp>%}</span>
<a id=__codelineno-3-3 name=__codelineno-3-3 href=#__codelineno-3-3></a><span class=x> </span><span class=cp>{%</span> <span class=k>fill</span> <span class=nv>name</span><span class=o>=</span><span class=nv>slot_name</span> <span class=cp>%}</span>
<a id=__codelineno-3-4 name=__codelineno-3-4 href=#__codelineno-3-4></a><span class=x> </span><span class=cp>{%</span> <span class=k>slot</span> <span class=nv>name</span><span class=o>=</span><span class=nv>slot_name</span> <span class=o>/</span> <span class=cp>%}</span>
<a id=__codelineno-3-5 name=__codelineno-3-5 href=#__codelineno-3-5></a><span class=x> </span><span class=cp>{%</span> <span class=k>endfill</span> <span class=cp>%}</span>
<a id=__codelineno-3-6 name=__codelineno-3-6 href=#__codelineno-3-6></a><span class=x> </span><span class=cp>{%</span> <span class=k>endfor</span> <span class=cp>%}</span>
<a id=__codelineno-3-7 name=__codelineno-3-7 href=#__codelineno-3-7></a><span class=cp>{%</span> <span class=k>endcomponent</span> <span class=cp>%}</span>
</code></pre></div> <details class=quote> <summary>Source code in <code>src/django_components/slots.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-535>535</a></span>
<span class=normal><a href=#__codelineno-0-536>536</a></span>
<span class=normal><a href=#__codelineno-0-537>537</a></span>
<span class=normal><a href=#__codelineno-0-538>538</a></span>
<span class=normal><a href=#__codelineno-0-539>539</a></span>
<span class=normal><a href=#__codelineno-0-540>540</a></span>
<span class=normal><a href=#__codelineno-0-541>541</a></span>
<span class=normal><a href=#__codelineno-0-542>542</a></span>
<span class=normal><a href=#__codelineno-0-543>543</a></span>
<span class=normal><a href=#__codelineno-0-544>544</a></span>
<span class=normal><a href=#__codelineno-0-545>545</a></span>
<span class=normal><a href=#__codelineno-0-546>546</a></span>
<span class=normal><a href=#__codelineno-0-547>547</a></span>
<span class=normal><a href=#__codelineno-0-548>548</a></span>
<span class=normal><a href=#__codelineno-0-549>549</a></span>
<span class=normal><a href=#__codelineno-0-550>550</a></span>
<span class=normal><a href=#__codelineno-0-551>551</a></span>
<span class=normal><a href=#__codelineno-0-552>552</a></span>
<span class=normal><a href=#__codelineno-0-553>553</a></span>
<span class=normal><a href=#__codelineno-0-554>554</a></span>
<span class=normal><a href=#__codelineno-0-555>555</a></span>
<span class=normal><a href=#__codelineno-0-556>556</a></span>
<span class=normal><a href=#__codelineno-0-557>557</a></span>
<span class=normal><a href=#__codelineno-0-558>558</a></span>
<span class=normal><a href=#__codelineno-0-559>559</a></span>
<span class=normal><a href=#__codelineno-0-560>560</a></span>
<span class=normal><a href=#__codelineno-0-561>561</a></span>
<span class=normal><a href=#__codelineno-0-562>562</a></span>
<span class=normal><a href=#__codelineno-0-563>563</a></span>
<span class=normal><a href=#__codelineno-0-564>564</a></span>
<span class=normal><a href=#__codelineno-0-565>565</a></span>
<span class=normal><a href=#__codelineno-0-566>566</a></span>
<span class=normal><a href=#__codelineno-0-567>567</a></span>
<span class=normal><a href=#__codelineno-0-568>568</a></span>
<span class=normal><a href=#__codelineno-0-569>569</a></span>
<span class=normal><a href=#__codelineno-0-570>570</a></span>
<span class=normal><a href=#__codelineno-0-571>571</a></span>
<span class=normal><a href=#__codelineno-0-572>572</a></span>
<span class=normal><a href=#__codelineno-0-573>573</a></span>
<span class=normal><a href=#__codelineno-0-574>574</a></span>
<span class=normal><a href=#__codelineno-0-575>575</a></span>
<span class=normal><a href=#__codelineno-0-576>576</a></span>
<span class=normal><a href=#__codelineno-0-577>577</a></span>
<span class=normal><a href=#__codelineno-0-578>578</a></span>
<span class=normal><a href=#__codelineno-0-579>579</a></span>
<span class=normal><a href=#__codelineno-0-580>580</a></span>
<span class=normal><a href=#__codelineno-0-581>581</a></span>
<span class=normal><a href=#__codelineno-0-582>582</a></span>
<span class=normal><a href=#__codelineno-0-583>583</a></span>
<span class=normal><a href=#__codelineno-0-584>584</a></span>
<span class=normal><a href=#__codelineno-0-585>585</a></span>
<span class=normal><a href=#__codelineno-0-586>586</a></span>
<span class=normal><a href=#__codelineno-0-587>587</a></span>
<span class=normal><a href=#__codelineno-0-588>588</a></span>
<span class=normal><a href=#__codelineno-0-589>589</a></span>
<span class=normal><a href=#__codelineno-0-590>590</a></span>
<span class=normal><a href=#__codelineno-0-591>591</a></span>
<span class=normal><a href=#__codelineno-0-592>592</a></span>
<span class=normal><a href=#__codelineno-0-593>593</a></span>
<span class=normal><a href=#__codelineno-0-594>594</a></span>
<span class=normal><a href=#__codelineno-0-595>595</a></span>
<span class=normal><a href=#__codelineno-0-596>596</a></span>
<span class=normal><a href=#__codelineno-0-597>597</a></span>
<span class=normal><a href=#__codelineno-0-598>598</a></span>
<span class=normal><a href=#__codelineno-0-599>599</a></span>
<span class=normal><a href=#__codelineno-0-600>600</a></span>
<span class=normal><a href=#__codelineno-0-601>601</a></span>
<span class=normal><a href=#__codelineno-0-602>602</a></span>
<span class=normal><a href=#__codelineno-0-603>603</a></span>
<span class=normal><a href=#__codelineno-0-604>604</a></span>
<span class=normal><a href=#__codelineno-0-605>605</a></span>
<span class=normal><a href=#__codelineno-0-606>606</a></span>
<span class=normal><a href=#__codelineno-0-607>607</a></span>
<span class=normal><a href=#__codelineno-0-608>608</a></span>
<span class=normal><a href=#__codelineno-0-609>609</a></span>
<span class=normal><a href=#__codelineno-0-610>610</a></span>
<span class=normal><a href=#__codelineno-0-611>611</a></span>
<span class=normal><a href=#__codelineno-0-612>612</a></span>
<span class=normal><a href=#__codelineno-0-613>613</a></span>
<span class=normal><a href=#__codelineno-0-614>614</a></span>
<span class=normal><a href=#__codelineno-0-615>615</a></span>
<span class=normal><a href=#__codelineno-0-616>616</a></span>
<span class=normal><a href=#__codelineno-0-617>617</a></span>
<span class=normal><a href=#__codelineno-0-618>618</a></span>
<span class=normal><a href=#__codelineno-0-619>619</a></span>
<span class=normal><a href=#__codelineno-0-620>620</a></span>
<span class=normal><a href=#__codelineno-0-621>621</a></span>
<span class=normal><a href=#__codelineno-0-622>622</a></span>
<span class=normal><a href=#__codelineno-0-623>623</a></span>
<span class=normal><a href=#__codelineno-0-624>624</a></span>
<span class=normal><a href=#__codelineno-0-625>625</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-535 name=__codelineno-0-535></a><span class=k>def</span> <span class=nf>resolve_fills</span><span class=p>(</span>
<a id=__codelineno-0-536 name=__codelineno-0-536></a> <span class=n>context</span><span class=p>:</span> <span class=n>Context</span><span class=p>,</span>
<a id=__codelineno-0-537 name=__codelineno-0-537></a> <span class=n>nodelist</span><span class=p>:</span> <span class=n>NodeList</span><span class=p>,</span>
<a id=__codelineno-0-538 name=__codelineno-0-538></a> <span class=n>component_name</span><span class=p>:</span> <span class=nb>str</span><span class=p>,</span>
<a id=__codelineno-0-539 name=__codelineno-0-539></a><span class=p>)</span> <span class=o>-&gt;</span> <span class=n>Dict</span><span class=p>[</span><span class=n>SlotName</span><span class=p>,</span> <span class=n>Slot</span><span class=p>]:</span>
<a id=__codelineno-0-540 name=__codelineno-0-540></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-541 name=__codelineno-0-541></a><span class=sd> Given a component body (`django.template.NodeList`), find all slot fills,</span>
<a id=__codelineno-0-542 name=__codelineno-0-542></a><span class=sd> whether defined explicitly with `{% fill %}` or implicitly.</span>
<a id=__codelineno-0-543 name=__codelineno-0-543></a>
<a id=__codelineno-0-544 name=__codelineno-0-544></a><span class=sd> So if we have a component body:</span>
<a id=__codelineno-0-545 name=__codelineno-0-545></a><span class=sd> ```django</span>
<a id=__codelineno-0-546 name=__codelineno-0-546></a><span class=sd> {% component &quot;mycomponent&quot; %}</span>
<a id=__codelineno-0-547 name=__codelineno-0-547></a><span class=sd> {% fill &quot;first_fill&quot; %}</span>
<a id=__codelineno-0-548 name=__codelineno-0-548></a><span class=sd> Hello!</span>
<a id=__codelineno-0-549 name=__codelineno-0-549></a><span class=sd> {% endfill %}</span>
<a id=__codelineno-0-550 name=__codelineno-0-550></a><span class=sd> {% fill &quot;second_fill&quot; %}</span>
<a id=__codelineno-0-551 name=__codelineno-0-551></a><span class=sd> Hello too!</span>
<a id=__codelineno-0-552 name=__codelineno-0-552></a><span class=sd> {% endfill %}</span>
<a id=__codelineno-0-553 name=__codelineno-0-553></a><span class=sd> {% endcomponent %}</span>
<a id=__codelineno-0-554 name=__codelineno-0-554></a><span class=sd> ```</span>
<a id=__codelineno-0-555 name=__codelineno-0-555></a>
<a id=__codelineno-0-556 name=__codelineno-0-556></a><span class=sd> Then this function finds 2 fill nodes: &quot;first_fill&quot; and &quot;second_fill&quot;,</span>
<a id=__codelineno-0-557 name=__codelineno-0-557></a><span class=sd> and formats them as slot functions, returning:</span>
<a id=__codelineno-0-558 name=__codelineno-0-558></a>
<a id=__codelineno-0-559 name=__codelineno-0-559></a><span class=sd> ```python</span>
<a id=__codelineno-0-560 name=__codelineno-0-560></a><span class=sd> {</span>
<a id=__codelineno-0-561 name=__codelineno-0-561></a><span class=sd> &quot;first_fill&quot;: SlotFunc(...),</span>
<a id=__codelineno-0-562 name=__codelineno-0-562></a><span class=sd> &quot;second_fill&quot;: SlotFunc(...),</span>
<a id=__codelineno-0-563 name=__codelineno-0-563></a><span class=sd> }</span>
<a id=__codelineno-0-564 name=__codelineno-0-564></a><span class=sd> ```</span>
<a id=__codelineno-0-565 name=__codelineno-0-565></a>
<a id=__codelineno-0-566 name=__codelineno-0-566></a><span class=sd> If no fill nodes are found, then the content is treated as default slot content.</span>
<a id=__codelineno-0-567 name=__codelineno-0-567></a>
<a id=__codelineno-0-568 name=__codelineno-0-568></a><span class=sd> ```python</span>
<a id=__codelineno-0-569 name=__codelineno-0-569></a><span class=sd> {</span>
<a id=__codelineno-0-570 name=__codelineno-0-570></a><span class=sd> DEFAULT_SLOT_KEY: SlotFunc(...),</span>
<a id=__codelineno-0-571 name=__codelineno-0-571></a><span class=sd> }</span>
<a id=__codelineno-0-572 name=__codelineno-0-572></a><span class=sd> ```</span>
<a id=__codelineno-0-573 name=__codelineno-0-573></a>
<a id=__codelineno-0-574 name=__codelineno-0-574></a><span class=sd> This function also handles for-loops, if/else statements, or include tags to generate fill tags:</span>
<a id=__codelineno-0-575 name=__codelineno-0-575></a>
<a id=__codelineno-0-576 name=__codelineno-0-576></a><span class=sd> ```django</span>
<a id=__codelineno-0-577 name=__codelineno-0-577></a><span class=sd> {% component &quot;mycomponent&quot; %}</span>
<a id=__codelineno-0-578 name=__codelineno-0-578></a><span class=sd> {% for slot_name in slots %}</span>
<a id=__codelineno-0-579 name=__codelineno-0-579></a><span class=sd> {% fill name=slot_name %}</span>
<a id=__codelineno-0-580 name=__codelineno-0-580></a><span class=sd> {% slot name=slot_name / %}</span>
<a id=__codelineno-0-581 name=__codelineno-0-581></a><span class=sd> {% endfill %}</span>
<a id=__codelineno-0-582 name=__codelineno-0-582></a><span class=sd> {% endfor %}</span>
<a id=__codelineno-0-583 name=__codelineno-0-583></a><span class=sd> {% endcomponent %}</span>
<a id=__codelineno-0-584 name=__codelineno-0-584></a><span class=sd> ```</span>
<a id=__codelineno-0-585 name=__codelineno-0-585></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-586 name=__codelineno-0-586></a> <span class=n>slots</span><span class=p>:</span> <span class=n>Dict</span><span class=p>[</span><span class=n>SlotName</span><span class=p>,</span> <span class=n>Slot</span><span class=p>]</span> <span class=o>=</span> <span class=p>{}</span>
<a id=__codelineno-0-587 name=__codelineno-0-587></a>
<a id=__codelineno-0-588 name=__codelineno-0-588></a> <span class=k>if</span> <span class=ow>not</span> <span class=n>nodelist</span><span class=p>:</span>
<a id=__codelineno-0-589 name=__codelineno-0-589></a> <span class=k>return</span> <span class=n>slots</span>
<a id=__codelineno-0-590 name=__codelineno-0-590></a>
<a id=__codelineno-0-591 name=__codelineno-0-591></a> <span class=n>maybe_fills</span> <span class=o>=</span> <span class=n>_extract_fill_content</span><span class=p>(</span><span class=n>nodelist</span><span class=p>,</span> <span class=n>context</span><span class=p>,</span> <span class=n>component_name</span><span class=p>)</span>
<a id=__codelineno-0-592 name=__codelineno-0-592></a>
<a id=__codelineno-0-593 name=__codelineno-0-593></a> <span class=c1># The content has no fills, so treat it as default slot, e.g.:</span>
<a id=__codelineno-0-594 name=__codelineno-0-594></a> <span class=c1># {% component &quot;mycomponent&quot; %}</span>
<a id=__codelineno-0-595 name=__codelineno-0-595></a> <span class=c1># Hello!</span>
<a id=__codelineno-0-596 name=__codelineno-0-596></a> <span class=c1># {% if True %} 123 {% endif %}</span>
<a id=__codelineno-0-597 name=__codelineno-0-597></a> <span class=c1># {% endcomponent %}</span>
<a id=__codelineno-0-598 name=__codelineno-0-598></a> <span class=k>if</span> <span class=n>maybe_fills</span> <span class=ow>is</span> <span class=kc>False</span><span class=p>:</span>
<a id=__codelineno-0-599 name=__codelineno-0-599></a> <span class=c1># Ignore empty content between `{% component %} ... {% endcomponent %}` tags</span>
<a id=__codelineno-0-600 name=__codelineno-0-600></a> <span class=n>nodelist_is_empty</span> <span class=o>=</span> <span class=ow>not</span> <span class=nb>len</span><span class=p>(</span><span class=n>nodelist</span><span class=p>)</span> <span class=ow>or</span> <span class=nb>all</span><span class=p>(</span>
<a id=__codelineno-0-601 name=__codelineno-0-601></a> <span class=nb>isinstance</span><span class=p>(</span><span class=n>node</span><span class=p>,</span> <span class=n>TextNode</span><span class=p>)</span> <span class=ow>and</span> <span class=ow>not</span> <span class=n>node</span><span class=o>.</span><span class=n>s</span><span class=o>.</span><span class=n>strip</span><span class=p>()</span> <span class=k>for</span> <span class=n>node</span> <span class=ow>in</span> <span class=n>nodelist</span>
<a id=__codelineno-0-602 name=__codelineno-0-602></a> <span class=p>)</span>
<a id=__codelineno-0-603 name=__codelineno-0-603></a>
<a id=__codelineno-0-604 name=__codelineno-0-604></a> <span class=k>if</span> <span class=ow>not</span> <span class=n>nodelist_is_empty</span><span class=p>:</span>
<a id=__codelineno-0-605 name=__codelineno-0-605></a> <span class=n>slots</span><span class=p>[</span><span class=n>DEFAULT_SLOT_KEY</span><span class=p>]</span> <span class=o>=</span> <span class=n>_nodelist_to_slot_render_func</span><span class=p>(</span>
<a id=__codelineno-0-606 name=__codelineno-0-606></a> <span class=n>DEFAULT_SLOT_KEY</span><span class=p>,</span>
<a id=__codelineno-0-607 name=__codelineno-0-607></a> <span class=n>nodelist</span><span class=p>,</span>
<a id=__codelineno-0-608 name=__codelineno-0-608></a> <span class=n>data_var</span><span class=o>=</span><span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-609 name=__codelineno-0-609></a> <span class=n>default_var</span><span class=o>=</span><span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-610 name=__codelineno-0-610></a> <span class=p>)</span>
<a id=__codelineno-0-611 name=__codelineno-0-611></a>
<a id=__codelineno-0-612 name=__codelineno-0-612></a> <span class=c1># The content has fills</span>
<a id=__codelineno-0-613 name=__codelineno-0-613></a> <span class=k>else</span><span class=p>:</span>
<a id=__codelineno-0-614 name=__codelineno-0-614></a> <span class=c1># NOTE: If slot fills are explicitly defined, we use them even if they are empty (or only whitespace).</span>
<a id=__codelineno-0-615 name=__codelineno-0-615></a> <span class=c1># This is different from the default slot, where we ignore empty content.</span>
<a id=__codelineno-0-616 name=__codelineno-0-616></a> <span class=k>for</span> <span class=n>fill</span> <span class=ow>in</span> <span class=n>maybe_fills</span><span class=p>:</span>
<a id=__codelineno-0-617 name=__codelineno-0-617></a> <span class=n>slots</span><span class=p>[</span><span class=n>fill</span><span class=o>.</span><span class=n>name</span><span class=p>]</span> <span class=o>=</span> <span class=n>_nodelist_to_slot_render_func</span><span class=p>(</span>
<a id=__codelineno-0-618 name=__codelineno-0-618></a> <span class=n>slot_name</span><span class=o>=</span><span class=n>fill</span><span class=o>.</span><span class=n>name</span><span class=p>,</span>
<a id=__codelineno-0-619 name=__codelineno-0-619></a> <span class=n>nodelist</span><span class=o>=</span><span class=n>fill</span><span class=o>.</span><span class=n>fill</span><span class=o>.</span><span class=n>nodelist</span><span class=p>,</span>
<a id=__codelineno-0-620 name=__codelineno-0-620></a> <span class=n>data_var</span><span class=o>=</span><span class=n>fill</span><span class=o>.</span><span class=n>data_var</span><span class=p>,</span>
<a id=__codelineno-0-621 name=__codelineno-0-621></a> <span class=n>default_var</span><span class=o>=</span><span class=n>fill</span><span class=o>.</span><span class=n>default_var</span><span class=p>,</span>
<a id=__codelineno-0-622 name=__codelineno-0-622></a> <span class=n>extra_context</span><span class=o>=</span><span class=n>fill</span><span class=o>.</span><span class=n>extra_context</span><span class=p>,</span>
<a id=__codelineno-0-623 name=__codelineno-0-623></a> <span class=p>)</span>
<a id=__codelineno-0-624 name=__codelineno-0-624></a>
<a id=__codelineno-0-625 name=__codelineno-0-625></a> <span class=k>return</span> <span class=n>slots</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> </div> </div> </div> <div class="doc doc-object doc-module"> <h2 id=django_components.tag_formatter class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-module"></code> <span class="doc doc-object-name doc-module-name">tag_formatter</span> <a href=#django_components.tag_formatter class=headerlink title="Permanent link">¤</a></h2> <div class="doc doc-contents "> <p><span class=doc-section-title>Classes:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.tag_formatter.ComponentFormatter href=#django_components.tag_formatter.ComponentFormatter>ComponentFormatter</a></code></b> <div class=doc-md-description> <p>The original django_component's component tag formatter, it uses the <code>{% component %}</code></p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.tag_formatter.InternalTagFormatter href=#django_components.tag_formatter.InternalTagFormatter>InternalTagFormatter</a></code></b> <div class=doc-md-description> <p>Internal wrapper around user-provided TagFormatters, so that we validate the outputs.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.tag_formatter.ShorthandComponentFormatter href=#django_components.tag_formatter.ShorthandComponentFormatter>ShorthandComponentFormatter</a></code></b> <div class=doc-md-description> <p>The component tag formatter that uses <code>{% &lt;name&gt; %}</code> / <code>{% end&lt;name&gt; %}</code> tags.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.tag_formatter.TagFormatterABC href=#django_components.tag_formatter.TagFormatterABC>TagFormatterABC</a></code></b> <div class=doc-md-description> <p>Abstract base class for defining custom tag formatters.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.tag_formatter.TagResult href=#django_components.tag_formatter.TagResult>TagResult</a></code></b> <div class=doc-md-description> <p>The return value from <a href=../api#django_components.TagFormatterABC.parse><code>TagFormatter.parse()</code></a>.</p> </div> </li> </ul> <p><span class=doc-section-title>Functions:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.tag_formatter.get_tag_formatter href=#django_components.tag_formatter.get_tag_formatter>get_tag_formatter</a></code></b> <div class=doc-md-description> <p>Returns an instance of the currently configured component tag formatter.</p> </div> </li> </ul> <div class="doc doc-children"> <div class="doc doc-object doc-class"> <h3 id=django_components.tag_formatter.ComponentFormatter class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-class"></code> <span class="doc doc-object-name doc-class-name">ComponentFormatter</span> <a href=#django_components.tag_formatter.ComponentFormatter class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>ComponentFormatter</span><span class=p>(</span><span class=n>tag</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>)</span>
</code></pre></div> <div class="doc doc-contents "> <p class="doc doc-class-bases"> Bases: <code><a class="autorefs autorefs-internal" title=django_components.tag_formatter.TagFormatterABC href=#django_components.tag_formatter.TagFormatterABC>TagFormatterABC</a></code></p> <p>The original django_component's component tag formatter, it uses the <code>{% component %}</code> and <code>{% endcomponent %}</code> tags, and the component name is given as the first positional arg.</p> <p>Example as block: <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=cp>{%</span> <span class=k>component</span> <span class=s2>&quot;mycomp&quot;</span> <span class=nv>abc</span><span class=o>=</span><span class=m>123</span> <span class=cp>%}</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a><span class=x> </span><span class=cp>{%</span> <span class=k>fill</span> <span class=s2>&quot;myfill&quot;</span> <span class=cp>%}</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=x> ...</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a><span class=x> </span><span class=cp>{%</span> <span class=k>endfill</span> <span class=cp>%}</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a><span class=cp>{%</span> <span class=k>endcomponent</span> <span class=cp>%}</span>
</code></pre></div></p> <p>Example as inlined tag: <div class=highlight><pre><span></span><code><a id=__codelineno-1-1 name=__codelineno-1-1 href=#__codelineno-1-1></a><span class=cp>{%</span> <span class=k>component</span> <span class=s2>&quot;mycomp&quot;</span> <span class=nv>abc</span><span class=o>=</span><span class=m>123</span> <span class=o>/</span> <span class=cp>%}</span>
</code></pre></div></p> <details class=quote> <summary>Source code in <code>src/django_components/tag_formatter.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-228>228</a></span>
<span class=normal><a href=#__codelineno-0-229>229</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-228 name=__codelineno-0-228></a><span class=k>def</span> <span class=fm>__init__</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>tag</span><span class=p>:</span> <span class=nb>str</span><span class=p>):</span>
<a id=__codelineno-0-229 name=__codelineno-0-229></a> <span class=bp>self</span><span class=o>.</span><span class=n>tag</span> <span class=o>=</span> <span class=n>tag</span>
</code></pre></div></td></tr></table></div> </details> <div class="doc doc-children"> </div> </div> </div> <div class="doc doc-object doc-class"> <h3 id=django_components.tag_formatter.InternalTagFormatter class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-class"></code> <span class="doc doc-object-name doc-class-name">InternalTagFormatter</span> <a href=#django_components.tag_formatter.InternalTagFormatter class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>InternalTagFormatter</span><span class=p>(</span><span class=n>tag_formatter</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-internal" title=django_components.tag_formatter.TagFormatterABC href=#django_components.tag_formatter.TagFormatterABC>TagFormatterABC</a></span><span class=p>)</span>
</code></pre></div> <div class="doc doc-contents "> <p>Internal wrapper around user-provided TagFormatters, so that we validate the outputs.</p> <details class=quote> <summary>Source code in <code>src/django_components/tag_formatter.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-175>175</a></span>
<span class=normal><a href=#__codelineno-0-176>176</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-175 name=__codelineno-0-175></a><span class=k>def</span> <span class=fm>__init__</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>tag_formatter</span><span class=p>:</span> <span class=n>TagFormatterABC</span><span class=p>):</span>
<a id=__codelineno-0-176 name=__codelineno-0-176></a> <span class=bp>self</span><span class=o>.</span><span class=n>tag_formatter</span> <span class=o>=</span> <span class=n>tag_formatter</span>
</code></pre></div></td></tr></table></div> </details> <div class="doc doc-children"> </div> </div> </div> <div class="doc doc-object doc-class"> <h3 id=django_components.tag_formatter.ShorthandComponentFormatter class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-class"></code> <span class="doc doc-object-name doc-class-name">ShorthandComponentFormatter</span> <a href=#django_components.tag_formatter.ShorthandComponentFormatter class=headerlink title="Permanent link">¤</a></h3> <div class="doc doc-contents "> <p class="doc doc-class-bases"> Bases: <code><a class="autorefs autorefs-internal" title=django_components.tag_formatter.TagFormatterABC href=#django_components.tag_formatter.TagFormatterABC>TagFormatterABC</a></code></p> <p>The component tag formatter that uses <code>{% &lt;name&gt; %}</code> / <code>{% end&lt;name&gt; %}</code> tags.</p> <p>This is similar to <a href=https://github.com/Xzya/django-web-components>django-web-components</a> and <a href=https://github.com/mixxorz/slippers>django-slippers</a> syntax.</p> <p>Example as block: <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=cp>{%</span> <span class=k>mycomp</span> <span class=nv>abc</span><span class=o>=</span><span class=m>123</span> <span class=cp>%}</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a><span class=x> </span><span class=cp>{%</span> <span class=k>fill</span> <span class=s2>&quot;myfill&quot;</span> <span class=cp>%}</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=x> ...</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a><span class=x> </span><span class=cp>{%</span> <span class=k>endfill</span> <span class=cp>%}</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a><span class=cp>{%</span> <span class=k>endmycomp</span> <span class=cp>%}</span>
</code></pre></div></p> <p>Example as inlined tag: <div class=highlight><pre><span></span><code><a id=__codelineno-1-1 name=__codelineno-1-1 href=#__codelineno-1-1></a><span class=cp>{%</span> <span class=k>mycomp</span> <span class=nv>abc</span><span class=o>=</span><span class=m>123</span> <span class=o>/</span> <span class=cp>%}</span>
</code></pre></div></p> <div class="doc doc-children"> </div> </div> </div> <div class="doc doc-object doc-class"> <h3 id=django_components.tag_formatter.TagFormatterABC class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-class"></code> <span class="doc doc-object-name doc-class-name">TagFormatterABC</span> <a href=#django_components.tag_formatter.TagFormatterABC class=headerlink title="Permanent link">¤</a></h3> <div class="doc doc-contents "> <p class="doc doc-class-bases"> Bases: <code><a class="autorefs autorefs-external" title=abc.ABC href=https://docs.python.org/3.12/library/abc.html#abc.ABC>ABC</a></code></p> <p>Abstract base class for defining custom tag formatters.</p> <p>Tag formatters define how the component tags are used in the template.</p> <p>Read more about <a href=../../concepts/advanced/tag_formatter>Tag formatter</a>.</p> <p>For example, with the default tag formatter (<a href=../tag_formatters#django_components.tag_formatter.ComponentFormatter><code>ComponentFormatter</code></a>), components are written as:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=cp>{%</span> <span class=k>component</span> <span class=s2>&quot;comp_name&quot;</span> <span class=cp>%}</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a><span class=cp>{%</span> <span class=k>endcomponent</span> <span class=cp>%}</span>
</code></pre></div> <p>While with the shorthand tag formatter (<a href=../tag_formatters#django_components.tag_formatter.ShorthandComponentFormatter><code>ShorthandComponentFormatter</code></a>), components are written as: <div class=highlight><pre><span></span><code><a id=__codelineno-1-1 name=__codelineno-1-1 href=#__codelineno-1-1></a><span class=cp>{%</span> <span class=k>comp_name</span> <span class=cp>%}</span>
<a id=__codelineno-1-2 name=__codelineno-1-2 href=#__codelineno-1-2></a><span class=cp>{%</span> <span class=k>endcomp_name</span> <span class=cp>%}</span>
</code></pre></div></p> <p><strong>Example:</strong></p> <p>Implementation for <code>ShorthandComponentFormatter</code>:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-2-1 name=__codelineno-2-1 href=#__codelineno-2-1></a><span class=kn>from</span> <span class=nn>djagno_components</span> <span class=kn>import</span> <span class=n>TagFormatterABC</span><span class=p>,</span> <span class=n>TagResult</span>
<a id=__codelineno-2-2 name=__codelineno-2-2 href=#__codelineno-2-2></a>
<a id=__codelineno-2-3 name=__codelineno-2-3 href=#__codelineno-2-3></a><span class=k>class</span> <span class=nc>ShorthandComponentFormatter</span><span class=p>(</span><span class=n>TagFormatterABC</span><span class=p>):</span>
<a id=__codelineno-2-4 name=__codelineno-2-4 href=#__codelineno-2-4></a> <span class=k>def</span> <span class=nf>start_tag</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>name</span><span class=p>:</span> <span class=nb>str</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=nb>str</span><span class=p>:</span>
<a id=__codelineno-2-5 name=__codelineno-2-5 href=#__codelineno-2-5></a> <span class=k>return</span> <span class=n>name</span>
<a id=__codelineno-2-6 name=__codelineno-2-6 href=#__codelineno-2-6></a>
<a id=__codelineno-2-7 name=__codelineno-2-7 href=#__codelineno-2-7></a> <span class=k>def</span> <span class=nf>end_tag</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>name</span><span class=p>:</span> <span class=nb>str</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=nb>str</span><span class=p>:</span>
<a id=__codelineno-2-8 name=__codelineno-2-8 href=#__codelineno-2-8></a> <span class=k>return</span> <span class=sa>f</span><span class=s2>&quot;end</span><span class=si>{</span><span class=n>name</span><span class=si>}</span><span class=s2>&quot;</span>
<a id=__codelineno-2-9 name=__codelineno-2-9 href=#__codelineno-2-9></a>
<a id=__codelineno-2-10 name=__codelineno-2-10 href=#__codelineno-2-10></a> <span class=k>def</span> <span class=nf>parse</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>tokens</span><span class=p>:</span> <span class=n>List</span><span class=p>[</span><span class=nb>str</span><span class=p>])</span> <span class=o>-&gt;</span> <span class=n>TagResult</span><span class=p>:</span>
<a id=__codelineno-2-11 name=__codelineno-2-11 href=#__codelineno-2-11></a> <span class=n>tokens</span> <span class=o>=</span> <span class=p>[</span><span class=o>*</span><span class=n>tokens</span><span class=p>]</span>
<a id=__codelineno-2-12 name=__codelineno-2-12 href=#__codelineno-2-12></a> <span class=n>name</span> <span class=o>=</span> <span class=n>tokens</span><span class=o>.</span><span class=n>pop</span><span class=p>(</span><span class=mi>0</span><span class=p>)</span>
<a id=__codelineno-2-13 name=__codelineno-2-13 href=#__codelineno-2-13></a> <span class=k>return</span> <span class=n>TagResult</span><span class=p>(</span><span class=n>name</span><span class=p>,</span> <span class=n>tokens</span><span class=p>)</span>
</code></pre></div> <p><span class=doc-section-title>Methods:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.tag_formatter.TagFormatterABC.end_tag href=#django_components.tag_formatter.TagFormatterABC.end_tag>end_tag</a></code></b> <div class=doc-md-description> <p>Formats the end tag of a block component.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.tag_formatter.TagFormatterABC.parse href=#django_components.tag_formatter.TagFormatterABC.parse>parse</a></code></b> <div class=doc-md-description> <p>Given the tokens (words) passed to a component start tag, this function extracts</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.tag_formatter.TagFormatterABC.start_tag href=#django_components.tag_formatter.TagFormatterABC.start_tag>start_tag</a></code></b> <div class=doc-md-description> <p>Formats the start tag of a component.</p> </div> </li> </ul> <div class="doc doc-children"> <div class="doc doc-object doc-function"> <h4 id=django_components.tag_formatter.TagFormatterABC.end_tag class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">end_tag</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-abstractmethod"><code>abstractmethod</code></small> </span> <a href=#django_components.tag_formatter.TagFormatterABC.end_tag class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>end_tag</span><span class=p>(</span><span class=n>name</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span>
</code></pre></div> <div class="doc doc-contents "> <p>Formats the end tag of a block component.</p> <p><span class=doc-section-title>Parameters:</span></p> <ul> <li class="doc-section-item field-body"> <b><code>name</code></b> (<code><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></code>) <div class=doc-md-description> <p>Component's registered name. Required.</p> </div> </li> </ul> <p><span class=doc-section-title>Returns:</span></p> <ul> <li class="doc-section-item field-body"> <b><code>str</code></b> ( <code><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></code> ) <div class=doc-md-description> <p>The formatted end tag.</p> </div> </li> </ul> <details class=quote> <summary>Source code in <code>src/django_components/tag_formatter.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-115>115</a></span>
<span class=normal><a href=#__codelineno-0-116>116</a></span>
<span class=normal><a href=#__codelineno-0-117>117</a></span>
<span class=normal><a href=#__codelineno-0-118>118</a></span>
<span class=normal><a href=#__codelineno-0-119>119</a></span>
<span class=normal><a href=#__codelineno-0-120>120</a></span>
<span class=normal><a href=#__codelineno-0-121>121</a></span>
<span class=normal><a href=#__codelineno-0-122>122</a></span>
<span class=normal><a href=#__codelineno-0-123>123</a></span>
<span class=normal><a href=#__codelineno-0-124>124</a></span>
<span class=normal><a href=#__codelineno-0-125>125</a></span>
<span class=normal><a href=#__codelineno-0-126>126</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-115 name=__codelineno-0-115></a><span class=nd>@abc</span><span class=o>.</span><span class=n>abstractmethod</span>
<a id=__codelineno-0-116 name=__codelineno-0-116></a><span class=k>def</span> <span class=nf>end_tag</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>name</span><span class=p>:</span> <span class=nb>str</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=nb>str</span><span class=p>:</span>
<a id=__codelineno-0-117 name=__codelineno-0-117></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-118 name=__codelineno-0-118></a><span class=sd> Formats the end tag of a block component.</span>
<a id=__codelineno-0-119 name=__codelineno-0-119></a>
<a id=__codelineno-0-120 name=__codelineno-0-120></a><span class=sd> Args:</span>
<a id=__codelineno-0-121 name=__codelineno-0-121></a><span class=sd> name (str): Component&#39;s registered name. Required.</span>
<a id=__codelineno-0-122 name=__codelineno-0-122></a>
<a id=__codelineno-0-123 name=__codelineno-0-123></a><span class=sd> Returns:</span>
<a id=__codelineno-0-124 name=__codelineno-0-124></a><span class=sd> str: The formatted end tag.</span>
<a id=__codelineno-0-125 name=__codelineno-0-125></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-126 name=__codelineno-0-126></a> <span class=o>...</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h4 id=django_components.tag_formatter.TagFormatterABC.parse class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">parse</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-abstractmethod"><code>abstractmethod</code></small> </span> <a href=#django_components.tag_formatter.TagFormatterABC.parse class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>parse</span><span class=p>(</span><span class=n>tokens</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.List href=https://docs.python.org/3.12/library/typing.html#typing.List>List</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>])</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-internal" title=django_components.tag_formatter.TagResult href=#django_components.tag_formatter.TagResult>TagResult</a></span>
</code></pre></div> <div class="doc doc-contents "> <p>Given the tokens (words) passed to a component start tag, this function extracts the component name from the tokens list, and returns <a href=../api#django_components.TagResult><code>TagResult</code></a>, which is a tuple of <code>(component_name, remaining_tokens)</code>.</p> <p><span class=doc-section-title>Parameters:</span></p> <ul> <li class="doc-section-item field-body"> <b><code>tokens</code></b> (<code>[List(str]</code>) <div class=doc-md-description> <p>List of tokens passed to the component tag.</p> </div> </li> </ul> <p><span class=doc-section-title>Returns:</span></p> <ul> <li class="doc-section-item field-body"> <b><code>TagResult</code></b> ( <code><a class="autorefs autorefs-internal" title=django_components.tag_formatter.TagResult href=#django_components.tag_formatter.TagResult>TagResult</a></code> ) <div class=doc-md-description> <p>Parsed component name and remaining tokens.</p> </div> </li> </ul> <p><strong>Example:</strong></p> <p>Assuming we used a component in a template like this:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=cp>{%</span> <span class=k>component</span> <span class=s2>&quot;my_comp&quot;</span> <span class=nv>key</span><span class=o>=</span><span class=nv>val</span> <span class=nv>key2</span><span class=o>=</span><span class=nv>val2</span> <span class=cp>%}</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a><span class=cp>{%</span> <span class=k>endcomponent</span> <span class=cp>%}</span>
</code></pre></div> <p>This function receives a list of tokens:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-1-1 name=__codelineno-1-1 href=#__codelineno-1-1></a><span class=p>[</span><span class=s1>&#39;component&#39;</span><span class=p>,</span> <span class=s1>&#39;&quot;my_comp&quot;&#39;</span><span class=p>,</span> <span class=s1>&#39;key=val&#39;</span><span class=p>,</span> <span class=s1>&#39;key2=val2&#39;</span><span class=p>]</span>
</code></pre></div> <ul> <li><code>component</code> is the tag name, which we drop.</li> <li><code>"my_comp"</code> is the component name, but we must remove the extra quotes.</li> <li>The remaining tokens we pass unmodified, as that's the input to the component.</li> </ul> <p>So in the end, we return:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-2-1 name=__codelineno-2-1 href=#__codelineno-2-1></a><span class=n>TagResult</span><span class=p>(</span><span class=s1>&#39;my_comp&#39;</span><span class=p>,</span> <span class=p>[</span><span class=s1>&#39;key=val&#39;</span><span class=p>,</span> <span class=s1>&#39;key2=val2&#39;</span><span class=p>])</span>
</code></pre></div> <details class=quote> <summary>Source code in <code>src/django_components/tag_formatter.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-128>128</a></span>
<span class=normal><a href=#__codelineno-0-129>129</a></span>
<span class=normal><a href=#__codelineno-0-130>130</a></span>
<span class=normal><a href=#__codelineno-0-131>131</a></span>
<span class=normal><a href=#__codelineno-0-132>132</a></span>
<span class=normal><a href=#__codelineno-0-133>133</a></span>
<span class=normal><a href=#__codelineno-0-134>134</a></span>
<span class=normal><a href=#__codelineno-0-135>135</a></span>
<span class=normal><a href=#__codelineno-0-136>136</a></span>
<span class=normal><a href=#__codelineno-0-137>137</a></span>
<span class=normal><a href=#__codelineno-0-138>138</a></span>
<span class=normal><a href=#__codelineno-0-139>139</a></span>
<span class=normal><a href=#__codelineno-0-140>140</a></span>
<span class=normal><a href=#__codelineno-0-141>141</a></span>
<span class=normal><a href=#__codelineno-0-142>142</a></span>
<span class=normal><a href=#__codelineno-0-143>143</a></span>
<span class=normal><a href=#__codelineno-0-144>144</a></span>
<span class=normal><a href=#__codelineno-0-145>145</a></span>
<span class=normal><a href=#__codelineno-0-146>146</a></span>
<span class=normal><a href=#__codelineno-0-147>147</a></span>
<span class=normal><a href=#__codelineno-0-148>148</a></span>
<span class=normal><a href=#__codelineno-0-149>149</a></span>
<span class=normal><a href=#__codelineno-0-150>150</a></span>
<span class=normal><a href=#__codelineno-0-151>151</a></span>
<span class=normal><a href=#__codelineno-0-152>152</a></span>
<span class=normal><a href=#__codelineno-0-153>153</a></span>
<span class=normal><a href=#__codelineno-0-154>154</a></span>
<span class=normal><a href=#__codelineno-0-155>155</a></span>
<span class=normal><a href=#__codelineno-0-156>156</a></span>
<span class=normal><a href=#__codelineno-0-157>157</a></span>
<span class=normal><a href=#__codelineno-0-158>158</a></span>
<span class=normal><a href=#__codelineno-0-159>159</a></span>
<span class=normal><a href=#__codelineno-0-160>160</a></span>
<span class=normal><a href=#__codelineno-0-161>161</a></span>
<span class=normal><a href=#__codelineno-0-162>162</a></span>
<span class=normal><a href=#__codelineno-0-163>163</a></span>
<span class=normal><a href=#__codelineno-0-164>164</a></span>
<span class=normal><a href=#__codelineno-0-165>165</a></span>
<span class=normal><a href=#__codelineno-0-166>166</a></span>
<span class=normal><a href=#__codelineno-0-167>167</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-128 name=__codelineno-0-128></a><span class=nd>@abc</span><span class=o>.</span><span class=n>abstractmethod</span>
<a id=__codelineno-0-129 name=__codelineno-0-129></a><span class=k>def</span> <span class=nf>parse</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>tokens</span><span class=p>:</span> <span class=n>List</span><span class=p>[</span><span class=nb>str</span><span class=p>])</span> <span class=o>-&gt;</span> <span class=n>TagResult</span><span class=p>:</span>
<a id=__codelineno-0-130 name=__codelineno-0-130></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-131 name=__codelineno-0-131></a><span class=sd> Given the tokens (words) passed to a component start tag, this function extracts</span>
<a id=__codelineno-0-132 name=__codelineno-0-132></a><span class=sd> the component name from the tokens list, and returns</span>
<a id=__codelineno-0-133 name=__codelineno-0-133></a><span class=sd> [`TagResult`](../api#django_components.TagResult),</span>
<a id=__codelineno-0-134 name=__codelineno-0-134></a><span class=sd> which is a tuple of `(component_name, remaining_tokens)`.</span>
<a id=__codelineno-0-135 name=__codelineno-0-135></a>
<a id=__codelineno-0-136 name=__codelineno-0-136></a><span class=sd> Args:</span>
<a id=__codelineno-0-137 name=__codelineno-0-137></a><span class=sd> tokens [List(str]): List of tokens passed to the component tag.</span>
<a id=__codelineno-0-138 name=__codelineno-0-138></a>
<a id=__codelineno-0-139 name=__codelineno-0-139></a><span class=sd> Returns:</span>
<a id=__codelineno-0-140 name=__codelineno-0-140></a><span class=sd> TagResult: Parsed component name and remaining tokens.</span>
<a id=__codelineno-0-141 name=__codelineno-0-141></a>
<a id=__codelineno-0-142 name=__codelineno-0-142></a><span class=sd> **Example:**</span>
<a id=__codelineno-0-143 name=__codelineno-0-143></a>
<a id=__codelineno-0-144 name=__codelineno-0-144></a><span class=sd> Assuming we used a component in a template like this:</span>
<a id=__codelineno-0-145 name=__codelineno-0-145></a>
<a id=__codelineno-0-146 name=__codelineno-0-146></a><span class=sd> ```django</span>
<a id=__codelineno-0-147 name=__codelineno-0-147></a><span class=sd> {% component &quot;my_comp&quot; key=val key2=val2 %}</span>
<a id=__codelineno-0-148 name=__codelineno-0-148></a><span class=sd> {% endcomponent %}</span>
<a id=__codelineno-0-149 name=__codelineno-0-149></a><span class=sd> ```</span>
<a id=__codelineno-0-150 name=__codelineno-0-150></a>
<a id=__codelineno-0-151 name=__codelineno-0-151></a><span class=sd> This function receives a list of tokens:</span>
<a id=__codelineno-0-152 name=__codelineno-0-152></a>
<a id=__codelineno-0-153 name=__codelineno-0-153></a><span class=sd> ```python</span>
<a id=__codelineno-0-154 name=__codelineno-0-154></a><span class=sd> [&#39;component&#39;, &#39;&quot;my_comp&quot;&#39;, &#39;key=val&#39;, &#39;key2=val2&#39;]</span>
<a id=__codelineno-0-155 name=__codelineno-0-155></a><span class=sd> ```</span>
<a id=__codelineno-0-156 name=__codelineno-0-156></a>
<a id=__codelineno-0-157 name=__codelineno-0-157></a><span class=sd> - `component` is the tag name, which we drop.</span>
<a id=__codelineno-0-158 name=__codelineno-0-158></a><span class=sd> - `&quot;my_comp&quot;` is the component name, but we must remove the extra quotes.</span>
<a id=__codelineno-0-159 name=__codelineno-0-159></a><span class=sd> - The remaining tokens we pass unmodified, as that&#39;s the input to the component.</span>
<a id=__codelineno-0-160 name=__codelineno-0-160></a>
<a id=__codelineno-0-161 name=__codelineno-0-161></a><span class=sd> So in the end, we return:</span>
<a id=__codelineno-0-162 name=__codelineno-0-162></a>
<a id=__codelineno-0-163 name=__codelineno-0-163></a><span class=sd> ```python</span>
<a id=__codelineno-0-164 name=__codelineno-0-164></a><span class=sd> TagResult(&#39;my_comp&#39;, [&#39;key=val&#39;, &#39;key2=val2&#39;])</span>
<a id=__codelineno-0-165 name=__codelineno-0-165></a><span class=sd> ```</span>
<a id=__codelineno-0-166 name=__codelineno-0-166></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-167 name=__codelineno-0-167></a> <span class=o>...</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h4 id=django_components.tag_formatter.TagFormatterABC.start_tag class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">start_tag</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-abstractmethod"><code>abstractmethod</code></small> </span> <a href=#django_components.tag_formatter.TagFormatterABC.start_tag class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>start_tag</span><span class=p>(</span><span class=n>name</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span>
</code></pre></div> <div class="doc doc-contents "> <p>Formats the start tag of a component.</p> <p><span class=doc-section-title>Parameters:</span></p> <ul> <li class="doc-section-item field-body"> <b><code>name</code></b> (<code><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></code>) <div class=doc-md-description> <p>Component's registered name. Required.</p> </div> </li> </ul> <p><span class=doc-section-title>Returns:</span></p> <ul> <li class="doc-section-item field-body"> <b><code>str</code></b> ( <code><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></code> ) <div class=doc-md-description> <p>The formatted start tag.</p> </div> </li> </ul> <details class=quote> <summary>Source code in <code>src/django_components/tag_formatter.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-102>102</a></span>
<span class=normal><a href=#__codelineno-0-103>103</a></span>
<span class=normal><a href=#__codelineno-0-104>104</a></span>
<span class=normal><a href=#__codelineno-0-105>105</a></span>
<span class=normal><a href=#__codelineno-0-106>106</a></span>
<span class=normal><a href=#__codelineno-0-107>107</a></span>
<span class=normal><a href=#__codelineno-0-108>108</a></span>
<span class=normal><a href=#__codelineno-0-109>109</a></span>
<span class=normal><a href=#__codelineno-0-110>110</a></span>
<span class=normal><a href=#__codelineno-0-111>111</a></span>
<span class=normal><a href=#__codelineno-0-112>112</a></span>
<span class=normal><a href=#__codelineno-0-113>113</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-102 name=__codelineno-0-102></a><span class=nd>@abc</span><span class=o>.</span><span class=n>abstractmethod</span>
<a id=__codelineno-0-103 name=__codelineno-0-103></a><span class=k>def</span> <span class=nf>start_tag</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>name</span><span class=p>:</span> <span class=nb>str</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=nb>str</span><span class=p>:</span>
<a id=__codelineno-0-104 name=__codelineno-0-104></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-105 name=__codelineno-0-105></a><span class=sd> Formats the start tag of a component.</span>
<a id=__codelineno-0-106 name=__codelineno-0-106></a>
<a id=__codelineno-0-107 name=__codelineno-0-107></a><span class=sd> Args:</span>
<a id=__codelineno-0-108 name=__codelineno-0-108></a><span class=sd> name (str): Component&#39;s registered name. Required.</span>
<a id=__codelineno-0-109 name=__codelineno-0-109></a>
<a id=__codelineno-0-110 name=__codelineno-0-110></a><span class=sd> Returns:</span>
<a id=__codelineno-0-111 name=__codelineno-0-111></a><span class=sd> str: The formatted start tag.</span>
<a id=__codelineno-0-112 name=__codelineno-0-112></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-113 name=__codelineno-0-113></a> <span class=o>...</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> </div> </div> </div> <div class="doc doc-object doc-class"> <h3 id=django_components.tag_formatter.TagResult class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-class"></code> <span class="doc doc-object-name doc-class-name">TagResult</span> <a href=#django_components.tag_formatter.TagResult class=headerlink title="Permanent link">¤</a></h3> <div class="doc doc-contents "> <p class="doc doc-class-bases"> Bases: <code><a class="autorefs autorefs-external" title=typing.NamedTuple href=https://docs.python.org/3.12/library/typing.html#typing.NamedTuple>NamedTuple</a></code></p> <p>The return value from <a href=../api#django_components.TagFormatterABC.parse><code>TagFormatter.parse()</code></a>.</p> <p>Read more about <a href=../../concepts/advanced/tag_formatter>Tag formatter</a>.</p> <p><span class=doc-section-title>Attributes:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.tag_formatter.TagResult.component_name href=#django_components.tag_formatter.TagResult.component_name>component_name</a></code></b> (<code><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></code>) <div class=doc-md-description> <p>Component name extracted from the template tag</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.tag_formatter.TagResult.tokens href=#django_components.tag_formatter.TagResult.tokens>tokens</a></code></b> (<code><a class="autorefs autorefs-external" title=typing.List href=https://docs.python.org/3.12/library/typing.html#typing.List>List</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>]</code>) <div class=doc-md-description> <p>Remaining tokens (words) that were passed to the tag, with component name removed</p> </div> </li> </ul> <div class="doc doc-children"> <div class="doc doc-object doc-attribute"> <h4 id=django_components.tag_formatter.TagResult.component_name class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">component_name</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.tag_formatter.TagResult.component_name class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>component_name</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span>
</code></pre></div> <div class="doc doc-contents "> <p>Component name extracted from the template tag</p> <p>For example, if we had tag</p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=cp>{%</span> <span class=k>component</span> <span class=s2>&quot;my_comp&quot;</span> <span class=nv>key</span><span class=o>=</span><span class=nv>val</span> <span class=nv>key2</span><span class=o>=</span><span class=nv>val2</span> <span class=cp>%}</span>
</code></pre></div> <p>Then <code>component_name</code> would be <code>my_comp</code>.</p> </div> </div> <div class="doc doc-object doc-attribute"> <h4 id=django_components.tag_formatter.TagResult.tokens class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">tokens</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.tag_formatter.TagResult.tokens class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>tokens</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.List href=https://docs.python.org/3.12/library/typing.html#typing.List>List</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]</span>
</code></pre></div> <div class="doc doc-contents "> <p>Remaining tokens (words) that were passed to the tag, with component name removed</p> <p>For example, if we had tag</p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=cp>{%</span> <span class=k>component</span> <span class=s2>&quot;my_comp&quot;</span> <span class=nv>key</span><span class=o>=</span><span class=nv>val</span> <span class=nv>key2</span><span class=o>=</span><span class=nv>val2</span> <span class=cp>%}</span>
</code></pre></div> <p>Then <code>tokens</code> would be <code>['key=val', 'key2=val2']</code>.</p> </div> </div> </div> </div> </div> <div class="doc doc-object doc-function"> <h3 id=django_components.tag_formatter.get_tag_formatter class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-function"></code> <span class="doc doc-object-name doc-function-name">get_tag_formatter</span> <a href=#django_components.tag_formatter.get_tag_formatter class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>get_tag_formatter</span><span class=p>(</span><span class=n>registry</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-internal" title=django_components.component_registry.ComponentRegistry href=#django_components.component_registry.ComponentRegistry>ComponentRegistry</a></span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-internal" title=django_components.tag_formatter.InternalTagFormatter href=#django_components.tag_formatter.InternalTagFormatter>InternalTagFormatter</a></span>
</code></pre></div> <div class="doc doc-contents "> <p>Returns an instance of the currently configured component tag formatter.</p> <details class=quote> <summary>Source code in <code>src/django_components/tag_formatter.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-312>312</a></span>
<span class=normal><a href=#__codelineno-0-313>313</a></span>
<span class=normal><a href=#__codelineno-0-314>314</a></span>
<span class=normal><a href=#__codelineno-0-315>315</a></span>
<span class=normal><a href=#__codelineno-0-316>316</a></span>
<span class=normal><a href=#__codelineno-0-317>317</a></span>
<span class=normal><a href=#__codelineno-0-318>318</a></span>
<span class=normal><a href=#__codelineno-0-319>319</a></span>
<span class=normal><a href=#__codelineno-0-320>320</a></span>
<span class=normal><a href=#__codelineno-0-321>321</a></span>
<span class=normal><a href=#__codelineno-0-322>322</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-312 name=__codelineno-0-312></a><span class=k>def</span> <span class=nf>get_tag_formatter</span><span class=p>(</span><span class=n>registry</span><span class=p>:</span> <span class=s2>&quot;ComponentRegistry&quot;</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n>InternalTagFormatter</span><span class=p>:</span>
<a id=__codelineno-0-313 name=__codelineno-0-313></a><span class=w> </span><span class=sd>&quot;&quot;&quot;Returns an instance of the currently configured component tag formatter.&quot;&quot;&quot;</span>
<a id=__codelineno-0-314 name=__codelineno-0-314></a> <span class=c1># Allow users to configure the component TagFormatter</span>
<a id=__codelineno-0-315 name=__codelineno-0-315></a> <span class=n>formatter_cls_or_str</span> <span class=o>=</span> <span class=n>registry</span><span class=o>.</span><span class=n>settings</span><span class=o>.</span><span class=n>tag_formatter</span>
<a id=__codelineno-0-316 name=__codelineno-0-316></a>
<a id=__codelineno-0-317 name=__codelineno-0-317></a> <span class=k>if</span> <span class=nb>isinstance</span><span class=p>(</span><span class=n>formatter_cls_or_str</span><span class=p>,</span> <span class=nb>str</span><span class=p>):</span>
<a id=__codelineno-0-318 name=__codelineno-0-318></a> <span class=n>tag_formatter</span><span class=p>:</span> <span class=n>TagFormatterABC</span> <span class=o>=</span> <span class=n>import_string</span><span class=p>(</span><span class=n>formatter_cls_or_str</span><span class=p>)</span>
<a id=__codelineno-0-319 name=__codelineno-0-319></a> <span class=k>else</span><span class=p>:</span>
<a id=__codelineno-0-320 name=__codelineno-0-320></a> <span class=n>tag_formatter</span> <span class=o>=</span> <span class=n>formatter_cls_or_str</span>
<a id=__codelineno-0-321 name=__codelineno-0-321></a>
<a id=__codelineno-0-322 name=__codelineno-0-322></a> <span class=k>return</span> <span class=n>InternalTagFormatter</span><span class=p>(</span><span class=n>tag_formatter</span><span class=p>)</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> </div> </div> </div> <div class="doc doc-object doc-module"> <h2 id=django_components.template class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-module"></code> <span class="doc doc-object-name doc-module-name">template</span> <a href=#django_components.template class=headerlink title="Permanent link">¤</a></h2> <div class="doc doc-contents "> <p><span class=doc-section-title>Functions:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.template.cached_template href=#django_components.template.cached_template>cached_template</a></code></b> <div class=doc-md-description> <p>Create a Template instance that will be cached as per the</p> </div> </li> </ul> <div class="doc doc-children"> <div class="doc doc-object doc-function"> <h3 id=django_components.template.cached_template class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-function"></code> <span class="doc doc-object-name doc-function-name">cached_template</span> <a href=#django_components.template.cached_template class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>cached_template</span><span class=p>(</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a> <span class=n>template_string</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a> <span class=n>template_cls</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Type href=https://docs.python.org/3.12/library/typing.html#typing.Type>Type</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=django.template.Template href=https://docs.djangoproject.com/en/5.0/ref/templates/api/#django.template.Template>Template</a></span><span class=p>]]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a> <span class=n>origin</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><span title=django.template.Origin>Origin</span></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a> <span class=n>name</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-6 name=__codelineno-0-6 href=#__codelineno-0-6></a> <span class=n>engine</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Any href=https://docs.python.org/3.12/library/typing.html#typing.Any>Any</a></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-7 name=__codelineno-0-7 href=#__codelineno-0-7></a><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-external" title=django.template.Template href=https://docs.djangoproject.com/en/5.0/ref/templates/api/#django.template.Template>Template</a></span>
</code></pre></div> <div class="doc doc-contents "> <p>Create a Template instance that will be cached as per the <a href=../settings#django_components.app_settings.ComponentsSettings.template_cache_size><code>COMPONENTS.template_cache_size</code></a> setting.</p> <p><span class=doc-section-title>Parameters:</span></p> <ul> <li class="doc-section-item field-body"> <b><code>template_string</code></b> (<code><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></code>) <div class=doc-md-description> <p>Template as a string, same as the first argument to Django's <a href=https://docs.djangoproject.com/en/5.1/topics/templates/#template><code>Template</code></a>. Required.</p> </div> </li> <li class="doc-section-item field-body"> <b><code>template_cls</code></b> (<code><a class="autorefs autorefs-external" title=typing.Type href=https://docs.python.org/3.12/library/typing.html#typing.Type>Type</a>[<a class="autorefs autorefs-external" title=django.template.Template href=https://docs.djangoproject.com/en/5.0/ref/templates/api/#django.template.Template>Template</a>]</code>, default: <code>None</code> ) <div class=doc-md-description> <p>Specify the Template class that should be instantiated. Defaults to Django's <a href=https://docs.djangoproject.com/en/5.1/topics/templates/#template><code>Template</code></a> class.</p> </div> </li> <li class="doc-section-item field-body"> <b><code>origin</code></b> (<code><a class="autorefs autorefs-external" title=typing.Type href=https://docs.python.org/3.12/library/typing.html#typing.Type>Type</a>[<span title=django.template.Origin>Origin</span>]</code>, default: <code>None</code> ) <div class=doc-md-description> <p>Sets <a href=https://docs.djangoproject.com/en/5.1/howto/custom-template-backend/#origin-api-and-3rd-party-integration><code>Template.Origin</code></a>.</p> </div> </li> <li class="doc-section-item field-body"> <b><code>name</code></b> (<code><a class="autorefs autorefs-external" title=typing.Type href=https://docs.python.org/3.12/library/typing.html#typing.Type>Type</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>]</code>, default: <code>None</code> ) <div class=doc-md-description> <p>Sets <code>Template.name</code></p> </div> </li> <li class="doc-section-item field-body"> <b><code>engine</code></b> (<code><a class="autorefs autorefs-external" title=typing.Type href=https://docs.python.org/3.12/library/typing.html#typing.Type>Type</a>[<a class="autorefs autorefs-external" title=typing.Any href=https://docs.python.org/3.12/library/typing.html#typing.Any>Any</a>]</code>, default: <code>None</code> ) <div class=doc-md-description> <p>Sets <code>Template.engine</code></p> </div> </li> </ul> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=kn>from</span> <span class=nn>django_components</span> <span class=kn>import</span> <span class=n>cached_template</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=n>template</span> <span class=o>=</span> <span class=n>cached_template</span><span class=p>(</span><span class=s2>&quot;Variable: {{ variable }}&quot;</span><span class=p>)</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a><span class=c1># You can optionally specify Template class, and other Template inputs:</span>
<a id=__codelineno-0-6 name=__codelineno-0-6 href=#__codelineno-0-6></a><span class=k>class</span> <span class=nc>MyTemplate</span><span class=p>(</span><span class=n>Template</span><span class=p>):</span>
<a id=__codelineno-0-7 name=__codelineno-0-7 href=#__codelineno-0-7></a> <span class=k>pass</span>
<a id=__codelineno-0-8 name=__codelineno-0-8 href=#__codelineno-0-8></a>
<a id=__codelineno-0-9 name=__codelineno-0-9 href=#__codelineno-0-9></a><span class=n>template</span> <span class=o>=</span> <span class=n>cached_template</span><span class=p>(</span>
<a id=__codelineno-0-10 name=__codelineno-0-10 href=#__codelineno-0-10></a> <span class=s2>&quot;Variable: {{ variable }}&quot;</span><span class=p>,</span>
<a id=__codelineno-0-11 name=__codelineno-0-11 href=#__codelineno-0-11></a> <span class=n>template_cls</span><span class=o>=</span><span class=n>MyTemplate</span><span class=p>,</span>
<a id=__codelineno-0-12 name=__codelineno-0-12 href=#__codelineno-0-12></a> <span class=n>name</span><span class=o>=...</span>
<a id=__codelineno-0-13 name=__codelineno-0-13 href=#__codelineno-0-13></a> <span class=n>origin</span><span class=o>=...</span>
<a id=__codelineno-0-14 name=__codelineno-0-14 href=#__codelineno-0-14></a> <span class=n>engine</span><span class=o>=...</span>
<a id=__codelineno-0-15 name=__codelineno-0-15 href=#__codelineno-0-15></a><span class=p>)</span>
</code></pre></div> <details class=quote> <summary>Source code in <code>src/django_components/template.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-25>25</a></span>
<span class=normal><a href=#__codelineno-0-26>26</a></span>
<span class=normal><a href=#__codelineno-0-27>27</a></span>
<span class=normal><a href=#__codelineno-0-28>28</a></span>
<span class=normal><a href=#__codelineno-0-29>29</a></span>
<span class=normal><a href=#__codelineno-0-30>30</a></span>
<span class=normal><a href=#__codelineno-0-31>31</a></span>
<span class=normal><a href=#__codelineno-0-32>32</a></span>
<span class=normal><a href=#__codelineno-0-33>33</a></span>
<span class=normal><a href=#__codelineno-0-34>34</a></span>
<span class=normal><a href=#__codelineno-0-35>35</a></span>
<span class=normal><a href=#__codelineno-0-36>36</a></span>
<span class=normal><a href=#__codelineno-0-37>37</a></span>
<span class=normal><a href=#__codelineno-0-38>38</a></span>
<span class=normal><a href=#__codelineno-0-39>39</a></span>
<span class=normal><a href=#__codelineno-0-40>40</a></span>
<span class=normal><a href=#__codelineno-0-41>41</a></span>
<span class=normal><a href=#__codelineno-0-42>42</a></span>
<span class=normal><a href=#__codelineno-0-43>43</a></span>
<span class=normal><a href=#__codelineno-0-44>44</a></span>
<span class=normal><a href=#__codelineno-0-45>45</a></span>
<span class=normal><a href=#__codelineno-0-46>46</a></span>
<span class=normal><a href=#__codelineno-0-47>47</a></span>
<span class=normal><a href=#__codelineno-0-48>48</a></span>
<span class=normal><a href=#__codelineno-0-49>49</a></span>
<span class=normal><a href=#__codelineno-0-50>50</a></span>
<span class=normal><a href=#__codelineno-0-51>51</a></span>
<span class=normal><a href=#__codelineno-0-52>52</a></span>
<span class=normal><a href=#__codelineno-0-53>53</a></span>
<span class=normal><a href=#__codelineno-0-54>54</a></span>
<span class=normal><a href=#__codelineno-0-55>55</a></span>
<span class=normal><a href=#__codelineno-0-56>56</a></span>
<span class=normal><a href=#__codelineno-0-57>57</a></span>
<span class=normal><a href=#__codelineno-0-58>58</a></span>
<span class=normal><a href=#__codelineno-0-59>59</a></span>
<span class=normal><a href=#__codelineno-0-60>60</a></span>
<span class=normal><a href=#__codelineno-0-61>61</a></span>
<span class=normal><a href=#__codelineno-0-62>62</a></span>
<span class=normal><a href=#__codelineno-0-63>63</a></span>
<span class=normal><a href=#__codelineno-0-64>64</a></span>
<span class=normal><a href=#__codelineno-0-65>65</a></span>
<span class=normal><a href=#__codelineno-0-66>66</a></span>
<span class=normal><a href=#__codelineno-0-67>67</a></span>
<span class=normal><a href=#__codelineno-0-68>68</a></span>
<span class=normal><a href=#__codelineno-0-69>69</a></span>
<span class=normal><a href=#__codelineno-0-70>70</a></span>
<span class=normal><a href=#__codelineno-0-71>71</a></span>
<span class=normal><a href=#__codelineno-0-72>72</a></span>
<span class=normal><a href=#__codelineno-0-73>73</a></span>
<span class=normal><a href=#__codelineno-0-74>74</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-25 name=__codelineno-0-25></a><span class=k>def</span> <span class=nf>cached_template</span><span class=p>(</span>
<a id=__codelineno-0-26 name=__codelineno-0-26></a> <span class=n>template_string</span><span class=p>:</span> <span class=nb>str</span><span class=p>,</span>
<a id=__codelineno-0-27 name=__codelineno-0-27></a> <span class=n>template_cls</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>Type</span><span class=p>[</span><span class=n>Template</span><span class=p>]]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-28 name=__codelineno-0-28></a> <span class=n>origin</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>Origin</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-29 name=__codelineno-0-29></a> <span class=n>name</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=nb>str</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-30 name=__codelineno-0-30></a> <span class=n>engine</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=n>Any</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-31 name=__codelineno-0-31></a><span class=p>)</span> <span class=o>-&gt;</span> <span class=n>Template</span><span class=p>:</span>
<a id=__codelineno-0-32 name=__codelineno-0-32></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-33 name=__codelineno-0-33></a><span class=sd> Create a Template instance that will be cached as per the</span>
<a id=__codelineno-0-34 name=__codelineno-0-34></a><span class=sd> [`COMPONENTS.template_cache_size`](../settings#django_components.app_settings.ComponentsSettings.template_cache_size)</span>
<a id=__codelineno-0-35 name=__codelineno-0-35></a><span class=sd> setting.</span>
<a id=__codelineno-0-36 name=__codelineno-0-36></a>
<a id=__codelineno-0-37 name=__codelineno-0-37></a><span class=sd> Args:</span>
<a id=__codelineno-0-38 name=__codelineno-0-38></a><span class=sd> template_string (str): Template as a string, same as the first argument to Django&#39;s\</span>
<a id=__codelineno-0-39 name=__codelineno-0-39></a><span class=sd> [`Template`](https://docs.djangoproject.com/en/5.1/topics/templates/#template). Required.</span>
<a id=__codelineno-0-40 name=__codelineno-0-40></a><span class=sd> template_cls (Type[Template], optional): Specify the Template class that should be instantiated.\</span>
<a id=__codelineno-0-41 name=__codelineno-0-41></a><span class=sd> Defaults to Django&#39;s [`Template`](https://docs.djangoproject.com/en/5.1/topics/templates/#template) class.</span>
<a id=__codelineno-0-42 name=__codelineno-0-42></a><span class=sd> origin (Type[Origin], optional): Sets \</span>
<a id=__codelineno-0-43 name=__codelineno-0-43></a><span class=sd> [`Template.Origin`](https://docs.djangoproject.com/en/5.1/howto/custom-template-backend/#origin-api-and-3rd-party-integration).</span>
<a id=__codelineno-0-44 name=__codelineno-0-44></a><span class=sd> name (Type[str], optional): Sets `Template.name`</span>
<a id=__codelineno-0-45 name=__codelineno-0-45></a><span class=sd> engine (Type[Any], optional): Sets `Template.engine`</span>
<a id=__codelineno-0-46 name=__codelineno-0-46></a>
<a id=__codelineno-0-47 name=__codelineno-0-47></a><span class=sd> ```python</span>
<a id=__codelineno-0-48 name=__codelineno-0-48></a><span class=sd> from django_components import cached_template</span>
<a id=__codelineno-0-49 name=__codelineno-0-49></a>
<a id=__codelineno-0-50 name=__codelineno-0-50></a><span class=sd> template = cached_template(&quot;Variable: {{ variable }}&quot;)</span>
<a id=__codelineno-0-51 name=__codelineno-0-51></a>
<a id=__codelineno-0-52 name=__codelineno-0-52></a><span class=sd> # You can optionally specify Template class, and other Template inputs:</span>
<a id=__codelineno-0-53 name=__codelineno-0-53></a><span class=sd> class MyTemplate(Template):</span>
<a id=__codelineno-0-54 name=__codelineno-0-54></a><span class=sd> pass</span>
<a id=__codelineno-0-55 name=__codelineno-0-55></a>
<a id=__codelineno-0-56 name=__codelineno-0-56></a><span class=sd> template = cached_template(</span>
<a id=__codelineno-0-57 name=__codelineno-0-57></a><span class=sd> &quot;Variable: {{ variable }}&quot;,</span>
<a id=__codelineno-0-58 name=__codelineno-0-58></a><span class=sd> template_cls=MyTemplate,</span>
<a id=__codelineno-0-59 name=__codelineno-0-59></a><span class=sd> name=...</span>
<a id=__codelineno-0-60 name=__codelineno-0-60></a><span class=sd> origin=...</span>
<a id=__codelineno-0-61 name=__codelineno-0-61></a><span class=sd> engine=...</span>
<a id=__codelineno-0-62 name=__codelineno-0-62></a><span class=sd> )</span>
<a id=__codelineno-0-63 name=__codelineno-0-63></a><span class=sd> ```</span>
<a id=__codelineno-0-64 name=__codelineno-0-64></a><span class=sd> &quot;&quot;&quot;</span> <span class=c1># noqa: E501</span>
<a id=__codelineno-0-65 name=__codelineno-0-65></a> <span class=n>template</span> <span class=o>=</span> <span class=n>_create_template</span><span class=p>(</span><span class=n>template_cls</span> <span class=ow>or</span> <span class=n>Template</span><span class=p>,</span> <span class=n>template_string</span><span class=p>,</span> <span class=n>engine</span><span class=p>)</span>
<a id=__codelineno-0-66 name=__codelineno-0-66></a>
<a id=__codelineno-0-67 name=__codelineno-0-67></a> <span class=c1># Assign the origin and name separately, so the caching doesn&#39;t depend on them</span>
<a id=__codelineno-0-68 name=__codelineno-0-68></a> <span class=c1># Since we might be accessing a template from cache, we want to define these only once</span>
<a id=__codelineno-0-69 name=__codelineno-0-69></a> <span class=k>if</span> <span class=ow>not</span> <span class=nb>getattr</span><span class=p>(</span><span class=n>template</span><span class=p>,</span> <span class=s2>&quot;_dc_cached&quot;</span><span class=p>,</span> <span class=kc>False</span><span class=p>):</span>
<a id=__codelineno-0-70 name=__codelineno-0-70></a> <span class=n>template</span><span class=o>.</span><span class=n>origin</span> <span class=o>=</span> <span class=n>origin</span> <span class=ow>or</span> <span class=n>Origin</span><span class=p>(</span><span class=n>UNKNOWN_SOURCE</span><span class=p>)</span>
<a id=__codelineno-0-71 name=__codelineno-0-71></a> <span class=n>template</span><span class=o>.</span><span class=n>name</span> <span class=o>=</span> <span class=n>name</span>
<a id=__codelineno-0-72 name=__codelineno-0-72></a> <span class=n>template</span><span class=o>.</span><span class=n>_dc_cached</span> <span class=o>=</span> <span class=kc>True</span>
<a id=__codelineno-0-73 name=__codelineno-0-73></a>
<a id=__codelineno-0-74 name=__codelineno-0-74></a> <span class=k>return</span> <span class=n>template</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> </div> </div> </div> <div class="doc doc-object doc-module"> <h2 id=django_components.template_loader class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-module"></code> <span class="doc doc-object-name doc-module-name">template_loader</span> <a href=#django_components.template_loader class=headerlink title="Permanent link">¤</a></h2> <div class="doc doc-contents "> <p>Template loader that loads templates from each Django app's "components" directory.</p> <p><span class=doc-section-title>Classes:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.template_loader.Loader href=#django_components.template_loader.Loader>Loader</a></code></b> <div class=doc-md-description> </div> </li> </ul> <div class="doc doc-children"> <div class="doc doc-object doc-class"> <h3 id=django_components.template_loader.Loader class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-class"></code> <span class="doc doc-object-name doc-class-name">Loader</span> <a href=#django_components.template_loader.Loader class=headerlink title="Permanent link">¤</a></h3> <div class="doc doc-contents "> <p class="doc doc-class-bases"> Bases: <code><a class="autorefs autorefs-external" title=django.template.loaders.filesystem.Loader href=https://docs.djangoproject.com/en/5.0/ref/templates/api/#django.template.loaders.filesystem.Loader>Loader</a></code></p> <p><span class=doc-section-title>Methods:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.template_loader.Loader.get_dirs href=#django_components.template_loader.Loader.get_dirs>get_dirs</a></code></b> <div class=doc-md-description> <p>Prepare directories that may contain component files:</p> </div> </li> </ul> <div class="doc doc-children"> <div class="doc doc-object doc-function"> <h4 id=django_components.template_loader.Loader.get_dirs class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-method"></code> <span class="doc doc-object-name doc-function-name">get_dirs</span> <a href=#django_components.template_loader.Loader.get_dirs class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>get_dirs</span><span class=p>(</span><span class=n>include_apps</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/functions.html#bool>bool</a></span> <span class=o>=</span> <span class=kc>True</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-external" title=typing.List href=https://docs.python.org/3.12/library/typing.html#typing.List>List</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=pathlib.Path href=https://docs.python.org/3.12/library/pathlib.html#pathlib.Path>Path</a></span><span class=p>]</span>
</code></pre></div> <div class="doc doc-contents "> <p>Prepare directories that may contain component files:</p> <p>Searches for dirs set in <code>COMPONENTS.dirs</code> settings. If none set, defaults to searching for a "components" app. The dirs in <code>COMPONENTS.dirs</code> must be absolute paths.</p> <p>In addition to that, also all apps are checked for <code>[app]/components</code> dirs.</p> <p>Paths are accepted only if they resolve to a directory. E.g. <code>/path/to/django_project/my_app/components/</code>.</p> <p><code>BASE_DIR</code> setting is required.</p> <details class=quote> <summary>Source code in <code>src/django_components/template_loader.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-14>14</a></span>
<span class=normal><a href=#__codelineno-0-15>15</a></span>
<span class=normal><a href=#__codelineno-0-16>16</a></span>
<span class=normal><a href=#__codelineno-0-17>17</a></span>
<span class=normal><a href=#__codelineno-0-18>18</a></span>
<span class=normal><a href=#__codelineno-0-19>19</a></span>
<span class=normal><a href=#__codelineno-0-20>20</a></span>
<span class=normal><a href=#__codelineno-0-21>21</a></span>
<span class=normal><a href=#__codelineno-0-22>22</a></span>
<span class=normal><a href=#__codelineno-0-23>23</a></span>
<span class=normal><a href=#__codelineno-0-24>24</a></span>
<span class=normal><a href=#__codelineno-0-25>25</a></span>
<span class=normal><a href=#__codelineno-0-26>26</a></span>
<span class=normal><a href=#__codelineno-0-27>27</a></span>
<span class=normal><a href=#__codelineno-0-28>28</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-14 name=__codelineno-0-14></a><span class=k>def</span> <span class=nf>get_dirs</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>include_apps</span><span class=p>:</span> <span class=nb>bool</span> <span class=o>=</span> <span class=kc>True</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n>List</span><span class=p>[</span><span class=n>Path</span><span class=p>]:</span>
<a id=__codelineno-0-15 name=__codelineno-0-15></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-16 name=__codelineno-0-16></a><span class=sd> Prepare directories that may contain component files:</span>
<a id=__codelineno-0-17 name=__codelineno-0-17></a>
<a id=__codelineno-0-18 name=__codelineno-0-18></a><span class=sd> Searches for dirs set in `COMPONENTS.dirs` settings. If none set, defaults to searching</span>
<a id=__codelineno-0-19 name=__codelineno-0-19></a><span class=sd> for a &quot;components&quot; app. The dirs in `COMPONENTS.dirs` must be absolute paths.</span>
<a id=__codelineno-0-20 name=__codelineno-0-20></a>
<a id=__codelineno-0-21 name=__codelineno-0-21></a><span class=sd> In addition to that, also all apps are checked for `[app]/components` dirs.</span>
<a id=__codelineno-0-22 name=__codelineno-0-22></a>
<a id=__codelineno-0-23 name=__codelineno-0-23></a><span class=sd> Paths are accepted only if they resolve to a directory.</span>
<a id=__codelineno-0-24 name=__codelineno-0-24></a><span class=sd> E.g. `/path/to/django_project/my_app/components/`.</span>
<a id=__codelineno-0-25 name=__codelineno-0-25></a>
<a id=__codelineno-0-26 name=__codelineno-0-26></a><span class=sd> `BASE_DIR` setting is required.</span>
<a id=__codelineno-0-27 name=__codelineno-0-27></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-28 name=__codelineno-0-28></a> <span class=k>return</span> <span class=n>get_component_dirs</span><span class=p>(</span><span class=n>include_apps</span><span class=p>)</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> </div> </div> </div> </div> </div> </div> <div class="doc doc-object doc-module"> <h2 id=django_components.template_parser class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-module"></code> <span class="doc doc-object-name doc-module-name">template_parser</span> <a href=#django_components.template_parser class=headerlink title="Permanent link">¤</a></h2> <div class="doc doc-contents "> <p>Overrides for the Django Template system to allow finer control over template parsing.</p> <p>Based on Django Slippers v0.6.2 - <a href=https://github.com/mixxorz/slippers/blob/main/slippers/template.py>https://github.com/mixxorz/slippers/blob/main/slippers/template.py</a></p> <p><span class=doc-section-title>Functions:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.template_parser.parse_bits href=#django_components.template_parser.parse_bits>parse_bits</a></code></b> <div class=doc-md-description> <p>Parse bits for template tag helpers simple_tag and inclusion_tag, in</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.template_parser.token_kwargs href=#django_components.template_parser.token_kwargs>token_kwargs</a></code></b> <div class=doc-md-description> <p>Parse token keyword arguments and return a dictionary of the arguments</p> </div> </li> </ul> <div class="doc doc-children"> <div class="doc doc-object doc-function"> <h3 id=django_components.template_parser.parse_bits class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-function"></code> <span class="doc doc-object-name doc-function-name">parse_bits</span> <a href=#django_components.template_parser.parse_bits class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>parse_bits</span><span class=p>(</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a> <span class=n>parser</span><span class=p>:</span> <span class=n><span title=django.template.base.Parser>Parser</span></span><span class=p>,</span> <span class=n>bits</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.List href=https://docs.python.org/3.12/library/typing.html#typing.List>List</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>],</span> <span class=n>params</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.List href=https://docs.python.org/3.12/library/typing.html#typing.List>List</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>],</span> <span class=n>name</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-external" title=typing.Tuple href=https://docs.python.org/3.12/library/typing.html#typing.Tuple>Tuple</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.List href=https://docs.python.org/3.12/library/typing.html#typing.List>List</a></span><span class=p>[</span><span class=n><span title=django.template.base.FilterExpression>FilterExpression</span></span><span class=p>],</span> <span class=n><a class="autorefs autorefs-external" title=typing.List href=https://docs.python.org/3.12/library/typing.html#typing.List>List</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Tuple href=https://docs.python.org/3.12/library/typing.html#typing.Tuple>Tuple</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span> <span class=n><span title=django.template.base.FilterExpression>FilterExpression</span></span><span class=p>]]]</span>
</code></pre></div> <div class="doc doc-contents "> <p>Parse bits for template tag helpers simple_tag and inclusion_tag, in particular by detecting syntax errors and by extracting positional and keyword arguments.</p> <p>This is a simplified version of <code>django.template.library.parse_bits</code> where we use custom regex to handle special characters in keyword names.</p> <p>Furthermore, our version allows duplicate keys, and instead of return kwargs as a dict, we return it as a list of key-value pairs. So it is up to the user of this function to decide whether they support duplicate keys or not.</p> <details class=quote> <summary>Source code in <code>src/django_components/template_parser.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-155>155</a></span>
<span class=normal><a href=#__codelineno-0-156>156</a></span>
<span class=normal><a href=#__codelineno-0-157>157</a></span>
<span class=normal><a href=#__codelineno-0-158>158</a></span>
<span class=normal><a href=#__codelineno-0-159>159</a></span>
<span class=normal><a href=#__codelineno-0-160>160</a></span>
<span class=normal><a href=#__codelineno-0-161>161</a></span>
<span class=normal><a href=#__codelineno-0-162>162</a></span>
<span class=normal><a href=#__codelineno-0-163>163</a></span>
<span class=normal><a href=#__codelineno-0-164>164</a></span>
<span class=normal><a href=#__codelineno-0-165>165</a></span>
<span class=normal><a href=#__codelineno-0-166>166</a></span>
<span class=normal><a href=#__codelineno-0-167>167</a></span>
<span class=normal><a href=#__codelineno-0-168>168</a></span>
<span class=normal><a href=#__codelineno-0-169>169</a></span>
<span class=normal><a href=#__codelineno-0-170>170</a></span>
<span class=normal><a href=#__codelineno-0-171>171</a></span>
<span class=normal><a href=#__codelineno-0-172>172</a></span>
<span class=normal><a href=#__codelineno-0-173>173</a></span>
<span class=normal><a href=#__codelineno-0-174>174</a></span>
<span class=normal><a href=#__codelineno-0-175>175</a></span>
<span class=normal><a href=#__codelineno-0-176>176</a></span>
<span class=normal><a href=#__codelineno-0-177>177</a></span>
<span class=normal><a href=#__codelineno-0-178>178</a></span>
<span class=normal><a href=#__codelineno-0-179>179</a></span>
<span class=normal><a href=#__codelineno-0-180>180</a></span>
<span class=normal><a href=#__codelineno-0-181>181</a></span>
<span class=normal><a href=#__codelineno-0-182>182</a></span>
<span class=normal><a href=#__codelineno-0-183>183</a></span>
<span class=normal><a href=#__codelineno-0-184>184</a></span>
<span class=normal><a href=#__codelineno-0-185>185</a></span>
<span class=normal><a href=#__codelineno-0-186>186</a></span>
<span class=normal><a href=#__codelineno-0-187>187</a></span>
<span class=normal><a href=#__codelineno-0-188>188</a></span>
<span class=normal><a href=#__codelineno-0-189>189</a></span>
<span class=normal><a href=#__codelineno-0-190>190</a></span>
<span class=normal><a href=#__codelineno-0-191>191</a></span>
<span class=normal><a href=#__codelineno-0-192>192</a></span>
<span class=normal><a href=#__codelineno-0-193>193</a></span>
<span class=normal><a href=#__codelineno-0-194>194</a></span>
<span class=normal><a href=#__codelineno-0-195>195</a></span>
<span class=normal><a href=#__codelineno-0-196>196</a></span>
<span class=normal><a href=#__codelineno-0-197>197</a></span>
<span class=normal><a href=#__codelineno-0-198>198</a></span>
<span class=normal><a href=#__codelineno-0-199>199</a></span>
<span class=normal><a href=#__codelineno-0-200>200</a></span>
<span class=normal><a href=#__codelineno-0-201>201</a></span>
<span class=normal><a href=#__codelineno-0-202>202</a></span>
<span class=normal><a href=#__codelineno-0-203>203</a></span>
<span class=normal><a href=#__codelineno-0-204>204</a></span>
<span class=normal><a href=#__codelineno-0-205>205</a></span>
<span class=normal><a href=#__codelineno-0-206>206</a></span>
<span class=normal><a href=#__codelineno-0-207>207</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-155 name=__codelineno-0-155></a><span class=k>def</span> <span class=nf>parse_bits</span><span class=p>(</span>
<a id=__codelineno-0-156 name=__codelineno-0-156></a> <span class=n>parser</span><span class=p>:</span> <span class=n>Parser</span><span class=p>,</span>
<a id=__codelineno-0-157 name=__codelineno-0-157></a> <span class=n>bits</span><span class=p>:</span> <span class=n>List</span><span class=p>[</span><span class=nb>str</span><span class=p>],</span>
<a id=__codelineno-0-158 name=__codelineno-0-158></a> <span class=n>params</span><span class=p>:</span> <span class=n>List</span><span class=p>[</span><span class=nb>str</span><span class=p>],</span>
<a id=__codelineno-0-159 name=__codelineno-0-159></a> <span class=n>name</span><span class=p>:</span> <span class=nb>str</span><span class=p>,</span>
<a id=__codelineno-0-160 name=__codelineno-0-160></a><span class=p>)</span> <span class=o>-&gt;</span> <span class=n>Tuple</span><span class=p>[</span><span class=n>List</span><span class=p>[</span><span class=n>FilterExpression</span><span class=p>],</span> <span class=n>List</span><span class=p>[</span><span class=n>Tuple</span><span class=p>[</span><span class=nb>str</span><span class=p>,</span> <span class=n>FilterExpression</span><span class=p>]]]:</span>
<a id=__codelineno-0-161 name=__codelineno-0-161></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-162 name=__codelineno-0-162></a><span class=sd> Parse bits for template tag helpers simple_tag and inclusion_tag, in</span>
<a id=__codelineno-0-163 name=__codelineno-0-163></a><span class=sd> particular by detecting syntax errors and by extracting positional and</span>
<a id=__codelineno-0-164 name=__codelineno-0-164></a><span class=sd> keyword arguments.</span>
<a id=__codelineno-0-165 name=__codelineno-0-165></a>
<a id=__codelineno-0-166 name=__codelineno-0-166></a><span class=sd> This is a simplified version of `django.template.library.parse_bits`</span>
<a id=__codelineno-0-167 name=__codelineno-0-167></a><span class=sd> where we use custom regex to handle special characters in keyword names.</span>
<a id=__codelineno-0-168 name=__codelineno-0-168></a>
<a id=__codelineno-0-169 name=__codelineno-0-169></a><span class=sd> Furthermore, our version allows duplicate keys, and instead of return kwargs</span>
<a id=__codelineno-0-170 name=__codelineno-0-170></a><span class=sd> as a dict, we return it as a list of key-value pairs. So it is up to the</span>
<a id=__codelineno-0-171 name=__codelineno-0-171></a><span class=sd> user of this function to decide whether they support duplicate keys or not.</span>
<a id=__codelineno-0-172 name=__codelineno-0-172></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-173 name=__codelineno-0-173></a> <span class=n>args</span><span class=p>:</span> <span class=n>List</span><span class=p>[</span><span class=n>FilterExpression</span><span class=p>]</span> <span class=o>=</span> <span class=p>[]</span>
<a id=__codelineno-0-174 name=__codelineno-0-174></a> <span class=n>kwargs</span><span class=p>:</span> <span class=n>List</span><span class=p>[</span><span class=n>Tuple</span><span class=p>[</span><span class=nb>str</span><span class=p>,</span> <span class=n>FilterExpression</span><span class=p>]]</span> <span class=o>=</span> <span class=p>[]</span>
<a id=__codelineno-0-175 name=__codelineno-0-175></a> <span class=n>unhandled_params</span> <span class=o>=</span> <span class=nb>list</span><span class=p>(</span><span class=n>params</span><span class=p>)</span>
<a id=__codelineno-0-176 name=__codelineno-0-176></a> <span class=k>for</span> <span class=n>bit</span> <span class=ow>in</span> <span class=n>bits</span><span class=p>:</span>
<a id=__codelineno-0-177 name=__codelineno-0-177></a> <span class=c1># First we try to extract a potential kwarg from the bit</span>
<a id=__codelineno-0-178 name=__codelineno-0-178></a> <span class=n>kwarg</span> <span class=o>=</span> <span class=n>token_kwargs</span><span class=p>([</span><span class=n>bit</span><span class=p>],</span> <span class=n>parser</span><span class=p>)</span>
<a id=__codelineno-0-179 name=__codelineno-0-179></a> <span class=k>if</span> <span class=n>kwarg</span><span class=p>:</span>
<a id=__codelineno-0-180 name=__codelineno-0-180></a> <span class=c1># The kwarg was successfully extracted</span>
<a id=__codelineno-0-181 name=__codelineno-0-181></a> <span class=n>param</span><span class=p>,</span> <span class=n>value</span> <span class=o>=</span> <span class=n>kwarg</span><span class=o>.</span><span class=n>popitem</span><span class=p>()</span>
<a id=__codelineno-0-182 name=__codelineno-0-182></a> <span class=c1># All good, record the keyword argument</span>
<a id=__codelineno-0-183 name=__codelineno-0-183></a> <span class=n>kwargs</span><span class=o>.</span><span class=n>append</span><span class=p>((</span><span class=nb>str</span><span class=p>(</span><span class=n>param</span><span class=p>),</span> <span class=n>value</span><span class=p>))</span>
<a id=__codelineno-0-184 name=__codelineno-0-184></a> <span class=k>if</span> <span class=n>param</span> <span class=ow>in</span> <span class=n>unhandled_params</span><span class=p>:</span>
<a id=__codelineno-0-185 name=__codelineno-0-185></a> <span class=c1># If using the keyword syntax for a positional arg, then</span>
<a id=__codelineno-0-186 name=__codelineno-0-186></a> <span class=c1># consume it.</span>
<a id=__codelineno-0-187 name=__codelineno-0-187></a> <span class=n>unhandled_params</span><span class=o>.</span><span class=n>remove</span><span class=p>(</span><span class=n>param</span><span class=p>)</span>
<a id=__codelineno-0-188 name=__codelineno-0-188></a> <span class=k>else</span><span class=p>:</span>
<a id=__codelineno-0-189 name=__codelineno-0-189></a> <span class=k>if</span> <span class=n>kwargs</span><span class=p>:</span>
<a id=__codelineno-0-190 name=__codelineno-0-190></a> <span class=k>raise</span> <span class=n>TemplateSyntaxError</span><span class=p>(</span>
<a id=__codelineno-0-191 name=__codelineno-0-191></a> <span class=s2>&quot;&#39;</span><span class=si>%s</span><span class=s2>&#39; received some positional argument(s) after some &quot;</span> <span class=s2>&quot;keyword argument(s)&quot;</span> <span class=o>%</span> <span class=n>name</span>
<a id=__codelineno-0-192 name=__codelineno-0-192></a> <span class=p>)</span>
<a id=__codelineno-0-193 name=__codelineno-0-193></a> <span class=k>else</span><span class=p>:</span>
<a id=__codelineno-0-194 name=__codelineno-0-194></a> <span class=c1># Record the positional argument</span>
<a id=__codelineno-0-195 name=__codelineno-0-195></a> <span class=n>args</span><span class=o>.</span><span class=n>append</span><span class=p>(</span><span class=n>parser</span><span class=o>.</span><span class=n>compile_filter</span><span class=p>(</span><span class=n>bit</span><span class=p>))</span>
<a id=__codelineno-0-196 name=__codelineno-0-196></a> <span class=k>try</span><span class=p>:</span>
<a id=__codelineno-0-197 name=__codelineno-0-197></a> <span class=c1># Consume from the list of expected positional arguments</span>
<a id=__codelineno-0-198 name=__codelineno-0-198></a> <span class=n>unhandled_params</span><span class=o>.</span><span class=n>pop</span><span class=p>(</span><span class=mi>0</span><span class=p>)</span>
<a id=__codelineno-0-199 name=__codelineno-0-199></a> <span class=k>except</span> <span class=ne>IndexError</span><span class=p>:</span>
<a id=__codelineno-0-200 name=__codelineno-0-200></a> <span class=k>pass</span>
<a id=__codelineno-0-201 name=__codelineno-0-201></a> <span class=k>if</span> <span class=n>unhandled_params</span><span class=p>:</span>
<a id=__codelineno-0-202 name=__codelineno-0-202></a> <span class=c1># Some positional arguments were not supplied</span>
<a id=__codelineno-0-203 name=__codelineno-0-203></a> <span class=k>raise</span> <span class=n>TemplateSyntaxError</span><span class=p>(</span>
<a id=__codelineno-0-204 name=__codelineno-0-204></a> <span class=s2>&quot;&#39;</span><span class=si>%s</span><span class=s2>&#39; did not receive value(s) for the argument(s): </span><span class=si>%s</span><span class=s2>&quot;</span>
<a id=__codelineno-0-205 name=__codelineno-0-205></a> <span class=o>%</span> <span class=p>(</span><span class=n>name</span><span class=p>,</span> <span class=s2>&quot;, &quot;</span><span class=o>.</span><span class=n>join</span><span class=p>(</span><span class=s2>&quot;&#39;</span><span class=si>%s</span><span class=s2>&#39;&quot;</span> <span class=o>%</span> <span class=n>p</span> <span class=k>for</span> <span class=n>p</span> <span class=ow>in</span> <span class=n>unhandled_params</span><span class=p>))</span>
<a id=__codelineno-0-206 name=__codelineno-0-206></a> <span class=p>)</span>
<a id=__codelineno-0-207 name=__codelineno-0-207></a> <span class=k>return</span> <span class=n>args</span><span class=p>,</span> <span class=n>kwargs</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h3 id=django_components.template_parser.token_kwargs class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-function"></code> <span class="doc doc-object-name doc-function-name">token_kwargs</span> <a href=#django_components.template_parser.token_kwargs class=headerlink title="Permanent link">¤</a></h3> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>token_kwargs</span><span class=p>(</span><span class=n>bits</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.List href=https://docs.python.org/3.12/library/typing.html#typing.List>List</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>],</span> <span class=n>parser</span><span class=p>:</span> <span class=n><span title=django.template.base.Parser>Parser</span></span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-external" title=typing.Dict href=https://docs.python.org/3.12/library/typing.html#typing.Dict>Dict</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span> <span class=n><span title=django.template.base.FilterExpression>FilterExpression</span></span><span class=p>]</span>
</code></pre></div> <div class="doc doc-contents "> <p>Parse token keyword arguments and return a dictionary of the arguments retrieved from the <code>bits</code> token list.</p> <p><code>bits</code> is a list containing the remainder of the token (split by spaces) that is to be checked for arguments. Valid arguments are removed from this list.</p> <p>There is no requirement for all remaining token <code>bits</code> to be keyword arguments, so return the dictionary as soon as an invalid argument format is reached.</p> <details class=quote> <summary>Source code in <code>src/django_components/template_parser.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-111>111</a></span>
<span class=normal><a href=#__codelineno-0-112>112</a></span>
<span class=normal><a href=#__codelineno-0-113>113</a></span>
<span class=normal><a href=#__codelineno-0-114>114</a></span>
<span class=normal><a href=#__codelineno-0-115>115</a></span>
<span class=normal><a href=#__codelineno-0-116>116</a></span>
<span class=normal><a href=#__codelineno-0-117>117</a></span>
<span class=normal><a href=#__codelineno-0-118>118</a></span>
<span class=normal><a href=#__codelineno-0-119>119</a></span>
<span class=normal><a href=#__codelineno-0-120>120</a></span>
<span class=normal><a href=#__codelineno-0-121>121</a></span>
<span class=normal><a href=#__codelineno-0-122>122</a></span>
<span class=normal><a href=#__codelineno-0-123>123</a></span>
<span class=normal><a href=#__codelineno-0-124>124</a></span>
<span class=normal><a href=#__codelineno-0-125>125</a></span>
<span class=normal><a href=#__codelineno-0-126>126</a></span>
<span class=normal><a href=#__codelineno-0-127>127</a></span>
<span class=normal><a href=#__codelineno-0-128>128</a></span>
<span class=normal><a href=#__codelineno-0-129>129</a></span>
<span class=normal><a href=#__codelineno-0-130>130</a></span>
<span class=normal><a href=#__codelineno-0-131>131</a></span>
<span class=normal><a href=#__codelineno-0-132>132</a></span>
<span class=normal><a href=#__codelineno-0-133>133</a></span>
<span class=normal><a href=#__codelineno-0-134>134</a></span>
<span class=normal><a href=#__codelineno-0-135>135</a></span>
<span class=normal><a href=#__codelineno-0-136>136</a></span>
<span class=normal><a href=#__codelineno-0-137>137</a></span>
<span class=normal><a href=#__codelineno-0-138>138</a></span>
<span class=normal><a href=#__codelineno-0-139>139</a></span>
<span class=normal><a href=#__codelineno-0-140>140</a></span>
<span class=normal><a href=#__codelineno-0-141>141</a></span>
<span class=normal><a href=#__codelineno-0-142>142</a></span>
<span class=normal><a href=#__codelineno-0-143>143</a></span>
<span class=normal><a href=#__codelineno-0-144>144</a></span>
<span class=normal><a href=#__codelineno-0-145>145</a></span>
<span class=normal><a href=#__codelineno-0-146>146</a></span>
<span class=normal><a href=#__codelineno-0-147>147</a></span>
<span class=normal><a href=#__codelineno-0-148>148</a></span>
<span class=normal><a href=#__codelineno-0-149>149</a></span>
<span class=normal><a href=#__codelineno-0-150>150</a></span>
<span class=normal><a href=#__codelineno-0-151>151</a></span>
<span class=normal><a href=#__codelineno-0-152>152</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-111 name=__codelineno-0-111></a><span class=k>def</span> <span class=nf>token_kwargs</span><span class=p>(</span><span class=n>bits</span><span class=p>:</span> <span class=n>List</span><span class=p>[</span><span class=nb>str</span><span class=p>],</span> <span class=n>parser</span><span class=p>:</span> <span class=n>Parser</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n>Dict</span><span class=p>[</span><span class=nb>str</span><span class=p>,</span> <span class=n>FilterExpression</span><span class=p>]:</span>
<a id=__codelineno-0-112 name=__codelineno-0-112></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-113 name=__codelineno-0-113></a><span class=sd> Parse token keyword arguments and return a dictionary of the arguments</span>
<a id=__codelineno-0-114 name=__codelineno-0-114></a><span class=sd> retrieved from the ``bits`` token list.</span>
<a id=__codelineno-0-115 name=__codelineno-0-115></a>
<a id=__codelineno-0-116 name=__codelineno-0-116></a><span class=sd> `bits` is a list containing the remainder of the token (split by spaces)</span>
<a id=__codelineno-0-117 name=__codelineno-0-117></a><span class=sd> that is to be checked for arguments. Valid arguments are removed from this</span>
<a id=__codelineno-0-118 name=__codelineno-0-118></a><span class=sd> list.</span>
<a id=__codelineno-0-119 name=__codelineno-0-119></a>
<a id=__codelineno-0-120 name=__codelineno-0-120></a><span class=sd> There is no requirement for all remaining token ``bits`` to be keyword</span>
<a id=__codelineno-0-121 name=__codelineno-0-121></a><span class=sd> arguments, so return the dictionary as soon as an invalid argument format</span>
<a id=__codelineno-0-122 name=__codelineno-0-122></a><span class=sd> is reached.</span>
<a id=__codelineno-0-123 name=__codelineno-0-123></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-124 name=__codelineno-0-124></a> <span class=k>if</span> <span class=ow>not</span> <span class=n>bits</span><span class=p>:</span>
<a id=__codelineno-0-125 name=__codelineno-0-125></a> <span class=k>return</span> <span class=p>{}</span>
<a id=__codelineno-0-126 name=__codelineno-0-126></a> <span class=n>match</span> <span class=o>=</span> <span class=n>kwarg_re</span><span class=o>.</span><span class=n>match</span><span class=p>(</span><span class=n>bits</span><span class=p>[</span><span class=mi>0</span><span class=p>])</span>
<a id=__codelineno-0-127 name=__codelineno-0-127></a> <span class=n>kwarg_format</span> <span class=o>=</span> <span class=n>match</span> <span class=ow>and</span> <span class=n>match</span><span class=p>[</span><span class=mi>1</span><span class=p>]</span>
<a id=__codelineno-0-128 name=__codelineno-0-128></a> <span class=k>if</span> <span class=ow>not</span> <span class=n>kwarg_format</span><span class=p>:</span>
<a id=__codelineno-0-129 name=__codelineno-0-129></a> <span class=k>return</span> <span class=p>{}</span>
<a id=__codelineno-0-130 name=__codelineno-0-130></a>
<a id=__codelineno-0-131 name=__codelineno-0-131></a> <span class=n>kwargs</span><span class=p>:</span> <span class=n>Dict</span><span class=p>[</span><span class=nb>str</span><span class=p>,</span> <span class=n>FilterExpression</span><span class=p>]</span> <span class=o>=</span> <span class=p>{}</span>
<a id=__codelineno-0-132 name=__codelineno-0-132></a> <span class=k>while</span> <span class=n>bits</span><span class=p>:</span>
<a id=__codelineno-0-133 name=__codelineno-0-133></a> <span class=k>if</span> <span class=n>kwarg_format</span><span class=p>:</span>
<a id=__codelineno-0-134 name=__codelineno-0-134></a> <span class=n>match</span> <span class=o>=</span> <span class=n>kwarg_re</span><span class=o>.</span><span class=n>match</span><span class=p>(</span><span class=n>bits</span><span class=p>[</span><span class=mi>0</span><span class=p>])</span>
<a id=__codelineno-0-135 name=__codelineno-0-135></a> <span class=k>if</span> <span class=ow>not</span> <span class=n>match</span> <span class=ow>or</span> <span class=ow>not</span> <span class=n>match</span><span class=p>[</span><span class=mi>1</span><span class=p>]:</span>
<a id=__codelineno-0-136 name=__codelineno-0-136></a> <span class=k>return</span> <span class=n>kwargs</span>
<a id=__codelineno-0-137 name=__codelineno-0-137></a> <span class=n>key</span><span class=p>,</span> <span class=n>value</span> <span class=o>=</span> <span class=n>match</span><span class=o>.</span><span class=n>groups</span><span class=p>()</span>
<a id=__codelineno-0-138 name=__codelineno-0-138></a> <span class=k>del</span> <span class=n>bits</span><span class=p>[:</span><span class=mi>1</span><span class=p>]</span>
<a id=__codelineno-0-139 name=__codelineno-0-139></a> <span class=k>else</span><span class=p>:</span>
<a id=__codelineno-0-140 name=__codelineno-0-140></a> <span class=k>if</span> <span class=nb>len</span><span class=p>(</span><span class=n>bits</span><span class=p>)</span> <span class=o>&lt;</span> <span class=mi>3</span> <span class=ow>or</span> <span class=n>bits</span><span class=p>[</span><span class=mi>1</span><span class=p>]</span> <span class=o>!=</span> <span class=s2>&quot;as&quot;</span><span class=p>:</span>
<a id=__codelineno-0-141 name=__codelineno-0-141></a> <span class=k>return</span> <span class=n>kwargs</span>
<a id=__codelineno-0-142 name=__codelineno-0-142></a> <span class=n>key</span><span class=p>,</span> <span class=n>value</span> <span class=o>=</span> <span class=n>bits</span><span class=p>[</span><span class=mi>2</span><span class=p>],</span> <span class=n>bits</span><span class=p>[</span><span class=mi>0</span><span class=p>]</span>
<a id=__codelineno-0-143 name=__codelineno-0-143></a> <span class=k>del</span> <span class=n>bits</span><span class=p>[:</span><span class=mi>3</span><span class=p>]</span>
<a id=__codelineno-0-144 name=__codelineno-0-144></a>
<a id=__codelineno-0-145 name=__codelineno-0-145></a> <span class=c1># This is the only difference from the original token_kwargs. We use</span>
<a id=__codelineno-0-146 name=__codelineno-0-146></a> <span class=c1># the ComponentsFilterExpression instead of the original FilterExpression.</span>
<a id=__codelineno-0-147 name=__codelineno-0-147></a> <span class=n>kwargs</span><span class=p>[</span><span class=n>key</span><span class=p>]</span> <span class=o>=</span> <span class=n>ComponentsFilterExpression</span><span class=p>(</span><span class=n>value</span><span class=p>,</span> <span class=n>parser</span><span class=p>)</span>
<a id=__codelineno-0-148 name=__codelineno-0-148></a> <span class=k>if</span> <span class=n>bits</span> <span class=ow>and</span> <span class=ow>not</span> <span class=n>kwarg_format</span><span class=p>:</span>
<a id=__codelineno-0-149 name=__codelineno-0-149></a> <span class=k>if</span> <span class=n>bits</span><span class=p>[</span><span class=mi>0</span><span class=p>]</span> <span class=o>!=</span> <span class=s2>&quot;and&quot;</span><span class=p>:</span>
<a id=__codelineno-0-150 name=__codelineno-0-150></a> <span class=k>return</span> <span class=n>kwargs</span>
<a id=__codelineno-0-151 name=__codelineno-0-151></a> <span class=k>del</span> <span class=n>bits</span><span class=p>[:</span><span class=mi>1</span><span class=p>]</span>
<a id=__codelineno-0-152 name=__codelineno-0-152></a> <span class=k>return</span> <span class=n>kwargs</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> </div> </div> </div> <div class="doc doc-object doc-module"> <h2 id=django_components.templatetags class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-module"></code> <span class="doc doc-object-name doc-module-name">templatetags</span> <a href=#django_components.templatetags class=headerlink title="Permanent link">¤</a></h2> <div class="doc doc-contents "> <p><span class=doc-section-title>Modules:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.templatetags.component_tags href=#django_components.templatetags.component_tags>component_tags</a></code></b> <div class=doc-md-description> </div> </li> </ul> <div class="doc doc-children"> <div class="doc doc-object doc-module"> <h3 id=django_components.templatetags.component_tags class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-module"></code> <span class="doc doc-object-name doc-module-name">component_tags</span> <a href=#django_components.templatetags.component_tags class=headerlink title="Permanent link">¤</a></h3> <div class="doc doc-contents "> <p><span class=doc-section-title>Functions:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.templatetags.component_tags.component href=#django_components.templatetags.component_tags.component>component</a></code></b> <div class=doc-md-description> <p>Renders one of the components that was previously registered with</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.templatetags.component_tags.component_css_dependencies href=#django_components.templatetags.component_tags.component_css_dependencies>component_css_dependencies</a></code></b> <div class=doc-md-description> <p>Marks location where CSS link tags should be rendered after the whole HTML has been generated.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.templatetags.component_tags.component_js_dependencies href=#django_components.templatetags.component_tags.component_js_dependencies>component_js_dependencies</a></code></b> <div class=doc-md-description> <p>Marks location where JS link tags should be rendered after the whole HTML has been generated.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.templatetags.component_tags.fill href=#django_components.templatetags.component_tags.fill>fill</a></code></b> <div class=doc-md-description> <p>Use this tag to insert content into component's slots.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.templatetags.component_tags.html_attrs href=#django_components.templatetags.component_tags.html_attrs>html_attrs</a></code></b> <div class=doc-md-description> <p>Generate HTML attributes (<code>key="value"</code>), combining data from multiple sources,</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.templatetags.component_tags.provide href=#django_components.templatetags.component_tags.provide>provide</a></code></b> <div class=doc-md-description> <p>The "provider" part of the <a href=../../concepts/advanced/provide_inject>provide / inject feature</a>.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.templatetags.component_tags.slot href=#django_components.templatetags.component_tags.slot>slot</a></code></b> <div class=doc-md-description> <p>Slot tag marks a place inside a component where content can be inserted</p> </div> </li> </ul> <div class="doc doc-children"> <div class="doc doc-object doc-class"> <h4 id=django_components.templatetags.component_tags.TagSpec class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-class"></code> <span class="doc doc-object-name doc-class-name">TagSpec</span> <a href=#django_components.templatetags.component_tags.TagSpec class=headerlink title="Permanent link">¤</a></h4> <div class="doc doc-contents "> <p class="doc doc-class-bases"> Bases: <code><a class="autorefs autorefs-external" title=typing.NamedTuple href=https://docs.python.org/3.12/library/typing.html#typing.NamedTuple>NamedTuple</a></code></p> <p>Definition of args, kwargs, flags, etc, for a template tag.</p> <p><span class=doc-section-title>Attributes:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.templatetags.component_tags.TagSpec.end_tag href=#django_components.templatetags.component_tags.TagSpec.end_tag>end_tag</a></code></b> (<code><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>]</code>) <div class=doc-md-description> <p>End tag.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.templatetags.component_tags.TagSpec.flags href=#django_components.templatetags.component_tags.TagSpec.flags>flags</a></code></b> (<code><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a>[<a class="autorefs autorefs-external" title=typing.List href=https://docs.python.org/3.12/library/typing.html#typing.List>List</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>]]</code>) <div class=doc-md-description> <p>List of allowed flags.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.templatetags.component_tags.TagSpec.keywordonly_args href=#django_components.templatetags.component_tags.TagSpec.keywordonly_args>keywordonly_args</a></code></b> (<code><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a>[<a class="autorefs autorefs-external" title=typing.Union href=https://docs.python.org/3.12/library/typing.html#typing.Union>Union</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/functions.html#bool>bool</a>, <a class="autorefs autorefs-external" title=typing.List href=https://docs.python.org/3.12/library/typing.html#typing.List>List</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>]]]</code>) <div class=doc-md-description> <p>Parameters that MUST be given only as kwargs (not accounting for <code>pos_or_keyword_args</code>).</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.templatetags.component_tags.TagSpec.optional_kwargs href=#django_components.templatetags.component_tags.TagSpec.optional_kwargs>optional_kwargs</a></code></b> (<code><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a>[<a class="autorefs autorefs-external" title=typing.List href=https://docs.python.org/3.12/library/typing.html#typing.List>List</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>]]</code>) <div class=doc-md-description> <p>Specify which kwargs can be optional.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.templatetags.component_tags.TagSpec.pos_or_keyword_args href=#django_components.templatetags.component_tags.TagSpec.pos_or_keyword_args>pos_or_keyword_args</a></code></b> (<code><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a>[<a class="autorefs autorefs-external" title=typing.List href=https://docs.python.org/3.12/library/typing.html#typing.List>List</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>]]</code>) <div class=doc-md-description> <p>Like regular Python kwargs, these can be given EITHER as positional OR as keyword arguments.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.templatetags.component_tags.TagSpec.positional_args_allow_extra href=#django_components.templatetags.component_tags.TagSpec.positional_args_allow_extra>positional_args_allow_extra</a></code></b> (<code><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/functions.html#bool>bool</a></code>) <div class=doc-md-description> <p>If <code>True</code>, allows variable number of positional args, e.g. <code>{% mytag val1 1234 val2 890 ... %}</code></p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.templatetags.component_tags.TagSpec.positional_only_args href=#django_components.templatetags.component_tags.TagSpec.positional_only_args>positional_only_args</a></code></b> (<code><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a>[<a class="autorefs autorefs-external" title=typing.List href=https://docs.python.org/3.12/library/typing.html#typing.List>List</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>]]</code>) <div class=doc-md-description> <p>Arguments that MUST be given as positional args.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.templatetags.component_tags.TagSpec.repeatable_kwargs href=#django_components.templatetags.component_tags.TagSpec.repeatable_kwargs>repeatable_kwargs</a></code></b> (<code><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a>[<a class="autorefs autorefs-external" title=typing.Union href=https://docs.python.org/3.12/library/typing.html#typing.Union>Union</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/functions.html#bool>bool</a>, <a class="autorefs autorefs-external" title=typing.List href=https://docs.python.org/3.12/library/typing.html#typing.List>List</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>]]]</code>) <div class=doc-md-description> <p>Whether this tag allows all or certain kwargs to be repeated.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.templatetags.component_tags.TagSpec.tag href=#django_components.templatetags.component_tags.TagSpec.tag>tag</a></code></b> (<code><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></code>) <div class=doc-md-description> <p>Tag name. E.g. <code>"slot"</code> means the tag is written like so <code>{% slot ... %}</code></p> </div> </li> </ul> <div class="doc doc-children"> <div class="doc doc-object doc-attribute"> <h5 id=django_components.templatetags.component_tags.TagSpec.end_tag class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">end_tag</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.templatetags.component_tags.TagSpec.end_tag class=headerlink title="Permanent link">¤</a></h5> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>end_tag</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>End tag.</p> <p>E.g. <code>"endslot"</code> means anything between the start tag and <code>{% endslot %}</code> is considered the slot's body.</p> </div> </div> <div class="doc doc-object doc-attribute"> <h5 id=django_components.templatetags.component_tags.TagSpec.flags class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">flags</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.templatetags.component_tags.TagSpec.flags class=headerlink title="Permanent link">¤</a></h5> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>flags</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.List href=https://docs.python.org/3.12/library/typing.html#typing.List>List</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]]</span> <span class=o>=</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>List of allowed flags.</p> <p>Flags are like kwargs, but without the value part. E.g. in <code>{% mytag only required %}</code>: - <code>only</code> and <code>required</code> are treated as <code>only=True</code> and <code>required=True</code> if present - and treated as <code>only=False</code> and <code>required=False</code> if omitted</p> </div> </div> <div class="doc doc-object doc-attribute"> <h5 id=django_components.templatetags.component_tags.TagSpec.keywordonly_args class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">keywordonly_args</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.templatetags.component_tags.TagSpec.keywordonly_args class=headerlink title="Permanent link">¤</a></h5> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>keywordonly_args</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Union href=https://docs.python.org/3.12/library/typing.html#typing.Union>Union</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/functions.html#bool>bool</a></span><span class=p>,</span> <span class=n><a class="autorefs autorefs-external" title=typing.List href=https://docs.python.org/3.12/library/typing.html#typing.List>List</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]]]</span> <span class=o>=</span> <span class=kc>False</span>
</code></pre></div> <div class="doc doc-contents "> <p>Parameters that MUST be given only as kwargs (not accounting for <code>pos_or_keyword_args</code>).</p> <ul> <li>If <code>False</code>, NO extra kwargs allowed.</li> <li>If <code>True</code>, ANY number of extra kwargs allowed.</li> <li>If a list of strings, e.g. <code>["class", "style"]</code>, then only those kwargs are allowed.</li> </ul> </div> </div> <div class="doc doc-object doc-attribute"> <h5 id=django_components.templatetags.component_tags.TagSpec.optional_kwargs class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">optional_kwargs</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.templatetags.component_tags.TagSpec.optional_kwargs class=headerlink title="Permanent link">¤</a></h5> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>optional_kwargs</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.List href=https://docs.python.org/3.12/library/typing.html#typing.List>List</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]]</span> <span class=o>=</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>Specify which kwargs can be optional.</p> </div> </div> <div class="doc doc-object doc-attribute"> <h5 id=django_components.templatetags.component_tags.TagSpec.pos_or_keyword_args class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">pos_or_keyword_args</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.templatetags.component_tags.TagSpec.pos_or_keyword_args class=headerlink title="Permanent link">¤</a></h5> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>pos_or_keyword_args</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.List href=https://docs.python.org/3.12/library/typing.html#typing.List>List</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]]</span> <span class=o>=</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>Like regular Python kwargs, these can be given EITHER as positional OR as keyword arguments.</p> </div> </div> <div class="doc doc-object doc-attribute"> <h5 id=django_components.templatetags.component_tags.TagSpec.positional_args_allow_extra class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">positional_args_allow_extra</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.templatetags.component_tags.TagSpec.positional_args_allow_extra class=headerlink title="Permanent link">¤</a></h5> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>positional_args_allow_extra</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/functions.html#bool>bool</a></span> <span class=o>=</span> <span class=kc>False</span>
</code></pre></div> <div class="doc doc-contents "> <p>If <code>True</code>, allows variable number of positional args, e.g. <code>{% mytag val1 1234 val2 890 ... %}</code></p> </div> </div> <div class="doc doc-object doc-attribute"> <h5 id=django_components.templatetags.component_tags.TagSpec.positional_only_args class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">positional_only_args</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.templatetags.component_tags.TagSpec.positional_only_args class=headerlink title="Permanent link">¤</a></h5> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>positional_only_args</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.List href=https://docs.python.org/3.12/library/typing.html#typing.List>List</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]]</span> <span class=o>=</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>Arguments that MUST be given as positional args.</p> </div> </div> <div class="doc doc-object doc-attribute"> <h5 id=django_components.templatetags.component_tags.TagSpec.repeatable_kwargs class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">repeatable_kwargs</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-class-attribute"><code>class-attribute</code></small> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.templatetags.component_tags.TagSpec.repeatable_kwargs class=headerlink title="Permanent link">¤</a></h5> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>repeatable_kwargs</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Union href=https://docs.python.org/3.12/library/typing.html#typing.Union>Union</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/functions.html#bool>bool</a></span><span class=p>,</span> <span class=n><a class="autorefs autorefs-external" title=typing.List href=https://docs.python.org/3.12/library/typing.html#typing.List>List</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]]]</span> <span class=o>=</span> <span class=kc>False</span>
</code></pre></div> <div class="doc doc-contents "> <p>Whether this tag allows all or certain kwargs to be repeated.</p> <ul> <li>If <code>False</code>, NO kwargs can repeat.</li> <li>If <code>True</code>, ALL kwargs can repeat.</li> <li>If a list of strings, e.g. <code>["class", "style"]</code>, then only those kwargs can repeat.</li> </ul> <p>E.g. <code>["class"]</code> means one can write <code>{% mytag class="one" class="two" %}</code></p> </div> </div> <div class="doc doc-object doc-attribute"> <h5 id=django_components.templatetags.component_tags.TagSpec.tag class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">tag</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.templatetags.component_tags.TagSpec.tag class=headerlink title="Permanent link">¤</a></h5> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>tag</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span>
</code></pre></div> <div class="doc doc-contents "> <p>Tag name. E.g. <code>"slot"</code> means the tag is written like so <code>{% slot ... %}</code></p> </div> </div> </div> </div> </div> <div class="doc doc-object doc-function"> <h4 id=django_components.templatetags.component_tags.component class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-function"></code> <span class="doc doc-object-name doc-function-name">component</span> <a href=#django_components.templatetags.component_tags.component class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>component</span><span class=p>(</span><span class=n>parser</span><span class=p>:</span> <span class=n><span title=django.template.base.Parser>Parser</span></span><span class=p>,</span> <span class=n>token</span><span class=p>:</span> <span class=n><span title=django.template.base.Token>Token</span></span><span class=p>,</span> <span class=n>registry</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-internal" title=django_components.component_registry.ComponentRegistry href=#django_components.component_registry.ComponentRegistry>ComponentRegistry</a></span><span class=p>,</span> <span class=n>tag_name</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span> <span class=n>tag_spec</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-internal" title=django_components.templatetags.component_tags.TagSpec href=#django_components.templatetags.component_tags.TagSpec>TagSpec</a></span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-internal" title=django_components.component.ComponentNode href=#django_components.component.ComponentNode>ComponentNode</a></span>
</code></pre></div> <div class="doc doc-contents "> <p>Renders one of the components that was previously registered with <a href=./api.md#django_components.register><code>@register()</code></a> decorator.</p> <p><strong>Args:</strong></p> <ul> <li><code>name</code> (str, required): Registered name of the component to render</li> <li>All other args and kwargs are defined based on the component itself.</li> </ul> <p>If you defined a component <code>"my_table"</code></p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=kn>from</span> <span class=nn>django_component</span> <span class=kn>import</span> <span class=n>Component</span><span class=p>,</span> <span class=n>register</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=nd>@register</span><span class=p>(</span><span class=s2>&quot;my_table&quot;</span><span class=p>)</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a><span class=k>class</span> <span class=nc>MyTable</span><span class=p>(</span><span class=n>Component</span><span class=p>):</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a> <span class=n>template</span> <span class=o>=</span> <span class=s2>&quot;&quot;&quot;</span>
<a id=__codelineno-0-6 name=__codelineno-0-6 href=#__codelineno-0-6></a><span class=s2> &lt;table&gt;</span>
<a id=__codelineno-0-7 name=__codelineno-0-7 href=#__codelineno-0-7></a><span class=s2> &lt;thead&gt;</span>
<a id=__codelineno-0-8 name=__codelineno-0-8 href=#__codelineno-0-8></a><span class=s2> {</span><span class=si>% f</span><span class=s2>or header in headers %}</span>
<a id=__codelineno-0-9 name=__codelineno-0-9 href=#__codelineno-0-9></a><span class=s2> &lt;th&gt;{{ header }}&lt;/th&gt;</span>
<a id=__codelineno-0-10 name=__codelineno-0-10 href=#__codelineno-0-10></a><span class=s2> {</span><span class=si>% e</span><span class=s2>ndfor %}</span>
<a id=__codelineno-0-11 name=__codelineno-0-11 href=#__codelineno-0-11></a><span class=s2> &lt;/thead&gt;</span>
<a id=__codelineno-0-12 name=__codelineno-0-12 href=#__codelineno-0-12></a><span class=s2> &lt;tbody&gt;</span>
<a id=__codelineno-0-13 name=__codelineno-0-13 href=#__codelineno-0-13></a><span class=s2> {</span><span class=si>% f</span><span class=s2>or row in rows %}</span>
<a id=__codelineno-0-14 name=__codelineno-0-14 href=#__codelineno-0-14></a><span class=s2> &lt;tr&gt;</span>
<a id=__codelineno-0-15 name=__codelineno-0-15 href=#__codelineno-0-15></a><span class=s2> {</span><span class=si>% f</span><span class=s2>or cell in row %}</span>
<a id=__codelineno-0-16 name=__codelineno-0-16 href=#__codelineno-0-16></a><span class=s2> &lt;td&gt;{{ cell }}&lt;/td&gt;</span>
<a id=__codelineno-0-17 name=__codelineno-0-17 href=#__codelineno-0-17></a><span class=s2> {</span><span class=si>% e</span><span class=s2>ndfor %}</span>
<a id=__codelineno-0-18 name=__codelineno-0-18 href=#__codelineno-0-18></a><span class=s2> &lt;/tr&gt;</span>
<a id=__codelineno-0-19 name=__codelineno-0-19 href=#__codelineno-0-19></a><span class=s2> {</span><span class=si>% e</span><span class=s2>ndfor %}</span>
<a id=__codelineno-0-20 name=__codelineno-0-20 href=#__codelineno-0-20></a><span class=s2> &lt;tbody&gt;</span>
<a id=__codelineno-0-21 name=__codelineno-0-21 href=#__codelineno-0-21></a><span class=s2> &lt;/table&gt;</span>
<a id=__codelineno-0-22 name=__codelineno-0-22 href=#__codelineno-0-22></a><span class=s2> &quot;&quot;&quot;</span>
<a id=__codelineno-0-23 name=__codelineno-0-23 href=#__codelineno-0-23></a>
<a id=__codelineno-0-24 name=__codelineno-0-24 href=#__codelineno-0-24></a> <span class=k>def</span> <span class=nf>get_context_data</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>rows</span><span class=p>:</span> <span class=n>List</span><span class=p>,</span> <span class=n>headers</span><span class=p>:</span> <span class=n>List</span><span class=p>):</span>
<a id=__codelineno-0-25 name=__codelineno-0-25 href=#__codelineno-0-25></a> <span class=k>return</span> <span class=p>{</span>
<a id=__codelineno-0-26 name=__codelineno-0-26 href=#__codelineno-0-26></a> <span class=s2>&quot;rows&quot;</span><span class=p>:</span> <span class=n>rows</span><span class=p>,</span>
<a id=__codelineno-0-27 name=__codelineno-0-27 href=#__codelineno-0-27></a> <span class=s2>&quot;headers&quot;</span><span class=p>:</span> <span class=n>headers</span><span class=p>,</span>
<a id=__codelineno-0-28 name=__codelineno-0-28 href=#__codelineno-0-28></a> <span class=p>}</span>
</code></pre></div> <p>Then you can render this component by referring to <code>MyTable</code> via its registered name <code>"my_table"</code>:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-1-1 name=__codelineno-1-1 href=#__codelineno-1-1></a><span class=cp>{%</span> <span class=k>component</span> <span class=s2>&quot;my_table&quot;</span> <span class=nv>rows</span><span class=o>=</span><span class=nv>rows</span> <span class=nv>headers</span><span class=o>=</span><span class=nv>headers</span> <span class=p>...</span> <span class=o>/</span> <span class=cp>%}</span>
</code></pre></div> <h6 id=django_components.templatetags.component_tags.component--component-input>Component input<a class=headerlink href=#django_components.templatetags.component_tags.component--component-input title="Permanent link">¤</a></h6> <p>Positional and keyword arguments can be literals or template variables.</p> <p>The component name must be a single- or double-quotes string and must be either:</p> <ul> <li> <p>The first positional argument after <code>component</code>:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-2-1 name=__codelineno-2-1 href=#__codelineno-2-1></a><span class=cp>{%</span> <span class=k>component</span> <span class=s2>&quot;my_table&quot;</span> <span class=nv>rows</span><span class=o>=</span><span class=nv>rows</span> <span class=nv>headers</span><span class=o>=</span><span class=nv>headers</span> <span class=p>...</span> <span class=o>/</span> <span class=cp>%}</span>
</code></pre></div> </li> <li> <p>Passed as kwarg <code>name</code>:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-3-1 name=__codelineno-3-1 href=#__codelineno-3-1></a><span class=cp>{%</span> <span class=k>component</span> <span class=nv>rows</span><span class=o>=</span><span class=nv>rows</span> <span class=nv>headers</span><span class=o>=</span><span class=nv>headers</span> <span class=nv>name</span><span class=o>=</span><span class=s2>&quot;my_table&quot;</span> <span class=p>...</span> <span class=o>/</span> <span class=cp>%}</span>
</code></pre></div> </li> </ul> <h6 id=django_components.templatetags.component_tags.component--inserting-into-slots>Inserting into slots<a class=headerlink href=#django_components.templatetags.component_tags.component--inserting-into-slots title="Permanent link">¤</a></h6> <p>If the component defined any <a href=../concepts/fundamentals/slots.md>slots</a>, you can pass in the content to be placed inside those slots by inserting <a href=#django_components.templatetags.component_tags.component--fill><code>{% fill %}</code></a> tags, directly within the <code>{% component %}</code> tag:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-4-1 name=__codelineno-4-1 href=#__codelineno-4-1></a><span class=cp>{%</span> <span class=k>component</span> <span class=s2>&quot;my_table&quot;</span> <span class=nv>rows</span><span class=o>=</span><span class=nv>rows</span> <span class=nv>headers</span><span class=o>=</span><span class=nv>headers</span> <span class=p>...</span> <span class=o>/</span> <span class=cp>%}</span>
<a id=__codelineno-4-2 name=__codelineno-4-2 href=#__codelineno-4-2></a><span class=x> </span><span class=cp>{%</span> <span class=k>fill</span> <span class=s2>&quot;pagination&quot;</span> <span class=cp>%}</span>
<a id=__codelineno-4-3 name=__codelineno-4-3 href=#__codelineno-4-3></a><span class=x> &lt; 1 | 2 | 3 &gt;</span>
<a id=__codelineno-4-4 name=__codelineno-4-4 href=#__codelineno-4-4></a><span class=x> </span><span class=cp>{%</span> <span class=k>endfill</span> <span class=cp>%}</span>
<a id=__codelineno-4-5 name=__codelineno-4-5 href=#__codelineno-4-5></a><span class=cp>{%</span> <span class=k>endcomponent</span> <span class=cp>%}</span>
</code></pre></div> <h6 id=django_components.templatetags.component_tags.component--isolating-components>Isolating components<a class=headerlink href=#django_components.templatetags.component_tags.component--isolating-components title="Permanent link">¤</a></h6> <p>By default, components behave similarly to Django's <a href=https://docs.djangoproject.com/en/5.1/ref/templates/builtins/#include><code>{% include %}</code></a>, and the template inside the component has access to the variables defined in the outer template.</p> <p>You can selectively isolate a component, using the <code>only</code> flag, so that the inner template can access only the data that was explicitly passed to it:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-5-1 name=__codelineno-5-1 href=#__codelineno-5-1></a><span class=cp>{%</span> <span class=k>component</span> <span class=s2>&quot;name&quot;</span> <span class=nv>positional_arg</span> <span class=nv>keyword_arg</span><span class=o>=</span><span class=nv>value</span> <span class=p>...</span> <span class=nv>only</span> <span class=cp>%}</span>
</code></pre></div> <details class=quote> <summary>Source code in <code>src/django_components/templatetags/component_tags.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-466>466</a></span>
<span class=normal><a href=#__codelineno-0-467>467</a></span>
<span class=normal><a href=#__codelineno-0-468>468</a></span>
<span class=normal><a href=#__codelineno-0-469>469</a></span>
<span class=normal><a href=#__codelineno-0-470>470</a></span>
<span class=normal><a href=#__codelineno-0-471>471</a></span>
<span class=normal><a href=#__codelineno-0-472>472</a></span>
<span class=normal><a href=#__codelineno-0-473>473</a></span>
<span class=normal><a href=#__codelineno-0-474>474</a></span>
<span class=normal><a href=#__codelineno-0-475>475</a></span>
<span class=normal><a href=#__codelineno-0-476>476</a></span>
<span class=normal><a href=#__codelineno-0-477>477</a></span>
<span class=normal><a href=#__codelineno-0-478>478</a></span>
<span class=normal><a href=#__codelineno-0-479>479</a></span>
<span class=normal><a href=#__codelineno-0-480>480</a></span>
<span class=normal><a href=#__codelineno-0-481>481</a></span>
<span class=normal><a href=#__codelineno-0-482>482</a></span>
<span class=normal><a href=#__codelineno-0-483>483</a></span>
<span class=normal><a href=#__codelineno-0-484>484</a></span>
<span class=normal><a href=#__codelineno-0-485>485</a></span>
<span class=normal><a href=#__codelineno-0-486>486</a></span>
<span class=normal><a href=#__codelineno-0-487>487</a></span>
<span class=normal><a href=#__codelineno-0-488>488</a></span>
<span class=normal><a href=#__codelineno-0-489>489</a></span>
<span class=normal><a href=#__codelineno-0-490>490</a></span>
<span class=normal><a href=#__codelineno-0-491>491</a></span>
<span class=normal><a href=#__codelineno-0-492>492</a></span>
<span class=normal><a href=#__codelineno-0-493>493</a></span>
<span class=normal><a href=#__codelineno-0-494>494</a></span>
<span class=normal><a href=#__codelineno-0-495>495</a></span>
<span class=normal><a href=#__codelineno-0-496>496</a></span>
<span class=normal><a href=#__codelineno-0-497>497</a></span>
<span class=normal><a href=#__codelineno-0-498>498</a></span>
<span class=normal><a href=#__codelineno-0-499>499</a></span>
<span class=normal><a href=#__codelineno-0-500>500</a></span>
<span class=normal><a href=#__codelineno-0-501>501</a></span>
<span class=normal><a href=#__codelineno-0-502>502</a></span>
<span class=normal><a href=#__codelineno-0-503>503</a></span>
<span class=normal><a href=#__codelineno-0-504>504</a></span>
<span class=normal><a href=#__codelineno-0-505>505</a></span>
<span class=normal><a href=#__codelineno-0-506>506</a></span>
<span class=normal><a href=#__codelineno-0-507>507</a></span>
<span class=normal><a href=#__codelineno-0-508>508</a></span>
<span class=normal><a href=#__codelineno-0-509>509</a></span>
<span class=normal><a href=#__codelineno-0-510>510</a></span>
<span class=normal><a href=#__codelineno-0-511>511</a></span>
<span class=normal><a href=#__codelineno-0-512>512</a></span>
<span class=normal><a href=#__codelineno-0-513>513</a></span>
<span class=normal><a href=#__codelineno-0-514>514</a></span>
<span class=normal><a href=#__codelineno-0-515>515</a></span>
<span class=normal><a href=#__codelineno-0-516>516</a></span>
<span class=normal><a href=#__codelineno-0-517>517</a></span>
<span class=normal><a href=#__codelineno-0-518>518</a></span>
<span class=normal><a href=#__codelineno-0-519>519</a></span>
<span class=normal><a href=#__codelineno-0-520>520</a></span>
<span class=normal><a href=#__codelineno-0-521>521</a></span>
<span class=normal><a href=#__codelineno-0-522>522</a></span>
<span class=normal><a href=#__codelineno-0-523>523</a></span>
<span class=normal><a href=#__codelineno-0-524>524</a></span>
<span class=normal><a href=#__codelineno-0-525>525</a></span>
<span class=normal><a href=#__codelineno-0-526>526</a></span>
<span class=normal><a href=#__codelineno-0-527>527</a></span>
<span class=normal><a href=#__codelineno-0-528>528</a></span>
<span class=normal><a href=#__codelineno-0-529>529</a></span>
<span class=normal><a href=#__codelineno-0-530>530</a></span>
<span class=normal><a href=#__codelineno-0-531>531</a></span>
<span class=normal><a href=#__codelineno-0-532>532</a></span>
<span class=normal><a href=#__codelineno-0-533>533</a></span>
<span class=normal><a href=#__codelineno-0-534>534</a></span>
<span class=normal><a href=#__codelineno-0-535>535</a></span>
<span class=normal><a href=#__codelineno-0-536>536</a></span>
<span class=normal><a href=#__codelineno-0-537>537</a></span>
<span class=normal><a href=#__codelineno-0-538>538</a></span>
<span class=normal><a href=#__codelineno-0-539>539</a></span>
<span class=normal><a href=#__codelineno-0-540>540</a></span>
<span class=normal><a href=#__codelineno-0-541>541</a></span>
<span class=normal><a href=#__codelineno-0-542>542</a></span>
<span class=normal><a href=#__codelineno-0-543>543</a></span>
<span class=normal><a href=#__codelineno-0-544>544</a></span>
<span class=normal><a href=#__codelineno-0-545>545</a></span>
<span class=normal><a href=#__codelineno-0-546>546</a></span>
<span class=normal><a href=#__codelineno-0-547>547</a></span>
<span class=normal><a href=#__codelineno-0-548>548</a></span>
<span class=normal><a href=#__codelineno-0-549>549</a></span>
<span class=normal><a href=#__codelineno-0-550>550</a></span>
<span class=normal><a href=#__codelineno-0-551>551</a></span>
<span class=normal><a href=#__codelineno-0-552>552</a></span>
<span class=normal><a href=#__codelineno-0-553>553</a></span>
<span class=normal><a href=#__codelineno-0-554>554</a></span>
<span class=normal><a href=#__codelineno-0-555>555</a></span>
<span class=normal><a href=#__codelineno-0-556>556</a></span>
<span class=normal><a href=#__codelineno-0-557>557</a></span>
<span class=normal><a href=#__codelineno-0-558>558</a></span>
<span class=normal><a href=#__codelineno-0-559>559</a></span>
<span class=normal><a href=#__codelineno-0-560>560</a></span>
<span class=normal><a href=#__codelineno-0-561>561</a></span>
<span class=normal><a href=#__codelineno-0-562>562</a></span>
<span class=normal><a href=#__codelineno-0-563>563</a></span>
<span class=normal><a href=#__codelineno-0-564>564</a></span>
<span class=normal><a href=#__codelineno-0-565>565</a></span>
<span class=normal><a href=#__codelineno-0-566>566</a></span>
<span class=normal><a href=#__codelineno-0-567>567</a></span>
<span class=normal><a href=#__codelineno-0-568>568</a></span>
<span class=normal><a href=#__codelineno-0-569>569</a></span>
<span class=normal><a href=#__codelineno-0-570>570</a></span>
<span class=normal><a href=#__codelineno-0-571>571</a></span>
<span class=normal><a href=#__codelineno-0-572>572</a></span>
<span class=normal><a href=#__codelineno-0-573>573</a></span>
<span class=normal><a href=#__codelineno-0-574>574</a></span>
<span class=normal><a href=#__codelineno-0-575>575</a></span>
<span class=normal><a href=#__codelineno-0-576>576</a></span>
<span class=normal><a href=#__codelineno-0-577>577</a></span>
<span class=normal><a href=#__codelineno-0-578>578</a></span>
<span class=normal><a href=#__codelineno-0-579>579</a></span>
<span class=normal><a href=#__codelineno-0-580>580</a></span>
<span class=normal><a href=#__codelineno-0-581>581</a></span>
<span class=normal><a href=#__codelineno-0-582>582</a></span>
<span class=normal><a href=#__codelineno-0-583>583</a></span>
<span class=normal><a href=#__codelineno-0-584>584</a></span>
<span class=normal><a href=#__codelineno-0-585>585</a></span>
<span class=normal><a href=#__codelineno-0-586>586</a></span>
<span class=normal><a href=#__codelineno-0-587>587</a></span>
<span class=normal><a href=#__codelineno-0-588>588</a></span>
<span class=normal><a href=#__codelineno-0-589>589</a></span>
<span class=normal><a href=#__codelineno-0-590>590</a></span>
<span class=normal><a href=#__codelineno-0-591>591</a></span>
<span class=normal><a href=#__codelineno-0-592>592</a></span>
<span class=normal><a href=#__codelineno-0-593>593</a></span>
<span class=normal><a href=#__codelineno-0-594>594</a></span>
<span class=normal><a href=#__codelineno-0-595>595</a></span>
<span class=normal><a href=#__codelineno-0-596>596</a></span>
<span class=normal><a href=#__codelineno-0-597>597</a></span>
<span class=normal><a href=#__codelineno-0-598>598</a></span>
<span class=normal><a href=#__codelineno-0-599>599</a></span>
<span class=normal><a href=#__codelineno-0-600>600</a></span>
<span class=normal><a href=#__codelineno-0-601>601</a></span>
<span class=normal><a href=#__codelineno-0-602>602</a></span>
<span class=normal><a href=#__codelineno-0-603>603</a></span>
<span class=normal><a href=#__codelineno-0-604>604</a></span>
<span class=normal><a href=#__codelineno-0-605>605</a></span>
<span class=normal><a href=#__codelineno-0-606>606</a></span>
<span class=normal><a href=#__codelineno-0-607>607</a></span>
<span class=normal><a href=#__codelineno-0-608>608</a></span>
<span class=normal><a href=#__codelineno-0-609>609</a></span>
<span class=normal><a href=#__codelineno-0-610>610</a></span>
<span class=normal><a href=#__codelineno-0-611>611</a></span>
<span class=normal><a href=#__codelineno-0-612>612</a></span>
<span class=normal><a href=#__codelineno-0-613>613</a></span>
<span class=normal><a href=#__codelineno-0-614>614</a></span>
<span class=normal><a href=#__codelineno-0-615>615</a></span>
<span class=normal><a href=#__codelineno-0-616>616</a></span>
<span class=normal><a href=#__codelineno-0-617>617</a></span>
<span class=normal><a href=#__codelineno-0-618>618</a></span>
<span class=normal><a href=#__codelineno-0-619>619</a></span>
<span class=normal><a href=#__codelineno-0-620>620</a></span>
<span class=normal><a href=#__codelineno-0-621>621</a></span>
<span class=normal><a href=#__codelineno-0-622>622</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-466 name=__codelineno-0-466></a><span class=nd>@with_tag_spec</span><span class=p>(</span>
<a id=__codelineno-0-467 name=__codelineno-0-467></a> <span class=n>TagSpec</span><span class=p>(</span>
<a id=__codelineno-0-468 name=__codelineno-0-468></a> <span class=n>tag</span><span class=o>=</span><span class=s2>&quot;component&quot;</span><span class=p>,</span>
<a id=__codelineno-0-469 name=__codelineno-0-469></a> <span class=n>end_tag</span><span class=o>=</span><span class=s2>&quot;endcomponent&quot;</span><span class=p>,</span>
<a id=__codelineno-0-470 name=__codelineno-0-470></a> <span class=n>positional_only_args</span><span class=o>=</span><span class=p>[],</span>
<a id=__codelineno-0-471 name=__codelineno-0-471></a> <span class=n>positional_args_allow_extra</span><span class=o>=</span><span class=kc>True</span><span class=p>,</span> <span class=c1># Allow many args</span>
<a id=__codelineno-0-472 name=__codelineno-0-472></a> <span class=n>keywordonly_args</span><span class=o>=</span><span class=kc>True</span><span class=p>,</span>
<a id=__codelineno-0-473 name=__codelineno-0-473></a> <span class=n>repeatable_kwargs</span><span class=o>=</span><span class=kc>False</span><span class=p>,</span>
<a id=__codelineno-0-474 name=__codelineno-0-474></a> <span class=n>flags</span><span class=o>=</span><span class=p>[</span><span class=n>COMP_ONLY_FLAG</span><span class=p>],</span>
<a id=__codelineno-0-475 name=__codelineno-0-475></a> <span class=p>)</span>
<a id=__codelineno-0-476 name=__codelineno-0-476></a><span class=p>)</span>
<a id=__codelineno-0-477 name=__codelineno-0-477></a><span class=k>def</span> <span class=nf>component</span><span class=p>(</span>
<a id=__codelineno-0-478 name=__codelineno-0-478></a> <span class=n>parser</span><span class=p>:</span> <span class=n>Parser</span><span class=p>,</span>
<a id=__codelineno-0-479 name=__codelineno-0-479></a> <span class=n>token</span><span class=p>:</span> <span class=n>Token</span><span class=p>,</span>
<a id=__codelineno-0-480 name=__codelineno-0-480></a> <span class=n>registry</span><span class=p>:</span> <span class=n>ComponentRegistry</span><span class=p>,</span>
<a id=__codelineno-0-481 name=__codelineno-0-481></a> <span class=n>tag_name</span><span class=p>:</span> <span class=nb>str</span><span class=p>,</span>
<a id=__codelineno-0-482 name=__codelineno-0-482></a> <span class=n>tag_spec</span><span class=p>:</span> <span class=n>TagSpec</span><span class=p>,</span>
<a id=__codelineno-0-483 name=__codelineno-0-483></a><span class=p>)</span> <span class=o>-&gt;</span> <span class=n>ComponentNode</span><span class=p>:</span>
<a id=__codelineno-0-484 name=__codelineno-0-484></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-485 name=__codelineno-0-485></a><span class=sd> Renders one of the components that was previously registered with</span>
<a id=__codelineno-0-486 name=__codelineno-0-486></a><span class=sd> [`@register()`](./api.md#django_components.register)</span>
<a id=__codelineno-0-487 name=__codelineno-0-487></a><span class=sd> decorator.</span>
<a id=__codelineno-0-488 name=__codelineno-0-488></a>
<a id=__codelineno-0-489 name=__codelineno-0-489></a><span class=sd> **Args:**</span>
<a id=__codelineno-0-490 name=__codelineno-0-490></a>
<a id=__codelineno-0-491 name=__codelineno-0-491></a><span class=sd> - `name` (str, required): Registered name of the component to render</span>
<a id=__codelineno-0-492 name=__codelineno-0-492></a><span class=sd> - All other args and kwargs are defined based on the component itself.</span>
<a id=__codelineno-0-493 name=__codelineno-0-493></a>
<a id=__codelineno-0-494 name=__codelineno-0-494></a><span class=sd> If you defined a component `&quot;my_table&quot;`</span>
<a id=__codelineno-0-495 name=__codelineno-0-495></a>
<a id=__codelineno-0-496 name=__codelineno-0-496></a><span class=sd> ```python</span>
<a id=__codelineno-0-497 name=__codelineno-0-497></a><span class=sd> from django_component import Component, register</span>
<a id=__codelineno-0-498 name=__codelineno-0-498></a>
<a id=__codelineno-0-499 name=__codelineno-0-499></a><span class=sd> @register(&quot;my_table&quot;)</span>
<a id=__codelineno-0-500 name=__codelineno-0-500></a><span class=sd> class MyTable(Component):</span>
<a id=__codelineno-0-501 name=__codelineno-0-501></a><span class=sd> template = \&quot;\&quot;\&quot;</span>
<a id=__codelineno-0-502 name=__codelineno-0-502></a><span class=sd> &lt;table&gt;</span>
<a id=__codelineno-0-503 name=__codelineno-0-503></a><span class=sd> &lt;thead&gt;</span>
<a id=__codelineno-0-504 name=__codelineno-0-504></a><span class=sd> {% for header in headers %}</span>
<a id=__codelineno-0-505 name=__codelineno-0-505></a><span class=sd> &lt;th&gt;{{ header }}&lt;/th&gt;</span>
<a id=__codelineno-0-506 name=__codelineno-0-506></a><span class=sd> {% endfor %}</span>
<a id=__codelineno-0-507 name=__codelineno-0-507></a><span class=sd> &lt;/thead&gt;</span>
<a id=__codelineno-0-508 name=__codelineno-0-508></a><span class=sd> &lt;tbody&gt;</span>
<a id=__codelineno-0-509 name=__codelineno-0-509></a><span class=sd> {% for row in rows %}</span>
<a id=__codelineno-0-510 name=__codelineno-0-510></a><span class=sd> &lt;tr&gt;</span>
<a id=__codelineno-0-511 name=__codelineno-0-511></a><span class=sd> {% for cell in row %}</span>
<a id=__codelineno-0-512 name=__codelineno-0-512></a><span class=sd> &lt;td&gt;{{ cell }}&lt;/td&gt;</span>
<a id=__codelineno-0-513 name=__codelineno-0-513></a><span class=sd> {% endfor %}</span>
<a id=__codelineno-0-514 name=__codelineno-0-514></a><span class=sd> &lt;/tr&gt;</span>
<a id=__codelineno-0-515 name=__codelineno-0-515></a><span class=sd> {% endfor %}</span>
<a id=__codelineno-0-516 name=__codelineno-0-516></a><span class=sd> &lt;tbody&gt;</span>
<a id=__codelineno-0-517 name=__codelineno-0-517></a><span class=sd> &lt;/table&gt;</span>
<a id=__codelineno-0-518 name=__codelineno-0-518></a><span class=sd> \&quot;\&quot;\&quot;</span>
<a id=__codelineno-0-519 name=__codelineno-0-519></a>
<a id=__codelineno-0-520 name=__codelineno-0-520></a><span class=sd> def get_context_data(self, rows: List, headers: List):</span>
<a id=__codelineno-0-521 name=__codelineno-0-521></a><span class=sd> return {</span>
<a id=__codelineno-0-522 name=__codelineno-0-522></a><span class=sd> &quot;rows&quot;: rows,</span>
<a id=__codelineno-0-523 name=__codelineno-0-523></a><span class=sd> &quot;headers&quot;: headers,</span>
<a id=__codelineno-0-524 name=__codelineno-0-524></a><span class=sd> }</span>
<a id=__codelineno-0-525 name=__codelineno-0-525></a><span class=sd> ```</span>
<a id=__codelineno-0-526 name=__codelineno-0-526></a>
<a id=__codelineno-0-527 name=__codelineno-0-527></a><span class=sd> Then you can render this component by referring to `MyTable` via its</span>
<a id=__codelineno-0-528 name=__codelineno-0-528></a><span class=sd> registered name `&quot;my_table&quot;`:</span>
<a id=__codelineno-0-529 name=__codelineno-0-529></a>
<a id=__codelineno-0-530 name=__codelineno-0-530></a><span class=sd> ```django</span>
<a id=__codelineno-0-531 name=__codelineno-0-531></a><span class=sd> {% component &quot;my_table&quot; rows=rows headers=headers ... / %}</span>
<a id=__codelineno-0-532 name=__codelineno-0-532></a><span class=sd> ```</span>
<a id=__codelineno-0-533 name=__codelineno-0-533></a>
<a id=__codelineno-0-534 name=__codelineno-0-534></a><span class=sd> ### Component input</span>
<a id=__codelineno-0-535 name=__codelineno-0-535></a>
<a id=__codelineno-0-536 name=__codelineno-0-536></a><span class=sd> Positional and keyword arguments can be literals or template variables.</span>
<a id=__codelineno-0-537 name=__codelineno-0-537></a>
<a id=__codelineno-0-538 name=__codelineno-0-538></a><span class=sd> The component name must be a single- or double-quotes string and must</span>
<a id=__codelineno-0-539 name=__codelineno-0-539></a><span class=sd> be either:</span>
<a id=__codelineno-0-540 name=__codelineno-0-540></a>
<a id=__codelineno-0-541 name=__codelineno-0-541></a><span class=sd> - The first positional argument after `component`:</span>
<a id=__codelineno-0-542 name=__codelineno-0-542></a>
<a id=__codelineno-0-543 name=__codelineno-0-543></a><span class=sd> ```django</span>
<a id=__codelineno-0-544 name=__codelineno-0-544></a><span class=sd> {% component &quot;my_table&quot; rows=rows headers=headers ... / %}</span>
<a id=__codelineno-0-545 name=__codelineno-0-545></a><span class=sd> ```</span>
<a id=__codelineno-0-546 name=__codelineno-0-546></a>
<a id=__codelineno-0-547 name=__codelineno-0-547></a><span class=sd> - Passed as kwarg `name`:</span>
<a id=__codelineno-0-548 name=__codelineno-0-548></a>
<a id=__codelineno-0-549 name=__codelineno-0-549></a><span class=sd> ```django</span>
<a id=__codelineno-0-550 name=__codelineno-0-550></a><span class=sd> {% component rows=rows headers=headers name=&quot;my_table&quot; ... / %}</span>
<a id=__codelineno-0-551 name=__codelineno-0-551></a><span class=sd> ```</span>
<a id=__codelineno-0-552 name=__codelineno-0-552></a>
<a id=__codelineno-0-553 name=__codelineno-0-553></a><span class=sd> ### Inserting into slots</span>
<a id=__codelineno-0-554 name=__codelineno-0-554></a>
<a id=__codelineno-0-555 name=__codelineno-0-555></a><span class=sd> If the component defined any [slots](../concepts/fundamentals/slots.md), you can</span>
<a id=__codelineno-0-556 name=__codelineno-0-556></a><span class=sd> pass in the content to be placed inside those slots by inserting [`{% fill %}`](#fill) tags,</span>
<a id=__codelineno-0-557 name=__codelineno-0-557></a><span class=sd> directly within the `{% component %}` tag:</span>
<a id=__codelineno-0-558 name=__codelineno-0-558></a>
<a id=__codelineno-0-559 name=__codelineno-0-559></a><span class=sd> ```django</span>
<a id=__codelineno-0-560 name=__codelineno-0-560></a><span class=sd> {% component &quot;my_table&quot; rows=rows headers=headers ... / %}</span>
<a id=__codelineno-0-561 name=__codelineno-0-561></a><span class=sd> {% fill &quot;pagination&quot; %}</span>
<a id=__codelineno-0-562 name=__codelineno-0-562></a><span class=sd> &lt; 1 | 2 | 3 &gt;</span>
<a id=__codelineno-0-563 name=__codelineno-0-563></a><span class=sd> {% endfill %}</span>
<a id=__codelineno-0-564 name=__codelineno-0-564></a><span class=sd> {% endcomponent %}</span>
<a id=__codelineno-0-565 name=__codelineno-0-565></a><span class=sd> ```</span>
<a id=__codelineno-0-566 name=__codelineno-0-566></a>
<a id=__codelineno-0-567 name=__codelineno-0-567></a><span class=sd> ### Isolating components</span>
<a id=__codelineno-0-568 name=__codelineno-0-568></a>
<a id=__codelineno-0-569 name=__codelineno-0-569></a><span class=sd> By default, components behave similarly to Django&#39;s</span>
<a id=__codelineno-0-570 name=__codelineno-0-570></a><span class=sd> [`{% include %}`](https://docs.djangoproject.com/en/5.1/ref/templates/builtins/#include),</span>
<a id=__codelineno-0-571 name=__codelineno-0-571></a><span class=sd> and the template inside the component has access to the variables defined in the outer template.</span>
<a id=__codelineno-0-572 name=__codelineno-0-572></a>
<a id=__codelineno-0-573 name=__codelineno-0-573></a><span class=sd> You can selectively isolate a component, using the `only` flag, so that the inner template</span>
<a id=__codelineno-0-574 name=__codelineno-0-574></a><span class=sd> can access only the data that was explicitly passed to it:</span>
<a id=__codelineno-0-575 name=__codelineno-0-575></a>
<a id=__codelineno-0-576 name=__codelineno-0-576></a><span class=sd> ```django</span>
<a id=__codelineno-0-577 name=__codelineno-0-577></a><span class=sd> {% component &quot;name&quot; positional_arg keyword_arg=value ... only %}</span>
<a id=__codelineno-0-578 name=__codelineno-0-578></a><span class=sd> ```</span>
<a id=__codelineno-0-579 name=__codelineno-0-579></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-580 name=__codelineno-0-580></a> <span class=n>_fix_nested_tags</span><span class=p>(</span><span class=n>parser</span><span class=p>,</span> <span class=n>token</span><span class=p>)</span>
<a id=__codelineno-0-581 name=__codelineno-0-581></a> <span class=n>bits</span> <span class=o>=</span> <span class=n>token</span><span class=o>.</span><span class=n>split_contents</span><span class=p>()</span>
<a id=__codelineno-0-582 name=__codelineno-0-582></a>
<a id=__codelineno-0-583 name=__codelineno-0-583></a> <span class=c1># Let the TagFormatter pre-process the tokens</span>
<a id=__codelineno-0-584 name=__codelineno-0-584></a> <span class=n>formatter</span> <span class=o>=</span> <span class=n>get_tag_formatter</span><span class=p>(</span><span class=n>registry</span><span class=p>)</span>
<a id=__codelineno-0-585 name=__codelineno-0-585></a> <span class=n>result</span> <span class=o>=</span> <span class=n>formatter</span><span class=o>.</span><span class=n>parse</span><span class=p>([</span><span class=o>*</span><span class=n>bits</span><span class=p>])</span>
<a id=__codelineno-0-586 name=__codelineno-0-586></a> <span class=n>end_tag</span> <span class=o>=</span> <span class=n>formatter</span><span class=o>.</span><span class=n>end_tag</span><span class=p>(</span><span class=n>result</span><span class=o>.</span><span class=n>component_name</span><span class=p>)</span>
<a id=__codelineno-0-587 name=__codelineno-0-587></a>
<a id=__codelineno-0-588 name=__codelineno-0-588></a> <span class=c1># NOTE: The tokens returned from TagFormatter.parse do NOT include the tag itself</span>
<a id=__codelineno-0-589 name=__codelineno-0-589></a> <span class=n>bits</span> <span class=o>=</span> <span class=p>[</span><span class=n>bits</span><span class=p>[</span><span class=mi>0</span><span class=p>],</span> <span class=o>*</span><span class=n>result</span><span class=o>.</span><span class=n>tokens</span><span class=p>]</span>
<a id=__codelineno-0-590 name=__codelineno-0-590></a> <span class=n>token</span><span class=o>.</span><span class=n>contents</span> <span class=o>=</span> <span class=s2>&quot; &quot;</span><span class=o>.</span><span class=n>join</span><span class=p>(</span><span class=n>bits</span><span class=p>)</span>
<a id=__codelineno-0-591 name=__codelineno-0-591></a>
<a id=__codelineno-0-592 name=__codelineno-0-592></a> <span class=n>tag</span> <span class=o>=</span> <span class=n>_parse_tag</span><span class=p>(</span>
<a id=__codelineno-0-593 name=__codelineno-0-593></a> <span class=n>parser</span><span class=p>,</span>
<a id=__codelineno-0-594 name=__codelineno-0-594></a> <span class=n>token</span><span class=p>,</span>
<a id=__codelineno-0-595 name=__codelineno-0-595></a> <span class=n>TagSpec</span><span class=p>(</span>
<a id=__codelineno-0-596 name=__codelineno-0-596></a> <span class=o>**</span><span class=p>{</span>
<a id=__codelineno-0-597 name=__codelineno-0-597></a> <span class=o>**</span><span class=n>tag_spec</span><span class=o>.</span><span class=n>_asdict</span><span class=p>(),</span>
<a id=__codelineno-0-598 name=__codelineno-0-598></a> <span class=s2>&quot;tag&quot;</span><span class=p>:</span> <span class=n>tag_name</span><span class=p>,</span>
<a id=__codelineno-0-599 name=__codelineno-0-599></a> <span class=s2>&quot;end_tag&quot;</span><span class=p>:</span> <span class=n>end_tag</span><span class=p>,</span>
<a id=__codelineno-0-600 name=__codelineno-0-600></a> <span class=p>}</span>
<a id=__codelineno-0-601 name=__codelineno-0-601></a> <span class=p>),</span>
<a id=__codelineno-0-602 name=__codelineno-0-602></a> <span class=p>)</span>
<a id=__codelineno-0-603 name=__codelineno-0-603></a>
<a id=__codelineno-0-604 name=__codelineno-0-604></a> <span class=c1># Check for isolated context keyword</span>
<a id=__codelineno-0-605 name=__codelineno-0-605></a> <span class=n>isolated_context</span> <span class=o>=</span> <span class=n>tag</span><span class=o>.</span><span class=n>flags</span><span class=p>[</span><span class=n>COMP_ONLY_FLAG</span><span class=p>]</span>
<a id=__codelineno-0-606 name=__codelineno-0-606></a>
<a id=__codelineno-0-607 name=__codelineno-0-607></a> <span class=n>trace_msg</span><span class=p>(</span><span class=s2>&quot;PARSE&quot;</span><span class=p>,</span> <span class=s2>&quot;COMP&quot;</span><span class=p>,</span> <span class=n>result</span><span class=o>.</span><span class=n>component_name</span><span class=p>,</span> <span class=n>tag</span><span class=o>.</span><span class=n>id</span><span class=p>)</span>
<a id=__codelineno-0-608 name=__codelineno-0-608></a>
<a id=__codelineno-0-609 name=__codelineno-0-609></a> <span class=n>body</span> <span class=o>=</span> <span class=n>tag</span><span class=o>.</span><span class=n>parse_body</span><span class=p>()</span>
<a id=__codelineno-0-610 name=__codelineno-0-610></a>
<a id=__codelineno-0-611 name=__codelineno-0-611></a> <span class=n>component_node</span> <span class=o>=</span> <span class=n>ComponentNode</span><span class=p>(</span>
<a id=__codelineno-0-612 name=__codelineno-0-612></a> <span class=n>name</span><span class=o>=</span><span class=n>result</span><span class=o>.</span><span class=n>component_name</span><span class=p>,</span>
<a id=__codelineno-0-613 name=__codelineno-0-613></a> <span class=n>args</span><span class=o>=</span><span class=n>tag</span><span class=o>.</span><span class=n>args</span><span class=p>,</span>
<a id=__codelineno-0-614 name=__codelineno-0-614></a> <span class=n>kwargs</span><span class=o>=</span><span class=n>tag</span><span class=o>.</span><span class=n>kwargs</span><span class=p>,</span>
<a id=__codelineno-0-615 name=__codelineno-0-615></a> <span class=n>isolated_context</span><span class=o>=</span><span class=n>isolated_context</span><span class=p>,</span>
<a id=__codelineno-0-616 name=__codelineno-0-616></a> <span class=n>nodelist</span><span class=o>=</span><span class=n>body</span><span class=p>,</span>
<a id=__codelineno-0-617 name=__codelineno-0-617></a> <span class=n>node_id</span><span class=o>=</span><span class=n>tag</span><span class=o>.</span><span class=n>id</span><span class=p>,</span>
<a id=__codelineno-0-618 name=__codelineno-0-618></a> <span class=n>registry</span><span class=o>=</span><span class=n>registry</span><span class=p>,</span>
<a id=__codelineno-0-619 name=__codelineno-0-619></a> <span class=p>)</span>
<a id=__codelineno-0-620 name=__codelineno-0-620></a>
<a id=__codelineno-0-621 name=__codelineno-0-621></a> <span class=n>trace_msg</span><span class=p>(</span><span class=s2>&quot;PARSE&quot;</span><span class=p>,</span> <span class=s2>&quot;COMP&quot;</span><span class=p>,</span> <span class=n>result</span><span class=o>.</span><span class=n>component_name</span><span class=p>,</span> <span class=n>tag</span><span class=o>.</span><span class=n>id</span><span class=p>,</span> <span class=s2>&quot;...Done!&quot;</span><span class=p>)</span>
<a id=__codelineno-0-622 name=__codelineno-0-622></a> <span class=k>return</span> <span class=n>component_node</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h4 id=django_components.templatetags.component_tags.component_css_dependencies class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-function"></code> <span class="doc doc-object-name doc-function-name">component_css_dependencies</span> <a href=#django_components.templatetags.component_tags.component_css_dependencies class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>component_css_dependencies</span><span class=p>(</span><span class=n>parser</span><span class=p>:</span> <span class=n><span title=django.template.base.Parser>Parser</span></span><span class=p>,</span> <span class=n>token</span><span class=p>:</span> <span class=n><span title=django.template.base.Token>Token</span></span><span class=p>,</span> <span class=n>tag_spec</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-internal" title=django_components.templatetags.component_tags.TagSpec href=#django_components.templatetags.component_tags.TagSpec>TagSpec</a></span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><span title=django.template.base.TextNode>TextNode</span></span>
</code></pre></div> <div class="doc doc-contents "> <p>Marks location where CSS link tags should be rendered after the whole HTML has been generated.</p> <p>Generally, this should be inserted into the <code>&lt;head&gt;</code> tag of the HTML.</p> <p>If the generated HTML does NOT contain any <code>{% component_css_dependencies %}</code> tags, CSS links are by default inserted into the <code>&lt;head&gt;</code> tag of the HTML. (See <a href=../../concepts/advanced/rendering_js_css/#js-and-css-output-locations>JS and CSS output locations</a>)</p> <p>Note that there should be only one <code>{% component_css_dependencies %}</code> for the whole HTML document. If you insert this tag multiple times, ALL CSS links will be duplicately inserted into ALL these places.</p> <details class=quote> <summary>Source code in <code>src/django_components/templatetags/component_tags.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-141>141</a></span>
<span class=normal><a href=#__codelineno-0-142>142</a></span>
<span class=normal><a href=#__codelineno-0-143>143</a></span>
<span class=normal><a href=#__codelineno-0-144>144</a></span>
<span class=normal><a href=#__codelineno-0-145>145</a></span>
<span class=normal><a href=#__codelineno-0-146>146</a></span>
<span class=normal><a href=#__codelineno-0-147>147</a></span>
<span class=normal><a href=#__codelineno-0-148>148</a></span>
<span class=normal><a href=#__codelineno-0-149>149</a></span>
<span class=normal><a href=#__codelineno-0-150>150</a></span>
<span class=normal><a href=#__codelineno-0-151>151</a></span>
<span class=normal><a href=#__codelineno-0-152>152</a></span>
<span class=normal><a href=#__codelineno-0-153>153</a></span>
<span class=normal><a href=#__codelineno-0-154>154</a></span>
<span class=normal><a href=#__codelineno-0-155>155</a></span>
<span class=normal><a href=#__codelineno-0-156>156</a></span>
<span class=normal><a href=#__codelineno-0-157>157</a></span>
<span class=normal><a href=#__codelineno-0-158>158</a></span>
<span class=normal><a href=#__codelineno-0-159>159</a></span>
<span class=normal><a href=#__codelineno-0-160>160</a></span>
<span class=normal><a href=#__codelineno-0-161>161</a></span>
<span class=normal><a href=#__codelineno-0-162>162</a></span>
<span class=normal><a href=#__codelineno-0-163>163</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-141 name=__codelineno-0-141></a><span class=nd>@register</span><span class=o>.</span><span class=n>tag</span><span class=p>(</span><span class=s2>&quot;component_css_dependencies&quot;</span><span class=p>)</span>
<a id=__codelineno-0-142 name=__codelineno-0-142></a><span class=nd>@with_tag_spec</span><span class=p>(</span>
<a id=__codelineno-0-143 name=__codelineno-0-143></a> <span class=n>TagSpec</span><span class=p>(</span>
<a id=__codelineno-0-144 name=__codelineno-0-144></a> <span class=n>tag</span><span class=o>=</span><span class=s2>&quot;component_css_dependencies&quot;</span><span class=p>,</span>
<a id=__codelineno-0-145 name=__codelineno-0-145></a> <span class=n>end_tag</span><span class=o>=</span><span class=kc>None</span><span class=p>,</span> <span class=c1># inline-only</span>
<a id=__codelineno-0-146 name=__codelineno-0-146></a> <span class=p>)</span>
<a id=__codelineno-0-147 name=__codelineno-0-147></a><span class=p>)</span>
<a id=__codelineno-0-148 name=__codelineno-0-148></a><span class=k>def</span> <span class=nf>component_css_dependencies</span><span class=p>(</span><span class=n>parser</span><span class=p>:</span> <span class=n>Parser</span><span class=p>,</span> <span class=n>token</span><span class=p>:</span> <span class=n>Token</span><span class=p>,</span> <span class=n>tag_spec</span><span class=p>:</span> <span class=n>TagSpec</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n>TextNode</span><span class=p>:</span>
<a id=__codelineno-0-149 name=__codelineno-0-149></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-150 name=__codelineno-0-150></a><span class=sd> Marks location where CSS link tags should be rendered after the whole HTML has been generated.</span>
<a id=__codelineno-0-151 name=__codelineno-0-151></a>
<a id=__codelineno-0-152 name=__codelineno-0-152></a><span class=sd> Generally, this should be inserted into the `&lt;head&gt;` tag of the HTML.</span>
<a id=__codelineno-0-153 name=__codelineno-0-153></a>
<a id=__codelineno-0-154 name=__codelineno-0-154></a><span class=sd> If the generated HTML does NOT contain any `{% component_css_dependencies %}` tags, CSS links</span>
<a id=__codelineno-0-155 name=__codelineno-0-155></a><span class=sd> are by default inserted into the `&lt;head&gt;` tag of the HTML. (See</span>
<a id=__codelineno-0-156 name=__codelineno-0-156></a><span class=sd> [JS and CSS output locations](../../concepts/advanced/rendering_js_css/#js-and-css-output-locations))</span>
<a id=__codelineno-0-157 name=__codelineno-0-157></a>
<a id=__codelineno-0-158 name=__codelineno-0-158></a><span class=sd> Note that there should be only one `{% component_css_dependencies %}` for the whole HTML document.</span>
<a id=__codelineno-0-159 name=__codelineno-0-159></a><span class=sd> If you insert this tag multiple times, ALL CSS links will be duplicately inserted into ALL these places.</span>
<a id=__codelineno-0-160 name=__codelineno-0-160></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-161 name=__codelineno-0-161></a> <span class=c1># Parse to check that the syntax is valid</span>
<a id=__codelineno-0-162 name=__codelineno-0-162></a> <span class=n>_parse_tag</span><span class=p>(</span><span class=n>parser</span><span class=p>,</span> <span class=n>token</span><span class=p>,</span> <span class=n>tag_spec</span><span class=p>)</span>
<a id=__codelineno-0-163 name=__codelineno-0-163></a> <span class=k>return</span> <span class=n>_component_dependencies</span><span class=p>(</span><span class=s2>&quot;css&quot;</span><span class=p>)</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h4 id=django_components.templatetags.component_tags.component_js_dependencies class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-function"></code> <span class="doc doc-object-name doc-function-name">component_js_dependencies</span> <a href=#django_components.templatetags.component_tags.component_js_dependencies class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>component_js_dependencies</span><span class=p>(</span><span class=n>parser</span><span class=p>:</span> <span class=n><span title=django.template.base.Parser>Parser</span></span><span class=p>,</span> <span class=n>token</span><span class=p>:</span> <span class=n><span title=django.template.base.Token>Token</span></span><span class=p>,</span> <span class=n>tag_spec</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-internal" title=django_components.templatetags.component_tags.TagSpec href=#django_components.templatetags.component_tags.TagSpec>TagSpec</a></span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><span title=django.template.base.TextNode>TextNode</span></span>
</code></pre></div> <div class="doc doc-contents "> <p>Marks location where JS link tags should be rendered after the whole HTML has been generated.</p> <p>Generally, this should be inserted at the end of the <code>&lt;body&gt;</code> tag of the HTML.</p> <p>If the generated HTML does NOT contain any <code>{% component_js_dependencies %}</code> tags, JS scripts are by default inserted at the end of the <code>&lt;body&gt;</code> tag of the HTML. (See <a href=../../concepts/advanced/rendering_js_css/#js-and-css-output-locations>JS and CSS output locations</a>)</p> <p>Note that there should be only one <code>{% component_js_dependencies %}</code> for the whole HTML document. If you insert this tag multiple times, ALL JS scripts will be duplicately inserted into ALL these places.</p> <details class=quote> <summary>Source code in <code>src/django_components/templatetags/component_tags.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-166>166</a></span>
<span class=normal><a href=#__codelineno-0-167>167</a></span>
<span class=normal><a href=#__codelineno-0-168>168</a></span>
<span class=normal><a href=#__codelineno-0-169>169</a></span>
<span class=normal><a href=#__codelineno-0-170>170</a></span>
<span class=normal><a href=#__codelineno-0-171>171</a></span>
<span class=normal><a href=#__codelineno-0-172>172</a></span>
<span class=normal><a href=#__codelineno-0-173>173</a></span>
<span class=normal><a href=#__codelineno-0-174>174</a></span>
<span class=normal><a href=#__codelineno-0-175>175</a></span>
<span class=normal><a href=#__codelineno-0-176>176</a></span>
<span class=normal><a href=#__codelineno-0-177>177</a></span>
<span class=normal><a href=#__codelineno-0-178>178</a></span>
<span class=normal><a href=#__codelineno-0-179>179</a></span>
<span class=normal><a href=#__codelineno-0-180>180</a></span>
<span class=normal><a href=#__codelineno-0-181>181</a></span>
<span class=normal><a href=#__codelineno-0-182>182</a></span>
<span class=normal><a href=#__codelineno-0-183>183</a></span>
<span class=normal><a href=#__codelineno-0-184>184</a></span>
<span class=normal><a href=#__codelineno-0-185>185</a></span>
<span class=normal><a href=#__codelineno-0-186>186</a></span>
<span class=normal><a href=#__codelineno-0-187>187</a></span>
<span class=normal><a href=#__codelineno-0-188>188</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-166 name=__codelineno-0-166></a><span class=nd>@register</span><span class=o>.</span><span class=n>tag</span><span class=p>(</span><span class=n>name</span><span class=o>=</span><span class=s2>&quot;component_js_dependencies&quot;</span><span class=p>)</span>
<a id=__codelineno-0-167 name=__codelineno-0-167></a><span class=nd>@with_tag_spec</span><span class=p>(</span>
<a id=__codelineno-0-168 name=__codelineno-0-168></a> <span class=n>TagSpec</span><span class=p>(</span>
<a id=__codelineno-0-169 name=__codelineno-0-169></a> <span class=n>tag</span><span class=o>=</span><span class=s2>&quot;component_js_dependencies&quot;</span><span class=p>,</span>
<a id=__codelineno-0-170 name=__codelineno-0-170></a> <span class=n>end_tag</span><span class=o>=</span><span class=kc>None</span><span class=p>,</span> <span class=c1># inline-only</span>
<a id=__codelineno-0-171 name=__codelineno-0-171></a> <span class=p>)</span>
<a id=__codelineno-0-172 name=__codelineno-0-172></a><span class=p>)</span>
<a id=__codelineno-0-173 name=__codelineno-0-173></a><span class=k>def</span> <span class=nf>component_js_dependencies</span><span class=p>(</span><span class=n>parser</span><span class=p>:</span> <span class=n>Parser</span><span class=p>,</span> <span class=n>token</span><span class=p>:</span> <span class=n>Token</span><span class=p>,</span> <span class=n>tag_spec</span><span class=p>:</span> <span class=n>TagSpec</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n>TextNode</span><span class=p>:</span>
<a id=__codelineno-0-174 name=__codelineno-0-174></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-175 name=__codelineno-0-175></a><span class=sd> Marks location where JS link tags should be rendered after the whole HTML has been generated.</span>
<a id=__codelineno-0-176 name=__codelineno-0-176></a>
<a id=__codelineno-0-177 name=__codelineno-0-177></a><span class=sd> Generally, this should be inserted at the end of the `&lt;body&gt;` tag of the HTML.</span>
<a id=__codelineno-0-178 name=__codelineno-0-178></a>
<a id=__codelineno-0-179 name=__codelineno-0-179></a><span class=sd> If the generated HTML does NOT contain any `{% component_js_dependencies %}` tags, JS scripts</span>
<a id=__codelineno-0-180 name=__codelineno-0-180></a><span class=sd> are by default inserted at the end of the `&lt;body&gt;` tag of the HTML. (See</span>
<a id=__codelineno-0-181 name=__codelineno-0-181></a><span class=sd> [JS and CSS output locations](../../concepts/advanced/rendering_js_css/#js-and-css-output-locations))</span>
<a id=__codelineno-0-182 name=__codelineno-0-182></a>
<a id=__codelineno-0-183 name=__codelineno-0-183></a><span class=sd> Note that there should be only one `{% component_js_dependencies %}` for the whole HTML document.</span>
<a id=__codelineno-0-184 name=__codelineno-0-184></a><span class=sd> If you insert this tag multiple times, ALL JS scripts will be duplicately inserted into ALL these places.</span>
<a id=__codelineno-0-185 name=__codelineno-0-185></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-186 name=__codelineno-0-186></a> <span class=c1># Parse to check that the syntax is valid</span>
<a id=__codelineno-0-187 name=__codelineno-0-187></a> <span class=n>_parse_tag</span><span class=p>(</span><span class=n>parser</span><span class=p>,</span> <span class=n>token</span><span class=p>,</span> <span class=n>tag_spec</span><span class=p>)</span>
<a id=__codelineno-0-188 name=__codelineno-0-188></a> <span class=k>return</span> <span class=n>_component_dependencies</span><span class=p>(</span><span class=s2>&quot;js&quot;</span><span class=p>)</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h4 id=django_components.templatetags.component_tags.fill class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-function"></code> <span class="doc doc-object-name doc-function-name">fill</span> <a href=#django_components.templatetags.component_tags.fill class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>fill</span><span class=p>(</span><span class=n>parser</span><span class=p>:</span> <span class=n><span title=django.template.base.Parser>Parser</span></span><span class=p>,</span> <span class=n>token</span><span class=p>:</span> <span class=n><span title=django.template.base.Token>Token</span></span><span class=p>,</span> <span class=n>tag_spec</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-internal" title=django_components.templatetags.component_tags.TagSpec href=#django_components.templatetags.component_tags.TagSpec>TagSpec</a></span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-internal" title=django_components.slots.FillNode href=#django_components.slots.FillNode>FillNode</a></span>
</code></pre></div> <div class="doc doc-contents "> <p>Use this tag to insert content into component's slots.</p> <p><code>{% fill %}</code> tag may be used only within a <code>{% component %}..{% endcomponent %}</code> block. Runtime checks should prohibit other usages.</p> <p><strong>Args:</strong></p> <ul> <li><code>name</code> (str, required): Name of the slot to insert this content into. Use <code>"default"</code> for the default slot.</li> <li><code>default</code> (str, optional): This argument allows you to access the original content of the slot under the specified variable name. See <a href=../../concepts/fundamentals/slots#accessing-original-content-of-slots>Accessing original content of slots</a></li> <li><code>data</code> (str, optional): This argument allows you to access the data passed to the slot under the specified variable name. See <a href=../../concepts/fundamentals/slots#scoped-slots>Scoped slots</a></li> </ul> <p><strong>Examples:</strong></p> <p>Basic usage: <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=cp>{%</span> <span class=k>component</span> <span class=s2>&quot;my_table&quot;</span> <span class=cp>%}</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a><span class=x> </span><span class=cp>{%</span> <span class=k>fill</span> <span class=s2>&quot;pagination&quot;</span> <span class=cp>%}</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=x> &lt; 1 | 2 | 3 &gt;</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a><span class=x> </span><span class=cp>{%</span> <span class=k>endfill</span> <span class=cp>%}</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a><span class=cp>{%</span> <span class=k>endcomponent</span> <span class=cp>%}</span>
</code></pre></div></p> <h6 id=django_components.templatetags.component_tags.fill--accessing-slots-default-content-with-the-default-kwarg>Accessing slot's default content with the <code>default</code> kwarg<a class=headerlink href=#django_components.templatetags.component_tags.fill--accessing-slots-default-content-with-the-default-kwarg title="Permanent link">¤</a></h6> <div class=highlight><pre><span></span><code><a id=__codelineno-1-1 name=__codelineno-1-1 href=#__codelineno-1-1></a><span class=c>{# my_table.html #}</span>
<a id=__codelineno-1-2 name=__codelineno-1-2 href=#__codelineno-1-2></a><span class=x>&lt;table&gt;</span>
<a id=__codelineno-1-3 name=__codelineno-1-3 href=#__codelineno-1-3></a><span class=x> ...</span>
<a id=__codelineno-1-4 name=__codelineno-1-4 href=#__codelineno-1-4></a><span class=x> </span><span class=cp>{%</span> <span class=k>slot</span> <span class=s2>&quot;pagination&quot;</span> <span class=cp>%}</span>
<a id=__codelineno-1-5 name=__codelineno-1-5 href=#__codelineno-1-5></a><span class=x> &lt; 1 | 2 | 3 &gt;</span>
<a id=__codelineno-1-6 name=__codelineno-1-6 href=#__codelineno-1-6></a><span class=x> </span><span class=cp>{%</span> <span class=k>endslot</span> <span class=cp>%}</span>
<a id=__codelineno-1-7 name=__codelineno-1-7 href=#__codelineno-1-7></a><span class=x>&lt;/table&gt;</span>
</code></pre></div> <div class=highlight><pre><span></span><code><a id=__codelineno-2-1 name=__codelineno-2-1 href=#__codelineno-2-1></a><span class=cp>{%</span> <span class=k>component</span> <span class=s2>&quot;my_table&quot;</span> <span class=cp>%}</span>
<a id=__codelineno-2-2 name=__codelineno-2-2 href=#__codelineno-2-2></a><span class=x> </span><span class=cp>{%</span> <span class=k>fill</span> <span class=s2>&quot;pagination&quot;</span> <span class=nv>default</span><span class=o>=</span><span class=s2>&quot;default_pag&quot;</span> <span class=cp>%}</span>
<a id=__codelineno-2-3 name=__codelineno-2-3 href=#__codelineno-2-3></a><span class=x> &lt;div class=&quot;my-class&quot;&gt;</span>
<a id=__codelineno-2-4 name=__codelineno-2-4 href=#__codelineno-2-4></a><span class=x> </span><span class=cp>{{</span> <span class=nv>default_pag</span> <span class=cp>}}</span>
<a id=__codelineno-2-5 name=__codelineno-2-5 href=#__codelineno-2-5></a><span class=x> &lt;/div&gt;</span>
<a id=__codelineno-2-6 name=__codelineno-2-6 href=#__codelineno-2-6></a><span class=x> </span><span class=cp>{%</span> <span class=k>endfill</span> <span class=cp>%}</span>
<a id=__codelineno-2-7 name=__codelineno-2-7 href=#__codelineno-2-7></a><span class=cp>{%</span> <span class=k>endcomponent</span> <span class=cp>%}</span>
</code></pre></div> <h6 id=django_components.templatetags.component_tags.fill--accessing-slots-data-with-the-data-kwarg>Accessing slot's data with the <code>data</code> kwarg<a class=headerlink href=#django_components.templatetags.component_tags.fill--accessing-slots-data-with-the-data-kwarg title="Permanent link">¤</a></h6> <div class=highlight><pre><span></span><code><a id=__codelineno-3-1 name=__codelineno-3-1 href=#__codelineno-3-1></a><span class=c>{# my_table.html #}</span>
<a id=__codelineno-3-2 name=__codelineno-3-2 href=#__codelineno-3-2></a><span class=x>&lt;table&gt;</span>
<a id=__codelineno-3-3 name=__codelineno-3-3 href=#__codelineno-3-3></a><span class=x> ...</span>
<a id=__codelineno-3-4 name=__codelineno-3-4 href=#__codelineno-3-4></a><span class=x> </span><span class=cp>{%</span> <span class=k>slot</span> <span class=s2>&quot;pagination&quot;</span> <span class=nv>pages</span><span class=o>=</span><span class=nv>pages</span> <span class=cp>%}</span>
<a id=__codelineno-3-5 name=__codelineno-3-5 href=#__codelineno-3-5></a><span class=x> &lt; 1 | 2 | 3 &gt;</span>
<a id=__codelineno-3-6 name=__codelineno-3-6 href=#__codelineno-3-6></a><span class=x> </span><span class=cp>{%</span> <span class=k>endslot</span> <span class=cp>%}</span>
<a id=__codelineno-3-7 name=__codelineno-3-7 href=#__codelineno-3-7></a><span class=x>&lt;/table&gt;</span>
</code></pre></div> <div class=highlight><pre><span></span><code><a id=__codelineno-4-1 name=__codelineno-4-1 href=#__codelineno-4-1></a><span class=cp>{%</span> <span class=k>component</span> <span class=s2>&quot;my_table&quot;</span> <span class=cp>%}</span>
<a id=__codelineno-4-2 name=__codelineno-4-2 href=#__codelineno-4-2></a><span class=x> </span><span class=cp>{%</span> <span class=k>fill</span> <span class=s2>&quot;pagination&quot;</span> <span class=nv>data</span><span class=o>=</span><span class=s2>&quot;slot_data&quot;</span> <span class=cp>%}</span>
<a id=__codelineno-4-3 name=__codelineno-4-3 href=#__codelineno-4-3></a><span class=x> </span><span class=cp>{%</span> <span class=k>for</span> <span class=nv>page</span> <span class=k>in</span> <span class=nv>slot_data.pages</span> <span class=cp>%}</span>
<a id=__codelineno-4-4 name=__codelineno-4-4 href=#__codelineno-4-4></a><span class=x> &lt;a href=&quot;</span><span class=cp>{{</span> <span class=nv>page.link</span> <span class=cp>}}</span><span class=x>&quot;&gt;</span>
<a id=__codelineno-4-5 name=__codelineno-4-5 href=#__codelineno-4-5></a><span class=x> </span><span class=cp>{{</span> <span class=nv>page.index</span> <span class=cp>}}</span>
<a id=__codelineno-4-6 name=__codelineno-4-6 href=#__codelineno-4-6></a><span class=x> &lt;/a&gt;</span>
<a id=__codelineno-4-7 name=__codelineno-4-7 href=#__codelineno-4-7></a><span class=x> </span><span class=cp>{%</span> <span class=k>endfor</span> <span class=cp>%}</span>
<a id=__codelineno-4-8 name=__codelineno-4-8 href=#__codelineno-4-8></a><span class=x> </span><span class=cp>{%</span> <span class=k>endfill</span> <span class=cp>%}</span>
<a id=__codelineno-4-9 name=__codelineno-4-9 href=#__codelineno-4-9></a><span class=cp>{%</span> <span class=k>endcomponent</span> <span class=cp>%}</span>
</code></pre></div> <h6 id=django_components.templatetags.component_tags.fill--accessing-slot-data-and-default-content-on-the-default-slot>Accessing slot data and default content on the default slot<a class=headerlink href=#django_components.templatetags.component_tags.fill--accessing-slot-data-and-default-content-on-the-default-slot title="Permanent link">¤</a></h6> <p>To access slot data and the default slot content on the default slot, use <code>{% fill %}</code> with <code>name</code> set to <code>"default"</code>:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-5-1 name=__codelineno-5-1 href=#__codelineno-5-1></a><span class=cp>{%</span> <span class=k>component</span> <span class=s2>&quot;button&quot;</span> <span class=cp>%}</span>
<a id=__codelineno-5-2 name=__codelineno-5-2 href=#__codelineno-5-2></a><span class=x> </span><span class=cp>{%</span> <span class=k>fill</span> <span class=nv>name</span><span class=o>=</span><span class=s2>&quot;default&quot;</span> <span class=nv>data</span><span class=o>=</span><span class=s2>&quot;slot_data&quot;</span> <span class=nv>default</span><span class=o>=</span><span class=s2>&quot;default_slot&quot;</span> <span class=cp>%}</span>
<a id=__codelineno-5-3 name=__codelineno-5-3 href=#__codelineno-5-3></a><span class=x> You clicked me </span><span class=cp>{{</span> <span class=nv>slot_data.count</span> <span class=cp>}}</span><span class=x> times!</span>
<a id=__codelineno-5-4 name=__codelineno-5-4 href=#__codelineno-5-4></a><span class=x> </span><span class=cp>{{</span> <span class=nv>default_slot</span> <span class=cp>}}</span>
<a id=__codelineno-5-5 name=__codelineno-5-5 href=#__codelineno-5-5></a><span class=x> </span><span class=cp>{%</span> <span class=k>endfill</span> <span class=cp>%}</span>
<a id=__codelineno-5-6 name=__codelineno-5-6 href=#__codelineno-5-6></a><span class=cp>{%</span> <span class=k>endcomponent</span> <span class=cp>%}</span>
</code></pre></div> <details class=quote> <summary>Source code in <code>src/django_components/templatetags/component_tags.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-347>347</a></span>
<span class=normal><a href=#__codelineno-0-348>348</a></span>
<span class=normal><a href=#__codelineno-0-349>349</a></span>
<span class=normal><a href=#__codelineno-0-350>350</a></span>
<span class=normal><a href=#__codelineno-0-351>351</a></span>
<span class=normal><a href=#__codelineno-0-352>352</a></span>
<span class=normal><a href=#__codelineno-0-353>353</a></span>
<span class=normal><a href=#__codelineno-0-354>354</a></span>
<span class=normal><a href=#__codelineno-0-355>355</a></span>
<span class=normal><a href=#__codelineno-0-356>356</a></span>
<span class=normal><a href=#__codelineno-0-357>357</a></span>
<span class=normal><a href=#__codelineno-0-358>358</a></span>
<span class=normal><a href=#__codelineno-0-359>359</a></span>
<span class=normal><a href=#__codelineno-0-360>360</a></span>
<span class=normal><a href=#__codelineno-0-361>361</a></span>
<span class=normal><a href=#__codelineno-0-362>362</a></span>
<span class=normal><a href=#__codelineno-0-363>363</a></span>
<span class=normal><a href=#__codelineno-0-364>364</a></span>
<span class=normal><a href=#__codelineno-0-365>365</a></span>
<span class=normal><a href=#__codelineno-0-366>366</a></span>
<span class=normal><a href=#__codelineno-0-367>367</a></span>
<span class=normal><a href=#__codelineno-0-368>368</a></span>
<span class=normal><a href=#__codelineno-0-369>369</a></span>
<span class=normal><a href=#__codelineno-0-370>370</a></span>
<span class=normal><a href=#__codelineno-0-371>371</a></span>
<span class=normal><a href=#__codelineno-0-372>372</a></span>
<span class=normal><a href=#__codelineno-0-373>373</a></span>
<span class=normal><a href=#__codelineno-0-374>374</a></span>
<span class=normal><a href=#__codelineno-0-375>375</a></span>
<span class=normal><a href=#__codelineno-0-376>376</a></span>
<span class=normal><a href=#__codelineno-0-377>377</a></span>
<span class=normal><a href=#__codelineno-0-378>378</a></span>
<span class=normal><a href=#__codelineno-0-379>379</a></span>
<span class=normal><a href=#__codelineno-0-380>380</a></span>
<span class=normal><a href=#__codelineno-0-381>381</a></span>
<span class=normal><a href=#__codelineno-0-382>382</a></span>
<span class=normal><a href=#__codelineno-0-383>383</a></span>
<span class=normal><a href=#__codelineno-0-384>384</a></span>
<span class=normal><a href=#__codelineno-0-385>385</a></span>
<span class=normal><a href=#__codelineno-0-386>386</a></span>
<span class=normal><a href=#__codelineno-0-387>387</a></span>
<span class=normal><a href=#__codelineno-0-388>388</a></span>
<span class=normal><a href=#__codelineno-0-389>389</a></span>
<span class=normal><a href=#__codelineno-0-390>390</a></span>
<span class=normal><a href=#__codelineno-0-391>391</a></span>
<span class=normal><a href=#__codelineno-0-392>392</a></span>
<span class=normal><a href=#__codelineno-0-393>393</a></span>
<span class=normal><a href=#__codelineno-0-394>394</a></span>
<span class=normal><a href=#__codelineno-0-395>395</a></span>
<span class=normal><a href=#__codelineno-0-396>396</a></span>
<span class=normal><a href=#__codelineno-0-397>397</a></span>
<span class=normal><a href=#__codelineno-0-398>398</a></span>
<span class=normal><a href=#__codelineno-0-399>399</a></span>
<span class=normal><a href=#__codelineno-0-400>400</a></span>
<span class=normal><a href=#__codelineno-0-401>401</a></span>
<span class=normal><a href=#__codelineno-0-402>402</a></span>
<span class=normal><a href=#__codelineno-0-403>403</a></span>
<span class=normal><a href=#__codelineno-0-404>404</a></span>
<span class=normal><a href=#__codelineno-0-405>405</a></span>
<span class=normal><a href=#__codelineno-0-406>406</a></span>
<span class=normal><a href=#__codelineno-0-407>407</a></span>
<span class=normal><a href=#__codelineno-0-408>408</a></span>
<span class=normal><a href=#__codelineno-0-409>409</a></span>
<span class=normal><a href=#__codelineno-0-410>410</a></span>
<span class=normal><a href=#__codelineno-0-411>411</a></span>
<span class=normal><a href=#__codelineno-0-412>412</a></span>
<span class=normal><a href=#__codelineno-0-413>413</a></span>
<span class=normal><a href=#__codelineno-0-414>414</a></span>
<span class=normal><a href=#__codelineno-0-415>415</a></span>
<span class=normal><a href=#__codelineno-0-416>416</a></span>
<span class=normal><a href=#__codelineno-0-417>417</a></span>
<span class=normal><a href=#__codelineno-0-418>418</a></span>
<span class=normal><a href=#__codelineno-0-419>419</a></span>
<span class=normal><a href=#__codelineno-0-420>420</a></span>
<span class=normal><a href=#__codelineno-0-421>421</a></span>
<span class=normal><a href=#__codelineno-0-422>422</a></span>
<span class=normal><a href=#__codelineno-0-423>423</a></span>
<span class=normal><a href=#__codelineno-0-424>424</a></span>
<span class=normal><a href=#__codelineno-0-425>425</a></span>
<span class=normal><a href=#__codelineno-0-426>426</a></span>
<span class=normal><a href=#__codelineno-0-427>427</a></span>
<span class=normal><a href=#__codelineno-0-428>428</a></span>
<span class=normal><a href=#__codelineno-0-429>429</a></span>
<span class=normal><a href=#__codelineno-0-430>430</a></span>
<span class=normal><a href=#__codelineno-0-431>431</a></span>
<span class=normal><a href=#__codelineno-0-432>432</a></span>
<span class=normal><a href=#__codelineno-0-433>433</a></span>
<span class=normal><a href=#__codelineno-0-434>434</a></span>
<span class=normal><a href=#__codelineno-0-435>435</a></span>
<span class=normal><a href=#__codelineno-0-436>436</a></span>
<span class=normal><a href=#__codelineno-0-437>437</a></span>
<span class=normal><a href=#__codelineno-0-438>438</a></span>
<span class=normal><a href=#__codelineno-0-439>439</a></span>
<span class=normal><a href=#__codelineno-0-440>440</a></span>
<span class=normal><a href=#__codelineno-0-441>441</a></span>
<span class=normal><a href=#__codelineno-0-442>442</a></span>
<span class=normal><a href=#__codelineno-0-443>443</a></span>
<span class=normal><a href=#__codelineno-0-444>444</a></span>
<span class=normal><a href=#__codelineno-0-445>445</a></span>
<span class=normal><a href=#__codelineno-0-446>446</a></span>
<span class=normal><a href=#__codelineno-0-447>447</a></span>
<span class=normal><a href=#__codelineno-0-448>448</a></span>
<span class=normal><a href=#__codelineno-0-449>449</a></span>
<span class=normal><a href=#__codelineno-0-450>450</a></span>
<span class=normal><a href=#__codelineno-0-451>451</a></span>
<span class=normal><a href=#__codelineno-0-452>452</a></span>
<span class=normal><a href=#__codelineno-0-453>453</a></span>
<span class=normal><a href=#__codelineno-0-454>454</a></span>
<span class=normal><a href=#__codelineno-0-455>455</a></span>
<span class=normal><a href=#__codelineno-0-456>456</a></span>
<span class=normal><a href=#__codelineno-0-457>457</a></span>
<span class=normal><a href=#__codelineno-0-458>458</a></span>
<span class=normal><a href=#__codelineno-0-459>459</a></span>
<span class=normal><a href=#__codelineno-0-460>460</a></span>
<span class=normal><a href=#__codelineno-0-461>461</a></span>
<span class=normal><a href=#__codelineno-0-462>462</a></span>
<span class=normal><a href=#__codelineno-0-463>463</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-347 name=__codelineno-0-347></a><span class=nd>@register</span><span class=o>.</span><span class=n>tag</span><span class=p>(</span><span class=s2>&quot;fill&quot;</span><span class=p>)</span>
<a id=__codelineno-0-348 name=__codelineno-0-348></a><span class=nd>@with_tag_spec</span><span class=p>(</span>
<a id=__codelineno-0-349 name=__codelineno-0-349></a> <span class=n>TagSpec</span><span class=p>(</span>
<a id=__codelineno-0-350 name=__codelineno-0-350></a> <span class=n>tag</span><span class=o>=</span><span class=s2>&quot;fill&quot;</span><span class=p>,</span>
<a id=__codelineno-0-351 name=__codelineno-0-351></a> <span class=n>end_tag</span><span class=o>=</span><span class=s2>&quot;endfill&quot;</span><span class=p>,</span>
<a id=__codelineno-0-352 name=__codelineno-0-352></a> <span class=n>positional_only_args</span><span class=o>=</span><span class=p>[],</span>
<a id=__codelineno-0-353 name=__codelineno-0-353></a> <span class=n>pos_or_keyword_args</span><span class=o>=</span><span class=p>[</span><span class=n>SLOT_NAME_KWARG</span><span class=p>],</span>
<a id=__codelineno-0-354 name=__codelineno-0-354></a> <span class=n>keywordonly_args</span><span class=o>=</span><span class=p>[</span><span class=n>SLOT_DATA_KWARG</span><span class=p>,</span> <span class=n>SLOT_DEFAULT_KWARG</span><span class=p>],</span>
<a id=__codelineno-0-355 name=__codelineno-0-355></a> <span class=n>optional_kwargs</span><span class=o>=</span><span class=p>[</span><span class=n>SLOT_DATA_KWARG</span><span class=p>,</span> <span class=n>SLOT_DEFAULT_KWARG</span><span class=p>],</span>
<a id=__codelineno-0-356 name=__codelineno-0-356></a> <span class=n>repeatable_kwargs</span><span class=o>=</span><span class=kc>False</span><span class=p>,</span>
<a id=__codelineno-0-357 name=__codelineno-0-357></a> <span class=p>)</span>
<a id=__codelineno-0-358 name=__codelineno-0-358></a><span class=p>)</span>
<a id=__codelineno-0-359 name=__codelineno-0-359></a><span class=k>def</span> <span class=nf>fill</span><span class=p>(</span><span class=n>parser</span><span class=p>:</span> <span class=n>Parser</span><span class=p>,</span> <span class=n>token</span><span class=p>:</span> <span class=n>Token</span><span class=p>,</span> <span class=n>tag_spec</span><span class=p>:</span> <span class=n>TagSpec</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n>FillNode</span><span class=p>:</span>
<a id=__codelineno-0-360 name=__codelineno-0-360></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-361 name=__codelineno-0-361></a><span class=sd> Use this tag to insert content into component&#39;s slots.</span>
<a id=__codelineno-0-362 name=__codelineno-0-362></a>
<a id=__codelineno-0-363 name=__codelineno-0-363></a><span class=sd> `{% fill %}` tag may be used only within a `{% component %}..{% endcomponent %}` block.</span>
<a id=__codelineno-0-364 name=__codelineno-0-364></a><span class=sd> Runtime checks should prohibit other usages.</span>
<a id=__codelineno-0-365 name=__codelineno-0-365></a>
<a id=__codelineno-0-366 name=__codelineno-0-366></a><span class=sd> **Args:**</span>
<a id=__codelineno-0-367 name=__codelineno-0-367></a>
<a id=__codelineno-0-368 name=__codelineno-0-368></a><span class=sd> - `name` (str, required): Name of the slot to insert this content into. Use `&quot;default&quot;` for</span>
<a id=__codelineno-0-369 name=__codelineno-0-369></a><span class=sd> the default slot.</span>
<a id=__codelineno-0-370 name=__codelineno-0-370></a><span class=sd> - `default` (str, optional): This argument allows you to access the original content of the slot</span>
<a id=__codelineno-0-371 name=__codelineno-0-371></a><span class=sd> under the specified variable name. See</span>
<a id=__codelineno-0-372 name=__codelineno-0-372></a><span class=sd> [Accessing original content of slots](../../concepts/fundamentals/slots#accessing-original-content-of-slots)</span>
<a id=__codelineno-0-373 name=__codelineno-0-373></a><span class=sd> - `data` (str, optional): This argument allows you to access the data passed to the slot</span>
<a id=__codelineno-0-374 name=__codelineno-0-374></a><span class=sd> under the specified variable name. See [Scoped slots](../../concepts/fundamentals/slots#scoped-slots)</span>
<a id=__codelineno-0-375 name=__codelineno-0-375></a>
<a id=__codelineno-0-376 name=__codelineno-0-376></a><span class=sd> **Examples:**</span>
<a id=__codelineno-0-377 name=__codelineno-0-377></a>
<a id=__codelineno-0-378 name=__codelineno-0-378></a><span class=sd> Basic usage:</span>
<a id=__codelineno-0-379 name=__codelineno-0-379></a><span class=sd> ```django</span>
<a id=__codelineno-0-380 name=__codelineno-0-380></a><span class=sd> {% component &quot;my_table&quot; %}</span>
<a id=__codelineno-0-381 name=__codelineno-0-381></a><span class=sd> {% fill &quot;pagination&quot; %}</span>
<a id=__codelineno-0-382 name=__codelineno-0-382></a><span class=sd> &lt; 1 | 2 | 3 &gt;</span>
<a id=__codelineno-0-383 name=__codelineno-0-383></a><span class=sd> {% endfill %}</span>
<a id=__codelineno-0-384 name=__codelineno-0-384></a><span class=sd> {% endcomponent %}</span>
<a id=__codelineno-0-385 name=__codelineno-0-385></a><span class=sd> ```</span>
<a id=__codelineno-0-386 name=__codelineno-0-386></a>
<a id=__codelineno-0-387 name=__codelineno-0-387></a><span class=sd> ### Accessing slot&#39;s default content with the `default` kwarg</span>
<a id=__codelineno-0-388 name=__codelineno-0-388></a>
<a id=__codelineno-0-389 name=__codelineno-0-389></a><span class=sd> ```django</span>
<a id=__codelineno-0-390 name=__codelineno-0-390></a><span class=sd> {# my_table.html #}</span>
<a id=__codelineno-0-391 name=__codelineno-0-391></a><span class=sd> &lt;table&gt;</span>
<a id=__codelineno-0-392 name=__codelineno-0-392></a><span class=sd> ...</span>
<a id=__codelineno-0-393 name=__codelineno-0-393></a><span class=sd> {% slot &quot;pagination&quot; %}</span>
<a id=__codelineno-0-394 name=__codelineno-0-394></a><span class=sd> &lt; 1 | 2 | 3 &gt;</span>
<a id=__codelineno-0-395 name=__codelineno-0-395></a><span class=sd> {% endslot %}</span>
<a id=__codelineno-0-396 name=__codelineno-0-396></a><span class=sd> &lt;/table&gt;</span>
<a id=__codelineno-0-397 name=__codelineno-0-397></a><span class=sd> ```</span>
<a id=__codelineno-0-398 name=__codelineno-0-398></a>
<a id=__codelineno-0-399 name=__codelineno-0-399></a><span class=sd> ```django</span>
<a id=__codelineno-0-400 name=__codelineno-0-400></a><span class=sd> {% component &quot;my_table&quot; %}</span>
<a id=__codelineno-0-401 name=__codelineno-0-401></a><span class=sd> {% fill &quot;pagination&quot; default=&quot;default_pag&quot; %}</span>
<a id=__codelineno-0-402 name=__codelineno-0-402></a><span class=sd> &lt;div class=&quot;my-class&quot;&gt;</span>
<a id=__codelineno-0-403 name=__codelineno-0-403></a><span class=sd> {{ default_pag }}</span>
<a id=__codelineno-0-404 name=__codelineno-0-404></a><span class=sd> &lt;/div&gt;</span>
<a id=__codelineno-0-405 name=__codelineno-0-405></a><span class=sd> {% endfill %}</span>
<a id=__codelineno-0-406 name=__codelineno-0-406></a><span class=sd> {% endcomponent %}</span>
<a id=__codelineno-0-407 name=__codelineno-0-407></a><span class=sd> ```</span>
<a id=__codelineno-0-408 name=__codelineno-0-408></a>
<a id=__codelineno-0-409 name=__codelineno-0-409></a><span class=sd> ### Accessing slot&#39;s data with the `data` kwarg</span>
<a id=__codelineno-0-410 name=__codelineno-0-410></a>
<a id=__codelineno-0-411 name=__codelineno-0-411></a><span class=sd> ```django</span>
<a id=__codelineno-0-412 name=__codelineno-0-412></a><span class=sd> {# my_table.html #}</span>
<a id=__codelineno-0-413 name=__codelineno-0-413></a><span class=sd> &lt;table&gt;</span>
<a id=__codelineno-0-414 name=__codelineno-0-414></a><span class=sd> ...</span>
<a id=__codelineno-0-415 name=__codelineno-0-415></a><span class=sd> {% slot &quot;pagination&quot; pages=pages %}</span>
<a id=__codelineno-0-416 name=__codelineno-0-416></a><span class=sd> &lt; 1 | 2 | 3 &gt;</span>
<a id=__codelineno-0-417 name=__codelineno-0-417></a><span class=sd> {% endslot %}</span>
<a id=__codelineno-0-418 name=__codelineno-0-418></a><span class=sd> &lt;/table&gt;</span>
<a id=__codelineno-0-419 name=__codelineno-0-419></a><span class=sd> ```</span>
<a id=__codelineno-0-420 name=__codelineno-0-420></a>
<a id=__codelineno-0-421 name=__codelineno-0-421></a><span class=sd> ```django</span>
<a id=__codelineno-0-422 name=__codelineno-0-422></a><span class=sd> {% component &quot;my_table&quot; %}</span>
<a id=__codelineno-0-423 name=__codelineno-0-423></a><span class=sd> {% fill &quot;pagination&quot; data=&quot;slot_data&quot; %}</span>
<a id=__codelineno-0-424 name=__codelineno-0-424></a><span class=sd> {% for page in slot_data.pages %}</span>
<a id=__codelineno-0-425 name=__codelineno-0-425></a><span class=sd> &lt;a href=&quot;{{ page.link }}&quot;&gt;</span>
<a id=__codelineno-0-426 name=__codelineno-0-426></a><span class=sd> {{ page.index }}</span>
<a id=__codelineno-0-427 name=__codelineno-0-427></a><span class=sd> &lt;/a&gt;</span>
<a id=__codelineno-0-428 name=__codelineno-0-428></a><span class=sd> {% endfor %}</span>
<a id=__codelineno-0-429 name=__codelineno-0-429></a><span class=sd> {% endfill %}</span>
<a id=__codelineno-0-430 name=__codelineno-0-430></a><span class=sd> {% endcomponent %}</span>
<a id=__codelineno-0-431 name=__codelineno-0-431></a><span class=sd> ```</span>
<a id=__codelineno-0-432 name=__codelineno-0-432></a>
<a id=__codelineno-0-433 name=__codelineno-0-433></a><span class=sd> ### Accessing slot data and default content on the default slot</span>
<a id=__codelineno-0-434 name=__codelineno-0-434></a>
<a id=__codelineno-0-435 name=__codelineno-0-435></a><span class=sd> To access slot data and the default slot content on the default slot,</span>
<a id=__codelineno-0-436 name=__codelineno-0-436></a><span class=sd> use `{% fill %}` with `name` set to `&quot;default&quot;`:</span>
<a id=__codelineno-0-437 name=__codelineno-0-437></a>
<a id=__codelineno-0-438 name=__codelineno-0-438></a><span class=sd> ```django</span>
<a id=__codelineno-0-439 name=__codelineno-0-439></a><span class=sd> {% component &quot;button&quot; %}</span>
<a id=__codelineno-0-440 name=__codelineno-0-440></a><span class=sd> {% fill name=&quot;default&quot; data=&quot;slot_data&quot; default=&quot;default_slot&quot; %}</span>
<a id=__codelineno-0-441 name=__codelineno-0-441></a><span class=sd> You clicked me {{ slot_data.count }} times!</span>
<a id=__codelineno-0-442 name=__codelineno-0-442></a><span class=sd> {{ default_slot }}</span>
<a id=__codelineno-0-443 name=__codelineno-0-443></a><span class=sd> {% endfill %}</span>
<a id=__codelineno-0-444 name=__codelineno-0-444></a><span class=sd> {% endcomponent %}</span>
<a id=__codelineno-0-445 name=__codelineno-0-445></a><span class=sd> ```</span>
<a id=__codelineno-0-446 name=__codelineno-0-446></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-447 name=__codelineno-0-447></a> <span class=n>tag</span> <span class=o>=</span> <span class=n>_parse_tag</span><span class=p>(</span><span class=n>parser</span><span class=p>,</span> <span class=n>token</span><span class=p>,</span> <span class=n>tag_spec</span><span class=p>)</span>
<a id=__codelineno-0-448 name=__codelineno-0-448></a>
<a id=__codelineno-0-449 name=__codelineno-0-449></a> <span class=n>fill_name_kwarg</span> <span class=o>=</span> <span class=n>tag</span><span class=o>.</span><span class=n>kwargs</span><span class=o>.</span><span class=n>kwargs</span><span class=o>.</span><span class=n>get</span><span class=p>(</span><span class=n>SLOT_NAME_KWARG</span><span class=p>,</span> <span class=kc>None</span><span class=p>)</span>
<a id=__codelineno-0-450 name=__codelineno-0-450></a> <span class=n>trace_id</span> <span class=o>=</span> <span class=sa>f</span><span class=s2>&quot;fill-id-</span><span class=si>{</span><span class=n>tag</span><span class=o>.</span><span class=n>id</span><span class=si>}</span><span class=s2> (</span><span class=si>{</span><span class=n>fill_name_kwarg</span><span class=si>}</span><span class=s2>)&quot;</span> <span class=k>if</span> <span class=n>fill_name_kwarg</span> <span class=k>else</span> <span class=sa>f</span><span class=s2>&quot;fill-id-</span><span class=si>{</span><span class=n>tag</span><span class=o>.</span><span class=n>id</span><span class=si>}</span><span class=s2>&quot;</span>
<a id=__codelineno-0-451 name=__codelineno-0-451></a>
<a id=__codelineno-0-452 name=__codelineno-0-452></a> <span class=n>trace_msg</span><span class=p>(</span><span class=s2>&quot;PARSE&quot;</span><span class=p>,</span> <span class=s2>&quot;FILL&quot;</span><span class=p>,</span> <span class=n>trace_id</span><span class=p>,</span> <span class=n>tag</span><span class=o>.</span><span class=n>id</span><span class=p>)</span>
<a id=__codelineno-0-453 name=__codelineno-0-453></a>
<a id=__codelineno-0-454 name=__codelineno-0-454></a> <span class=n>body</span> <span class=o>=</span> <span class=n>tag</span><span class=o>.</span><span class=n>parse_body</span><span class=p>()</span>
<a id=__codelineno-0-455 name=__codelineno-0-455></a> <span class=n>fill_node</span> <span class=o>=</span> <span class=n>FillNode</span><span class=p>(</span>
<a id=__codelineno-0-456 name=__codelineno-0-456></a> <span class=n>nodelist</span><span class=o>=</span><span class=n>body</span><span class=p>,</span>
<a id=__codelineno-0-457 name=__codelineno-0-457></a> <span class=n>node_id</span><span class=o>=</span><span class=n>tag</span><span class=o>.</span><span class=n>id</span><span class=p>,</span>
<a id=__codelineno-0-458 name=__codelineno-0-458></a> <span class=n>kwargs</span><span class=o>=</span><span class=n>tag</span><span class=o>.</span><span class=n>kwargs</span><span class=p>,</span>
<a id=__codelineno-0-459 name=__codelineno-0-459></a> <span class=n>trace_id</span><span class=o>=</span><span class=n>trace_id</span><span class=p>,</span>
<a id=__codelineno-0-460 name=__codelineno-0-460></a> <span class=p>)</span>
<a id=__codelineno-0-461 name=__codelineno-0-461></a>
<a id=__codelineno-0-462 name=__codelineno-0-462></a> <span class=n>trace_msg</span><span class=p>(</span><span class=s2>&quot;PARSE&quot;</span><span class=p>,</span> <span class=s2>&quot;FILL&quot;</span><span class=p>,</span> <span class=n>trace_id</span><span class=p>,</span> <span class=n>tag</span><span class=o>.</span><span class=n>id</span><span class=p>,</span> <span class=s2>&quot;...Done!&quot;</span><span class=p>)</span>
<a id=__codelineno-0-463 name=__codelineno-0-463></a> <span class=k>return</span> <span class=n>fill_node</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h4 id=django_components.templatetags.component_tags.html_attrs class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-function"></code> <span class="doc doc-object-name doc-function-name">html_attrs</span> <a href=#django_components.templatetags.component_tags.html_attrs class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>html_attrs</span><span class=p>(</span><span class=n>parser</span><span class=p>:</span> <span class=n><span title=django.template.base.Parser>Parser</span></span><span class=p>,</span> <span class=n>token</span><span class=p>:</span> <span class=n><span title=django.template.base.Token>Token</span></span><span class=p>,</span> <span class=n>tag_spec</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-internal" title=django_components.templatetags.component_tags.TagSpec href=#django_components.templatetags.component_tags.TagSpec>TagSpec</a></span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><span title=django_components.attributes.HtmlAttrsNode>HtmlAttrsNode</span></span>
</code></pre></div> <div class="doc doc-contents "> <p>Generate HTML attributes (<code>key="value"</code>), combining data from multiple sources, whether its template variables or static text.</p> <p>It is designed to easily merge HTML attributes passed from outside with the internal. See how to in <a href=../../guides/howto/passing_html_attrs/ >Passing HTML attributes to components</a>.</p> <p><strong>Args:</strong></p> <ul> <li><code>attrs</code> (dict, optional): Optional dictionary that holds HTML attributes. On conflict, overrides values in the <code>default</code> dictionary.</li> <li><code>default</code> (str, optional): Optional dictionary that holds HTML attributes. On conflict, is overriden with values in the <code>attrs</code> dictionary.</li> <li>Any extra kwargs will be appended to the corresponding keys</li> </ul> <p>The attributes in <code>attrs</code> and <code>defaults</code> are merged and resulting dict is rendered as HTML attributes (<code>key="value"</code>).</p> <p>Extra kwargs (<code>key=value</code>) are concatenated to existing keys. So if we have</p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>attrs</span> <span class=o>=</span> <span class=p>{</span><span class=s2>&quot;class&quot;</span><span class=p>:</span> <span class=s2>&quot;my-class&quot;</span><span class=p>}</span>
</code></pre></div> <p>Then</p> <div class=highlight><pre><span></span><code><a id=__codelineno-1-1 name=__codelineno-1-1 href=#__codelineno-1-1></a><span class=cp>{%</span> <span class=k>html_attrs</span> <span class=nv>attrs</span> <span class=nv>class</span><span class=o>=</span><span class=s2>&quot;extra-class&quot;</span> <span class=cp>%}</span>
</code></pre></div> <p>will result in <code>class="my-class extra-class"</code>.</p> <p><strong>Example:</strong> <div class=highlight><pre><span></span><code><a id=__codelineno-2-1 name=__codelineno-2-1 href=#__codelineno-2-1></a><span class=x>&lt;div </span><span class=cp>{%</span> <span class=k>html_attrs</span>
<a id=__codelineno-2-2 name=__codelineno-2-2 href=#__codelineno-2-2></a> <span class=nv>attrs</span>
<a id=__codelineno-2-3 name=__codelineno-2-3 href=#__codelineno-2-3></a> <span class=nv>defaults</span><span class=o>:</span><span class=nv>class</span><span class=o>=</span><span class=s2>&quot;default-class&quot;</span>
<a id=__codelineno-2-4 name=__codelineno-2-4 href=#__codelineno-2-4></a> <span class=nv>class</span><span class=o>=</span><span class=s2>&quot;extra-class&quot;</span>
<a id=__codelineno-2-5 name=__codelineno-2-5 href=#__codelineno-2-5></a> <span class=nv>data-id</span><span class=o>=</span><span class=s2>&quot;123&quot;</span>
<a id=__codelineno-2-6 name=__codelineno-2-6 href=#__codelineno-2-6></a><span class=cp>%}</span><span class=x>&gt;</span>
</code></pre></div></p> <p>renders</p> <div class=highlight><pre><span></span><code><a id=__codelineno-3-1 name=__codelineno-3-1 href=#__codelineno-3-1></a><span class=p>&lt;</span><span class=nt>div</span> <span class=na>class</span><span class=o>=</span><span class=s>&quot;my-class extra-class&quot;</span> <span class=na>data-id</span><span class=o>=</span><span class=s>&quot;123&quot;</span><span class=p>&gt;</span>
</code></pre></div> <p><strong>See more usage examples in <a href=../../concepts/fundamentals/html_attributes#examples-for-html_attrs>HTML attributes</a>.</strong></p> <details class=quote> <summary>Source code in <code>src/django_components/templatetags/component_tags.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-726>726</a></span>
<span class=normal><a href=#__codelineno-0-727>727</a></span>
<span class=normal><a href=#__codelineno-0-728>728</a></span>
<span class=normal><a href=#__codelineno-0-729>729</a></span>
<span class=normal><a href=#__codelineno-0-730>730</a></span>
<span class=normal><a href=#__codelineno-0-731>731</a></span>
<span class=normal><a href=#__codelineno-0-732>732</a></span>
<span class=normal><a href=#__codelineno-0-733>733</a></span>
<span class=normal><a href=#__codelineno-0-734>734</a></span>
<span class=normal><a href=#__codelineno-0-735>735</a></span>
<span class=normal><a href=#__codelineno-0-736>736</a></span>
<span class=normal><a href=#__codelineno-0-737>737</a></span>
<span class=normal><a href=#__codelineno-0-738>738</a></span>
<span class=normal><a href=#__codelineno-0-739>739</a></span>
<span class=normal><a href=#__codelineno-0-740>740</a></span>
<span class=normal><a href=#__codelineno-0-741>741</a></span>
<span class=normal><a href=#__codelineno-0-742>742</a></span>
<span class=normal><a href=#__codelineno-0-743>743</a></span>
<span class=normal><a href=#__codelineno-0-744>744</a></span>
<span class=normal><a href=#__codelineno-0-745>745</a></span>
<span class=normal><a href=#__codelineno-0-746>746</a></span>
<span class=normal><a href=#__codelineno-0-747>747</a></span>
<span class=normal><a href=#__codelineno-0-748>748</a></span>
<span class=normal><a href=#__codelineno-0-749>749</a></span>
<span class=normal><a href=#__codelineno-0-750>750</a></span>
<span class=normal><a href=#__codelineno-0-751>751</a></span>
<span class=normal><a href=#__codelineno-0-752>752</a></span>
<span class=normal><a href=#__codelineno-0-753>753</a></span>
<span class=normal><a href=#__codelineno-0-754>754</a></span>
<span class=normal><a href=#__codelineno-0-755>755</a></span>
<span class=normal><a href=#__codelineno-0-756>756</a></span>
<span class=normal><a href=#__codelineno-0-757>757</a></span>
<span class=normal><a href=#__codelineno-0-758>758</a></span>
<span class=normal><a href=#__codelineno-0-759>759</a></span>
<span class=normal><a href=#__codelineno-0-760>760</a></span>
<span class=normal><a href=#__codelineno-0-761>761</a></span>
<span class=normal><a href=#__codelineno-0-762>762</a></span>
<span class=normal><a href=#__codelineno-0-763>763</a></span>
<span class=normal><a href=#__codelineno-0-764>764</a></span>
<span class=normal><a href=#__codelineno-0-765>765</a></span>
<span class=normal><a href=#__codelineno-0-766>766</a></span>
<span class=normal><a href=#__codelineno-0-767>767</a></span>
<span class=normal><a href=#__codelineno-0-768>768</a></span>
<span class=normal><a href=#__codelineno-0-769>769</a></span>
<span class=normal><a href=#__codelineno-0-770>770</a></span>
<span class=normal><a href=#__codelineno-0-771>771</a></span>
<span class=normal><a href=#__codelineno-0-772>772</a></span>
<span class=normal><a href=#__codelineno-0-773>773</a></span>
<span class=normal><a href=#__codelineno-0-774>774</a></span>
<span class=normal><a href=#__codelineno-0-775>775</a></span>
<span class=normal><a href=#__codelineno-0-776>776</a></span>
<span class=normal><a href=#__codelineno-0-777>777</a></span>
<span class=normal><a href=#__codelineno-0-778>778</a></span>
<span class=normal><a href=#__codelineno-0-779>779</a></span>
<span class=normal><a href=#__codelineno-0-780>780</a></span>
<span class=normal><a href=#__codelineno-0-781>781</a></span>
<span class=normal><a href=#__codelineno-0-782>782</a></span>
<span class=normal><a href=#__codelineno-0-783>783</a></span>
<span class=normal><a href=#__codelineno-0-784>784</a></span>
<span class=normal><a href=#__codelineno-0-785>785</a></span>
<span class=normal><a href=#__codelineno-0-786>786</a></span>
<span class=normal><a href=#__codelineno-0-787>787</a></span>
<span class=normal><a href=#__codelineno-0-788>788</a></span>
<span class=normal><a href=#__codelineno-0-789>789</a></span>
<span class=normal><a href=#__codelineno-0-790>790</a></span>
<span class=normal><a href=#__codelineno-0-791>791</a></span>
<span class=normal><a href=#__codelineno-0-792>792</a></span>
<span class=normal><a href=#__codelineno-0-793>793</a></span>
<span class=normal><a href=#__codelineno-0-794>794</a></span>
<span class=normal><a href=#__codelineno-0-795>795</a></span>
<span class=normal><a href=#__codelineno-0-796>796</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-726 name=__codelineno-0-726></a><span class=nd>@register</span><span class=o>.</span><span class=n>tag</span><span class=p>(</span><span class=s2>&quot;html_attrs&quot;</span><span class=p>)</span>
<a id=__codelineno-0-727 name=__codelineno-0-727></a><span class=nd>@with_tag_spec</span><span class=p>(</span>
<a id=__codelineno-0-728 name=__codelineno-0-728></a> <span class=n>TagSpec</span><span class=p>(</span>
<a id=__codelineno-0-729 name=__codelineno-0-729></a> <span class=n>tag</span><span class=o>=</span><span class=s2>&quot;html_attrs&quot;</span><span class=p>,</span>
<a id=__codelineno-0-730 name=__codelineno-0-730></a> <span class=n>end_tag</span><span class=o>=</span><span class=kc>None</span><span class=p>,</span> <span class=c1># inline-only</span>
<a id=__codelineno-0-731 name=__codelineno-0-731></a> <span class=n>positional_only_args</span><span class=o>=</span><span class=p>[],</span>
<a id=__codelineno-0-732 name=__codelineno-0-732></a> <span class=n>pos_or_keyword_args</span><span class=o>=</span><span class=p>[</span><span class=n>HTML_ATTRS_ATTRS_KEY</span><span class=p>,</span> <span class=n>HTML_ATTRS_DEFAULTS_KEY</span><span class=p>],</span>
<a id=__codelineno-0-733 name=__codelineno-0-733></a> <span class=n>optional_kwargs</span><span class=o>=</span><span class=p>[</span><span class=n>HTML_ATTRS_ATTRS_KEY</span><span class=p>,</span> <span class=n>HTML_ATTRS_DEFAULTS_KEY</span><span class=p>],</span>
<a id=__codelineno-0-734 name=__codelineno-0-734></a> <span class=n>keywordonly_args</span><span class=o>=</span><span class=kc>True</span><span class=p>,</span>
<a id=__codelineno-0-735 name=__codelineno-0-735></a> <span class=n>repeatable_kwargs</span><span class=o>=</span><span class=kc>True</span><span class=p>,</span>
<a id=__codelineno-0-736 name=__codelineno-0-736></a> <span class=n>flags</span><span class=o>=</span><span class=p>[],</span>
<a id=__codelineno-0-737 name=__codelineno-0-737></a> <span class=p>)</span>
<a id=__codelineno-0-738 name=__codelineno-0-738></a><span class=p>)</span>
<a id=__codelineno-0-739 name=__codelineno-0-739></a><span class=k>def</span> <span class=nf>html_attrs</span><span class=p>(</span><span class=n>parser</span><span class=p>:</span> <span class=n>Parser</span><span class=p>,</span> <span class=n>token</span><span class=p>:</span> <span class=n>Token</span><span class=p>,</span> <span class=n>tag_spec</span><span class=p>:</span> <span class=n>TagSpec</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n>HtmlAttrsNode</span><span class=p>:</span>
<a id=__codelineno-0-740 name=__codelineno-0-740></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-741 name=__codelineno-0-741></a><span class=sd> Generate HTML attributes (`key=&quot;value&quot;`), combining data from multiple sources,</span>
<a id=__codelineno-0-742 name=__codelineno-0-742></a><span class=sd> whether its template variables or static text.</span>
<a id=__codelineno-0-743 name=__codelineno-0-743></a>
<a id=__codelineno-0-744 name=__codelineno-0-744></a><span class=sd> It is designed to easily merge HTML attributes passed from outside with the internal.</span>
<a id=__codelineno-0-745 name=__codelineno-0-745></a><span class=sd> See how to in [Passing HTML attributes to components](../../guides/howto/passing_html_attrs/).</span>
<a id=__codelineno-0-746 name=__codelineno-0-746></a>
<a id=__codelineno-0-747 name=__codelineno-0-747></a><span class=sd> **Args:**</span>
<a id=__codelineno-0-748 name=__codelineno-0-748></a>
<a id=__codelineno-0-749 name=__codelineno-0-749></a><span class=sd> - `attrs` (dict, optional): Optional dictionary that holds HTML attributes. On conflict, overrides</span>
<a id=__codelineno-0-750 name=__codelineno-0-750></a><span class=sd> values in the `default` dictionary.</span>
<a id=__codelineno-0-751 name=__codelineno-0-751></a><span class=sd> - `default` (str, optional): Optional dictionary that holds HTML attributes. On conflict, is overriden</span>
<a id=__codelineno-0-752 name=__codelineno-0-752></a><span class=sd> with values in the `attrs` dictionary.</span>
<a id=__codelineno-0-753 name=__codelineno-0-753></a><span class=sd> - Any extra kwargs will be appended to the corresponding keys</span>
<a id=__codelineno-0-754 name=__codelineno-0-754></a>
<a id=__codelineno-0-755 name=__codelineno-0-755></a><span class=sd> The attributes in `attrs` and `defaults` are merged and resulting dict is rendered as HTML attributes</span>
<a id=__codelineno-0-756 name=__codelineno-0-756></a><span class=sd> (`key=&quot;value&quot;`).</span>
<a id=__codelineno-0-757 name=__codelineno-0-757></a>
<a id=__codelineno-0-758 name=__codelineno-0-758></a><span class=sd> Extra kwargs (`key=value`) are concatenated to existing keys. So if we have</span>
<a id=__codelineno-0-759 name=__codelineno-0-759></a>
<a id=__codelineno-0-760 name=__codelineno-0-760></a><span class=sd> ```python</span>
<a id=__codelineno-0-761 name=__codelineno-0-761></a><span class=sd> attrs = {&quot;class&quot;: &quot;my-class&quot;}</span>
<a id=__codelineno-0-762 name=__codelineno-0-762></a><span class=sd> ```</span>
<a id=__codelineno-0-763 name=__codelineno-0-763></a>
<a id=__codelineno-0-764 name=__codelineno-0-764></a><span class=sd> Then</span>
<a id=__codelineno-0-765 name=__codelineno-0-765></a>
<a id=__codelineno-0-766 name=__codelineno-0-766></a><span class=sd> ```django</span>
<a id=__codelineno-0-767 name=__codelineno-0-767></a><span class=sd> {% html_attrs attrs class=&quot;extra-class&quot; %}</span>
<a id=__codelineno-0-768 name=__codelineno-0-768></a><span class=sd> ```</span>
<a id=__codelineno-0-769 name=__codelineno-0-769></a>
<a id=__codelineno-0-770 name=__codelineno-0-770></a><span class=sd> will result in `class=&quot;my-class extra-class&quot;`.</span>
<a id=__codelineno-0-771 name=__codelineno-0-771></a>
<a id=__codelineno-0-772 name=__codelineno-0-772></a><span class=sd> **Example:**</span>
<a id=__codelineno-0-773 name=__codelineno-0-773></a><span class=sd> ```django</span>
<a id=__codelineno-0-774 name=__codelineno-0-774></a><span class=sd> &lt;div {% html_attrs</span>
<a id=__codelineno-0-775 name=__codelineno-0-775></a><span class=sd> attrs</span>
<a id=__codelineno-0-776 name=__codelineno-0-776></a><span class=sd> defaults:class=&quot;default-class&quot;</span>
<a id=__codelineno-0-777 name=__codelineno-0-777></a><span class=sd> class=&quot;extra-class&quot;</span>
<a id=__codelineno-0-778 name=__codelineno-0-778></a><span class=sd> data-id=&quot;123&quot;</span>
<a id=__codelineno-0-779 name=__codelineno-0-779></a><span class=sd> %}&gt;</span>
<a id=__codelineno-0-780 name=__codelineno-0-780></a><span class=sd> ```</span>
<a id=__codelineno-0-781 name=__codelineno-0-781></a>
<a id=__codelineno-0-782 name=__codelineno-0-782></a><span class=sd> renders</span>
<a id=__codelineno-0-783 name=__codelineno-0-783></a>
<a id=__codelineno-0-784 name=__codelineno-0-784></a><span class=sd> ```html</span>
<a id=__codelineno-0-785 name=__codelineno-0-785></a><span class=sd> &lt;div class=&quot;my-class extra-class&quot; data-id=&quot;123&quot;&gt;</span>
<a id=__codelineno-0-786 name=__codelineno-0-786></a><span class=sd> ```</span>
<a id=__codelineno-0-787 name=__codelineno-0-787></a>
<a id=__codelineno-0-788 name=__codelineno-0-788></a><span class=sd> **See more usage examples in</span>
<a id=__codelineno-0-789 name=__codelineno-0-789></a><span class=sd> [HTML attributes](../../concepts/fundamentals/html_attributes#examples-for-html_attrs).**</span>
<a id=__codelineno-0-790 name=__codelineno-0-790></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-791 name=__codelineno-0-791></a> <span class=n>tag</span> <span class=o>=</span> <span class=n>_parse_tag</span><span class=p>(</span><span class=n>parser</span><span class=p>,</span> <span class=n>token</span><span class=p>,</span> <span class=n>tag_spec</span><span class=p>)</span>
<a id=__codelineno-0-792 name=__codelineno-0-792></a>
<a id=__codelineno-0-793 name=__codelineno-0-793></a> <span class=k>return</span> <span class=n>HtmlAttrsNode</span><span class=p>(</span>
<a id=__codelineno-0-794 name=__codelineno-0-794></a> <span class=n>kwargs</span><span class=o>=</span><span class=n>tag</span><span class=o>.</span><span class=n>kwargs</span><span class=p>,</span>
<a id=__codelineno-0-795 name=__codelineno-0-795></a> <span class=n>kwarg_pairs</span><span class=o>=</span><span class=n>tag</span><span class=o>.</span><span class=n>kwarg_pairs</span><span class=p>,</span>
<a id=__codelineno-0-796 name=__codelineno-0-796></a> <span class=p>)</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h4 id=django_components.templatetags.component_tags.provide class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-function"></code> <span class="doc doc-object-name doc-function-name">provide</span> <a href=#django_components.templatetags.component_tags.provide class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>provide</span><span class=p>(</span><span class=n>parser</span><span class=p>:</span> <span class=n><span title=django.template.base.Parser>Parser</span></span><span class=p>,</span> <span class=n>token</span><span class=p>:</span> <span class=n><span title=django.template.base.Token>Token</span></span><span class=p>,</span> <span class=n>tag_spec</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-internal" title=django_components.templatetags.component_tags.TagSpec href=#django_components.templatetags.component_tags.TagSpec>TagSpec</a></span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-internal" title=django_components.provide.ProvideNode href=#django_components.provide.ProvideNode>ProvideNode</a></span>
</code></pre></div> <div class="doc doc-contents "> <p>The "provider" part of the <a href=../../concepts/advanced/provide_inject>provide / inject feature</a>. Pass kwargs to this tag to define the provider's data. Any components defined within the <code>{% provide %}..{% endprovide %}</code> tags will be able to access this data with <a href=../api#django_components.Component.inject><code>Component.inject()</code></a>.</p> <p>This is similar to React's <a href=https://react.dev/learn/passing-data-deeply-with-context><code>ContextProvider</code></a>, or Vue's <a href=https://vuejs.org/guide/components/provide-inject><code>provide()</code></a>.</p> <p><strong>Args:</strong></p> <ul> <li><code>name</code> (str, required): Provider name. This is the name you will then use in <a href=../api#django_components.Component.inject><code>Component.inject()</code></a>.</li> <li><code>**kwargs</code>: Any extra kwargs will be passed as the provided data.</li> </ul> <p><strong>Example:</strong></p> <p>Provide the "user_data" in parent component:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nd>@register</span><span class=p>(</span><span class=s2>&quot;parent&quot;</span><span class=p>)</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a><span class=k>class</span> <span class=nc>Parent</span><span class=p>(</span><span class=n>Component</span><span class=p>):</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a> <span class=n>template</span> <span class=o>=</span> <span class=s2>&quot;&quot;&quot;</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a><span class=s2> &lt;div&gt;</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a><span class=s2> {% provide &quot;user_data&quot; user=user %}</span>
<a id=__codelineno-0-6 name=__codelineno-0-6 href=#__codelineno-0-6></a><span class=s2> {</span><span class=si>% c</span><span class=s2>omponent &quot;child&quot; / %}</span>
<a id=__codelineno-0-7 name=__codelineno-0-7 href=#__codelineno-0-7></a><span class=s2> {</span><span class=si>% e</span><span class=s2>ndprovide %}</span>
<a id=__codelineno-0-8 name=__codelineno-0-8 href=#__codelineno-0-8></a><span class=s2> &lt;/div&gt;</span>
<a id=__codelineno-0-9 name=__codelineno-0-9 href=#__codelineno-0-9></a><span class=s2> &quot;&quot;&quot;</span>
<a id=__codelineno-0-10 name=__codelineno-0-10 href=#__codelineno-0-10></a>
<a id=__codelineno-0-11 name=__codelineno-0-11 href=#__codelineno-0-11></a> <span class=k>def</span> <span class=nf>get_context_data</span><span class=p>(</span><span class=bp>self</span><span class=p>,</span> <span class=n>user</span><span class=p>:</span> <span class=n>User</span><span class=p>):</span>
<a id=__codelineno-0-12 name=__codelineno-0-12 href=#__codelineno-0-12></a> <span class=k>return</span> <span class=p>{</span>
<a id=__codelineno-0-13 name=__codelineno-0-13 href=#__codelineno-0-13></a> <span class=s2>&quot;user&quot;</span><span class=p>:</span> <span class=n>user</span><span class=p>,</span>
<a id=__codelineno-0-14 name=__codelineno-0-14 href=#__codelineno-0-14></a> <span class=p>}</span>
</code></pre></div> <p>Since the "child" component is used within the <code>{% provide %} / {% endprovide %}</code> tags, we can request the "user_data" using <code>Component.inject("user_data")</code>:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-1-1 name=__codelineno-1-1 href=#__codelineno-1-1></a><span class=nd>@register</span><span class=p>(</span><span class=s2>&quot;child&quot;</span><span class=p>)</span>
<a id=__codelineno-1-2 name=__codelineno-1-2 href=#__codelineno-1-2></a><span class=k>class</span> <span class=nc>Child</span><span class=p>(</span><span class=n>Component</span><span class=p>):</span>
<a id=__codelineno-1-3 name=__codelineno-1-3 href=#__codelineno-1-3></a> <span class=n>template</span> <span class=o>=</span> <span class=s2>&quot;&quot;&quot;</span>
<a id=__codelineno-1-4 name=__codelineno-1-4 href=#__codelineno-1-4></a><span class=s2> &lt;div&gt;</span>
<a id=__codelineno-1-5 name=__codelineno-1-5 href=#__codelineno-1-5></a><span class=s2> User is: {{ user }}</span>
<a id=__codelineno-1-6 name=__codelineno-1-6 href=#__codelineno-1-6></a><span class=s2> &lt;/div&gt;</span>
<a id=__codelineno-1-7 name=__codelineno-1-7 href=#__codelineno-1-7></a><span class=s2> &quot;&quot;&quot;</span>
<a id=__codelineno-1-8 name=__codelineno-1-8 href=#__codelineno-1-8></a>
<a id=__codelineno-1-9 name=__codelineno-1-9 href=#__codelineno-1-9></a> <span class=k>def</span> <span class=nf>get_context_data</span><span class=p>(</span><span class=bp>self</span><span class=p>):</span>
<a id=__codelineno-1-10 name=__codelineno-1-10 href=#__codelineno-1-10></a> <span class=n>user</span> <span class=o>=</span> <span class=bp>self</span><span class=o>.</span><span class=n>inject</span><span class=p>(</span><span class=s2>&quot;user_data&quot;</span><span class=p>)</span><span class=o>.</span><span class=n>user</span>
<a id=__codelineno-1-11 name=__codelineno-1-11 href=#__codelineno-1-11></a> <span class=k>return</span> <span class=p>{</span>
<a id=__codelineno-1-12 name=__codelineno-1-12 href=#__codelineno-1-12></a> <span class=s2>&quot;user&quot;</span><span class=p>:</span> <span class=n>user</span><span class=p>,</span>
<a id=__codelineno-1-13 name=__codelineno-1-13 href=#__codelineno-1-13></a> <span class=p>}</span>
</code></pre></div> <p>Notice that the keys defined on the <code>{% provide %}</code> tag are then accessed as attributes when accessing them with <a href=../api#django_components.Component.inject><code>Component.inject()</code></a>.</p> <p>✅ Do this <div class=highlight><pre><span></span><code><a id=__codelineno-2-1 name=__codelineno-2-1 href=#__codelineno-2-1></a><span class=n>user</span> <span class=o>=</span> <span class=bp>self</span><span class=o>.</span><span class=n>inject</span><span class=p>(</span><span class=s2>&quot;user_data&quot;</span><span class=p>)</span><span class=o>.</span><span class=n>user</span>
</code></pre></div></p> <p>❌ Don't do this <div class=highlight><pre><span></span><code><a id=__codelineno-3-1 name=__codelineno-3-1 href=#__codelineno-3-1></a><span class=n>user</span> <span class=o>=</span> <span class=bp>self</span><span class=o>.</span><span class=n>inject</span><span class=p>(</span><span class=s2>&quot;user_data&quot;</span><span class=p>)[</span><span class=s2>&quot;user&quot;</span><span class=p>]</span>
</code></pre></div></p> <details class=quote> <summary>Source code in <code>src/django_components/templatetags/component_tags.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-625>625</a></span>
<span class=normal><a href=#__codelineno-0-626>626</a></span>
<span class=normal><a href=#__codelineno-0-627>627</a></span>
<span class=normal><a href=#__codelineno-0-628>628</a></span>
<span class=normal><a href=#__codelineno-0-629>629</a></span>
<span class=normal><a href=#__codelineno-0-630>630</a></span>
<span class=normal><a href=#__codelineno-0-631>631</a></span>
<span class=normal><a href=#__codelineno-0-632>632</a></span>
<span class=normal><a href=#__codelineno-0-633>633</a></span>
<span class=normal><a href=#__codelineno-0-634>634</a></span>
<span class=normal><a href=#__codelineno-0-635>635</a></span>
<span class=normal><a href=#__codelineno-0-636>636</a></span>
<span class=normal><a href=#__codelineno-0-637>637</a></span>
<span class=normal><a href=#__codelineno-0-638>638</a></span>
<span class=normal><a href=#__codelineno-0-639>639</a></span>
<span class=normal><a href=#__codelineno-0-640>640</a></span>
<span class=normal><a href=#__codelineno-0-641>641</a></span>
<span class=normal><a href=#__codelineno-0-642>642</a></span>
<span class=normal><a href=#__codelineno-0-643>643</a></span>
<span class=normal><a href=#__codelineno-0-644>644</a></span>
<span class=normal><a href=#__codelineno-0-645>645</a></span>
<span class=normal><a href=#__codelineno-0-646>646</a></span>
<span class=normal><a href=#__codelineno-0-647>647</a></span>
<span class=normal><a href=#__codelineno-0-648>648</a></span>
<span class=normal><a href=#__codelineno-0-649>649</a></span>
<span class=normal><a href=#__codelineno-0-650>650</a></span>
<span class=normal><a href=#__codelineno-0-651>651</a></span>
<span class=normal><a href=#__codelineno-0-652>652</a></span>
<span class=normal><a href=#__codelineno-0-653>653</a></span>
<span class=normal><a href=#__codelineno-0-654>654</a></span>
<span class=normal><a href=#__codelineno-0-655>655</a></span>
<span class=normal><a href=#__codelineno-0-656>656</a></span>
<span class=normal><a href=#__codelineno-0-657>657</a></span>
<span class=normal><a href=#__codelineno-0-658>658</a></span>
<span class=normal><a href=#__codelineno-0-659>659</a></span>
<span class=normal><a href=#__codelineno-0-660>660</a></span>
<span class=normal><a href=#__codelineno-0-661>661</a></span>
<span class=normal><a href=#__codelineno-0-662>662</a></span>
<span class=normal><a href=#__codelineno-0-663>663</a></span>
<span class=normal><a href=#__codelineno-0-664>664</a></span>
<span class=normal><a href=#__codelineno-0-665>665</a></span>
<span class=normal><a href=#__codelineno-0-666>666</a></span>
<span class=normal><a href=#__codelineno-0-667>667</a></span>
<span class=normal><a href=#__codelineno-0-668>668</a></span>
<span class=normal><a href=#__codelineno-0-669>669</a></span>
<span class=normal><a href=#__codelineno-0-670>670</a></span>
<span class=normal><a href=#__codelineno-0-671>671</a></span>
<span class=normal><a href=#__codelineno-0-672>672</a></span>
<span class=normal><a href=#__codelineno-0-673>673</a></span>
<span class=normal><a href=#__codelineno-0-674>674</a></span>
<span class=normal><a href=#__codelineno-0-675>675</a></span>
<span class=normal><a href=#__codelineno-0-676>676</a></span>
<span class=normal><a href=#__codelineno-0-677>677</a></span>
<span class=normal><a href=#__codelineno-0-678>678</a></span>
<span class=normal><a href=#__codelineno-0-679>679</a></span>
<span class=normal><a href=#__codelineno-0-680>680</a></span>
<span class=normal><a href=#__codelineno-0-681>681</a></span>
<span class=normal><a href=#__codelineno-0-682>682</a></span>
<span class=normal><a href=#__codelineno-0-683>683</a></span>
<span class=normal><a href=#__codelineno-0-684>684</a></span>
<span class=normal><a href=#__codelineno-0-685>685</a></span>
<span class=normal><a href=#__codelineno-0-686>686</a></span>
<span class=normal><a href=#__codelineno-0-687>687</a></span>
<span class=normal><a href=#__codelineno-0-688>688</a></span>
<span class=normal><a href=#__codelineno-0-689>689</a></span>
<span class=normal><a href=#__codelineno-0-690>690</a></span>
<span class=normal><a href=#__codelineno-0-691>691</a></span>
<span class=normal><a href=#__codelineno-0-692>692</a></span>
<span class=normal><a href=#__codelineno-0-693>693</a></span>
<span class=normal><a href=#__codelineno-0-694>694</a></span>
<span class=normal><a href=#__codelineno-0-695>695</a></span>
<span class=normal><a href=#__codelineno-0-696>696</a></span>
<span class=normal><a href=#__codelineno-0-697>697</a></span>
<span class=normal><a href=#__codelineno-0-698>698</a></span>
<span class=normal><a href=#__codelineno-0-699>699</a></span>
<span class=normal><a href=#__codelineno-0-700>700</a></span>
<span class=normal><a href=#__codelineno-0-701>701</a></span>
<span class=normal><a href=#__codelineno-0-702>702</a></span>
<span class=normal><a href=#__codelineno-0-703>703</a></span>
<span class=normal><a href=#__codelineno-0-704>704</a></span>
<span class=normal><a href=#__codelineno-0-705>705</a></span>
<span class=normal><a href=#__codelineno-0-706>706</a></span>
<span class=normal><a href=#__codelineno-0-707>707</a></span>
<span class=normal><a href=#__codelineno-0-708>708</a></span>
<span class=normal><a href=#__codelineno-0-709>709</a></span>
<span class=normal><a href=#__codelineno-0-710>710</a></span>
<span class=normal><a href=#__codelineno-0-711>711</a></span>
<span class=normal><a href=#__codelineno-0-712>712</a></span>
<span class=normal><a href=#__codelineno-0-713>713</a></span>
<span class=normal><a href=#__codelineno-0-714>714</a></span>
<span class=normal><a href=#__codelineno-0-715>715</a></span>
<span class=normal><a href=#__codelineno-0-716>716</a></span>
<span class=normal><a href=#__codelineno-0-717>717</a></span>
<span class=normal><a href=#__codelineno-0-718>718</a></span>
<span class=normal><a href=#__codelineno-0-719>719</a></span>
<span class=normal><a href=#__codelineno-0-720>720</a></span>
<span class=normal><a href=#__codelineno-0-721>721</a></span>
<span class=normal><a href=#__codelineno-0-722>722</a></span>
<span class=normal><a href=#__codelineno-0-723>723</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-625 name=__codelineno-0-625></a><span class=nd>@register</span><span class=o>.</span><span class=n>tag</span><span class=p>(</span><span class=s2>&quot;provide&quot;</span><span class=p>)</span>
<a id=__codelineno-0-626 name=__codelineno-0-626></a><span class=nd>@with_tag_spec</span><span class=p>(</span>
<a id=__codelineno-0-627 name=__codelineno-0-627></a> <span class=n>TagSpec</span><span class=p>(</span>
<a id=__codelineno-0-628 name=__codelineno-0-628></a> <span class=n>tag</span><span class=o>=</span><span class=s2>&quot;provide&quot;</span><span class=p>,</span>
<a id=__codelineno-0-629 name=__codelineno-0-629></a> <span class=n>end_tag</span><span class=o>=</span><span class=s2>&quot;endprovide&quot;</span><span class=p>,</span>
<a id=__codelineno-0-630 name=__codelineno-0-630></a> <span class=n>positional_only_args</span><span class=o>=</span><span class=p>[],</span>
<a id=__codelineno-0-631 name=__codelineno-0-631></a> <span class=n>pos_or_keyword_args</span><span class=o>=</span><span class=p>[</span><span class=n>PROVIDE_NAME_KWARG</span><span class=p>],</span>
<a id=__codelineno-0-632 name=__codelineno-0-632></a> <span class=n>keywordonly_args</span><span class=o>=</span><span class=kc>True</span><span class=p>,</span>
<a id=__codelineno-0-633 name=__codelineno-0-633></a> <span class=n>repeatable_kwargs</span><span class=o>=</span><span class=kc>False</span><span class=p>,</span>
<a id=__codelineno-0-634 name=__codelineno-0-634></a> <span class=n>flags</span><span class=o>=</span><span class=p>[],</span>
<a id=__codelineno-0-635 name=__codelineno-0-635></a> <span class=p>)</span>
<a id=__codelineno-0-636 name=__codelineno-0-636></a><span class=p>)</span>
<a id=__codelineno-0-637 name=__codelineno-0-637></a><span class=k>def</span> <span class=nf>provide</span><span class=p>(</span><span class=n>parser</span><span class=p>:</span> <span class=n>Parser</span><span class=p>,</span> <span class=n>token</span><span class=p>:</span> <span class=n>Token</span><span class=p>,</span> <span class=n>tag_spec</span><span class=p>:</span> <span class=n>TagSpec</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n>ProvideNode</span><span class=p>:</span>
<a id=__codelineno-0-638 name=__codelineno-0-638></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-639 name=__codelineno-0-639></a><span class=sd> The &quot;provider&quot; part of the [provide / inject feature](../../concepts/advanced/provide_inject).</span>
<a id=__codelineno-0-640 name=__codelineno-0-640></a><span class=sd> Pass kwargs to this tag to define the provider&#39;s data.</span>
<a id=__codelineno-0-641 name=__codelineno-0-641></a><span class=sd> Any components defined within the `{% provide %}..{% endprovide %}` tags will be able to access this data</span>
<a id=__codelineno-0-642 name=__codelineno-0-642></a><span class=sd> with [`Component.inject()`](../api#django_components.Component.inject).</span>
<a id=__codelineno-0-643 name=__codelineno-0-643></a>
<a id=__codelineno-0-644 name=__codelineno-0-644></a><span class=sd> This is similar to React&#39;s [`ContextProvider`](https://react.dev/learn/passing-data-deeply-with-context),</span>
<a id=__codelineno-0-645 name=__codelineno-0-645></a><span class=sd> or Vue&#39;s [`provide()`](https://vuejs.org/guide/components/provide-inject).</span>
<a id=__codelineno-0-646 name=__codelineno-0-646></a>
<a id=__codelineno-0-647 name=__codelineno-0-647></a><span class=sd> **Args:**</span>
<a id=__codelineno-0-648 name=__codelineno-0-648></a>
<a id=__codelineno-0-649 name=__codelineno-0-649></a><span class=sd> - `name` (str, required): Provider name. This is the name you will then use in</span>
<a id=__codelineno-0-650 name=__codelineno-0-650></a><span class=sd> [`Component.inject()`](../api#django_components.Component.inject).</span>
<a id=__codelineno-0-651 name=__codelineno-0-651></a><span class=sd> - `**kwargs`: Any extra kwargs will be passed as the provided data.</span>
<a id=__codelineno-0-652 name=__codelineno-0-652></a>
<a id=__codelineno-0-653 name=__codelineno-0-653></a><span class=sd> **Example:**</span>
<a id=__codelineno-0-654 name=__codelineno-0-654></a>
<a id=__codelineno-0-655 name=__codelineno-0-655></a><span class=sd> Provide the &quot;user_data&quot; in parent component:</span>
<a id=__codelineno-0-656 name=__codelineno-0-656></a>
<a id=__codelineno-0-657 name=__codelineno-0-657></a><span class=sd> ```python</span>
<a id=__codelineno-0-658 name=__codelineno-0-658></a><span class=sd> @register(&quot;parent&quot;)</span>
<a id=__codelineno-0-659 name=__codelineno-0-659></a><span class=sd> class Parent(Component):</span>
<a id=__codelineno-0-660 name=__codelineno-0-660></a><span class=sd> template = \&quot;\&quot;\&quot;</span>
<a id=__codelineno-0-661 name=__codelineno-0-661></a><span class=sd> &lt;div&gt;</span>
<a id=__codelineno-0-662 name=__codelineno-0-662></a><span class=sd> {% provide &quot;user_data&quot; user=user %}</span>
<a id=__codelineno-0-663 name=__codelineno-0-663></a><span class=sd> {% component &quot;child&quot; / %}</span>
<a id=__codelineno-0-664 name=__codelineno-0-664></a><span class=sd> {% endprovide %}</span>
<a id=__codelineno-0-665 name=__codelineno-0-665></a><span class=sd> &lt;/div&gt;</span>
<a id=__codelineno-0-666 name=__codelineno-0-666></a><span class=sd> \&quot;\&quot;\&quot;</span>
<a id=__codelineno-0-667 name=__codelineno-0-667></a>
<a id=__codelineno-0-668 name=__codelineno-0-668></a><span class=sd> def get_context_data(self, user: User):</span>
<a id=__codelineno-0-669 name=__codelineno-0-669></a><span class=sd> return {</span>
<a id=__codelineno-0-670 name=__codelineno-0-670></a><span class=sd> &quot;user&quot;: user,</span>
<a id=__codelineno-0-671 name=__codelineno-0-671></a><span class=sd> }</span>
<a id=__codelineno-0-672 name=__codelineno-0-672></a><span class=sd> ```</span>
<a id=__codelineno-0-673 name=__codelineno-0-673></a>
<a id=__codelineno-0-674 name=__codelineno-0-674></a><span class=sd> Since the &quot;child&quot; component is used within the `{% provide %} / {% endprovide %}` tags,</span>
<a id=__codelineno-0-675 name=__codelineno-0-675></a><span class=sd> we can request the &quot;user_data&quot; using `Component.inject(&quot;user_data&quot;)`:</span>
<a id=__codelineno-0-676 name=__codelineno-0-676></a>
<a id=__codelineno-0-677 name=__codelineno-0-677></a><span class=sd> ```python</span>
<a id=__codelineno-0-678 name=__codelineno-0-678></a><span class=sd> @register(&quot;child&quot;)</span>
<a id=__codelineno-0-679 name=__codelineno-0-679></a><span class=sd> class Child(Component):</span>
<a id=__codelineno-0-680 name=__codelineno-0-680></a><span class=sd> template = \&quot;\&quot;\&quot;</span>
<a id=__codelineno-0-681 name=__codelineno-0-681></a><span class=sd> &lt;div&gt;</span>
<a id=__codelineno-0-682 name=__codelineno-0-682></a><span class=sd> User is: {{ user }}</span>
<a id=__codelineno-0-683 name=__codelineno-0-683></a><span class=sd> &lt;/div&gt;</span>
<a id=__codelineno-0-684 name=__codelineno-0-684></a><span class=sd> \&quot;\&quot;\&quot;</span>
<a id=__codelineno-0-685 name=__codelineno-0-685></a>
<a id=__codelineno-0-686 name=__codelineno-0-686></a><span class=sd> def get_context_data(self):</span>
<a id=__codelineno-0-687 name=__codelineno-0-687></a><span class=sd> user = self.inject(&quot;user_data&quot;).user</span>
<a id=__codelineno-0-688 name=__codelineno-0-688></a><span class=sd> return {</span>
<a id=__codelineno-0-689 name=__codelineno-0-689></a><span class=sd> &quot;user&quot;: user,</span>
<a id=__codelineno-0-690 name=__codelineno-0-690></a><span class=sd> }</span>
<a id=__codelineno-0-691 name=__codelineno-0-691></a><span class=sd> ```</span>
<a id=__codelineno-0-692 name=__codelineno-0-692></a>
<a id=__codelineno-0-693 name=__codelineno-0-693></a><span class=sd> Notice that the keys defined on the `{% provide %}` tag are then accessed as attributes</span>
<a id=__codelineno-0-694 name=__codelineno-0-694></a><span class=sd> when accessing them with [`Component.inject()`](../api#django_components.Component.inject).</span>
<a id=__codelineno-0-695 name=__codelineno-0-695></a>
<a id=__codelineno-0-696 name=__codelineno-0-696></a><span class=sd> ✅ Do this</span>
<a id=__codelineno-0-697 name=__codelineno-0-697></a><span class=sd> ```python</span>
<a id=__codelineno-0-698 name=__codelineno-0-698></a><span class=sd> user = self.inject(&quot;user_data&quot;).user</span>
<a id=__codelineno-0-699 name=__codelineno-0-699></a><span class=sd> ```</span>
<a id=__codelineno-0-700 name=__codelineno-0-700></a>
<a id=__codelineno-0-701 name=__codelineno-0-701></a><span class=sd> ❌ Don&#39;t do this</span>
<a id=__codelineno-0-702 name=__codelineno-0-702></a><span class=sd> ```python</span>
<a id=__codelineno-0-703 name=__codelineno-0-703></a><span class=sd> user = self.inject(&quot;user_data&quot;)[&quot;user&quot;]</span>
<a id=__codelineno-0-704 name=__codelineno-0-704></a><span class=sd> ```</span>
<a id=__codelineno-0-705 name=__codelineno-0-705></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-706 name=__codelineno-0-706></a> <span class=c1># e.g. {% provide &lt;name&gt; key=val key2=val2 %}</span>
<a id=__codelineno-0-707 name=__codelineno-0-707></a> <span class=n>tag</span> <span class=o>=</span> <span class=n>_parse_tag</span><span class=p>(</span><span class=n>parser</span><span class=p>,</span> <span class=n>token</span><span class=p>,</span> <span class=n>tag_spec</span><span class=p>)</span>
<a id=__codelineno-0-708 name=__codelineno-0-708></a>
<a id=__codelineno-0-709 name=__codelineno-0-709></a> <span class=n>name_kwarg</span> <span class=o>=</span> <span class=n>tag</span><span class=o>.</span><span class=n>kwargs</span><span class=o>.</span><span class=n>kwargs</span><span class=o>.</span><span class=n>get</span><span class=p>(</span><span class=n>PROVIDE_NAME_KWARG</span><span class=p>,</span> <span class=kc>None</span><span class=p>)</span>
<a id=__codelineno-0-710 name=__codelineno-0-710></a> <span class=n>trace_id</span> <span class=o>=</span> <span class=sa>f</span><span class=s2>&quot;provide-id-</span><span class=si>{</span><span class=n>tag</span><span class=o>.</span><span class=n>id</span><span class=si>}</span><span class=s2> (</span><span class=si>{</span><span class=n>name_kwarg</span><span class=si>}</span><span class=s2>)&quot;</span> <span class=k>if</span> <span class=n>name_kwarg</span> <span class=k>else</span> <span class=sa>f</span><span class=s2>&quot;fill-id-</span><span class=si>{</span><span class=n>tag</span><span class=o>.</span><span class=n>id</span><span class=si>}</span><span class=s2>&quot;</span>
<a id=__codelineno-0-711 name=__codelineno-0-711></a>
<a id=__codelineno-0-712 name=__codelineno-0-712></a> <span class=n>trace_msg</span><span class=p>(</span><span class=s2>&quot;PARSE&quot;</span><span class=p>,</span> <span class=s2>&quot;PROVIDE&quot;</span><span class=p>,</span> <span class=n>trace_id</span><span class=p>,</span> <span class=n>tag</span><span class=o>.</span><span class=n>id</span><span class=p>)</span>
<a id=__codelineno-0-713 name=__codelineno-0-713></a>
<a id=__codelineno-0-714 name=__codelineno-0-714></a> <span class=n>body</span> <span class=o>=</span> <span class=n>tag</span><span class=o>.</span><span class=n>parse_body</span><span class=p>()</span>
<a id=__codelineno-0-715 name=__codelineno-0-715></a> <span class=n>provide_node</span> <span class=o>=</span> <span class=n>ProvideNode</span><span class=p>(</span>
<a id=__codelineno-0-716 name=__codelineno-0-716></a> <span class=n>nodelist</span><span class=o>=</span><span class=n>body</span><span class=p>,</span>
<a id=__codelineno-0-717 name=__codelineno-0-717></a> <span class=n>node_id</span><span class=o>=</span><span class=n>tag</span><span class=o>.</span><span class=n>id</span><span class=p>,</span>
<a id=__codelineno-0-718 name=__codelineno-0-718></a> <span class=n>kwargs</span><span class=o>=</span><span class=n>tag</span><span class=o>.</span><span class=n>kwargs</span><span class=p>,</span>
<a id=__codelineno-0-719 name=__codelineno-0-719></a> <span class=n>trace_id</span><span class=o>=</span><span class=n>trace_id</span><span class=p>,</span>
<a id=__codelineno-0-720 name=__codelineno-0-720></a> <span class=p>)</span>
<a id=__codelineno-0-721 name=__codelineno-0-721></a>
<a id=__codelineno-0-722 name=__codelineno-0-722></a> <span class=n>trace_msg</span><span class=p>(</span><span class=s2>&quot;PARSE&quot;</span><span class=p>,</span> <span class=s2>&quot;PROVIDE&quot;</span><span class=p>,</span> <span class=n>trace_id</span><span class=p>,</span> <span class=n>tag</span><span class=o>.</span><span class=n>id</span><span class=p>,</span> <span class=s2>&quot;...Done!&quot;</span><span class=p>)</span>
<a id=__codelineno-0-723 name=__codelineno-0-723></a> <span class=k>return</span> <span class=n>provide_node</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h4 id=django_components.templatetags.component_tags.slot class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-function"></code> <span class="doc doc-object-name doc-function-name">slot</span> <a href=#django_components.templatetags.component_tags.slot class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>slot</span><span class=p>(</span><span class=n>parser</span><span class=p>:</span> <span class=n><span title=django.template.base.Parser>Parser</span></span><span class=p>,</span> <span class=n>token</span><span class=p>:</span> <span class=n><span title=django.template.base.Token>Token</span></span><span class=p>,</span> <span class=n>tag_spec</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-internal" title=django_components.templatetags.component_tags.TagSpec href=#django_components.templatetags.component_tags.TagSpec>TagSpec</a></span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-internal" title=django_components.slots.SlotNode href=#django_components.slots.SlotNode>SlotNode</a></span>
</code></pre></div> <div class="doc doc-contents "> <p>Slot tag marks a place inside a component where content can be inserted from outside.</p> <p><a href=../../concepts/fundamentals/slots>Learn more</a> about using slots.</p> <p>This is similar to slots as seen in <a href=https://developer.mozilla.org/en-US/docs/Web/HTML/Element/slot>Web components</a>, <a href=https://vuejs.org/guide/components/slots.html>Vue</a> or <a href=https://react.dev/learn/passing-props-to-a-component#passing-jsx-as-children>React's <code>children</code></a>.</p> <p><strong>Args:</strong></p> <ul> <li><code>name</code> (str, required): Registered name of the component to render</li> <li><code>default</code>: Optional flag. If there is a default slot, you can pass the component slot content without using the <a href=#django_components.templatetags.component_tags.slot--fill><code>{% fill %}</code></a> tag. See <a href=../../concepts/fundamentals/slots#default-slot>Default slot</a></li> <li><code>required</code>: Optional flag. Will raise an error if a slot is required but not given.</li> <li><code>**kwargs</code>: Any extra kwargs will be passed as the slot data.</li> </ul> <p><strong>Example:</strong></p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nd>@register</span><span class=p>(</span><span class=s2>&quot;child&quot;</span><span class=p>)</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a><span class=k>class</span> <span class=nc>Child</span><span class=p>(</span><span class=n>Component</span><span class=p>):</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a> <span class=n>template</span> <span class=o>=</span> <span class=s2>&quot;&quot;&quot;</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a><span class=s2> &lt;div&gt;</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a><span class=s2> {</span><span class=si>% s</span><span class=s2>lot &quot;content&quot; default %}</span>
<a id=__codelineno-0-6 name=__codelineno-0-6 href=#__codelineno-0-6></a><span class=s2> This is shown if not overriden!</span>
<a id=__codelineno-0-7 name=__codelineno-0-7 href=#__codelineno-0-7></a><span class=s2> {</span><span class=si>% e</span><span class=s2>ndslot %}</span>
<a id=__codelineno-0-8 name=__codelineno-0-8 href=#__codelineno-0-8></a><span class=s2> &lt;/div&gt;</span>
<a id=__codelineno-0-9 name=__codelineno-0-9 href=#__codelineno-0-9></a><span class=s2> &lt;aside&gt;</span>
<a id=__codelineno-0-10 name=__codelineno-0-10 href=#__codelineno-0-10></a><span class=s2> {</span><span class=si>% s</span><span class=s2>lot &quot;sidebar&quot; required / %}</span>
<a id=__codelineno-0-11 name=__codelineno-0-11 href=#__codelineno-0-11></a><span class=s2> &lt;/aside&gt;</span>
<a id=__codelineno-0-12 name=__codelineno-0-12 href=#__codelineno-0-12></a><span class=s2> &quot;&quot;&quot;</span>
</code></pre></div> <div class=highlight><pre><span></span><code><a id=__codelineno-1-1 name=__codelineno-1-1 href=#__codelineno-1-1></a><span class=nd>@register</span><span class=p>(</span><span class=s2>&quot;parent&quot;</span><span class=p>)</span>
<a id=__codelineno-1-2 name=__codelineno-1-2 href=#__codelineno-1-2></a><span class=k>class</span> <span class=nc>Parent</span><span class=p>(</span><span class=n>Component</span><span class=p>):</span>
<a id=__codelineno-1-3 name=__codelineno-1-3 href=#__codelineno-1-3></a> <span class=n>template</span> <span class=o>=</span> <span class=s2>&quot;&quot;&quot;</span>
<a id=__codelineno-1-4 name=__codelineno-1-4 href=#__codelineno-1-4></a><span class=s2> &lt;div&gt;</span>
<a id=__codelineno-1-5 name=__codelineno-1-5 href=#__codelineno-1-5></a><span class=s2> {</span><span class=si>% c</span><span class=s2>omponent &quot;child&quot; %}</span>
<a id=__codelineno-1-6 name=__codelineno-1-6 href=#__codelineno-1-6></a><span class=s2> {</span><span class=si>% f</span><span class=s2>ill &quot;content&quot; %}</span>
<a id=__codelineno-1-7 name=__codelineno-1-7 href=#__codelineno-1-7></a><span class=s2> 🗞️📰</span>
<a id=__codelineno-1-8 name=__codelineno-1-8 href=#__codelineno-1-8></a><span class=s2> {</span><span class=si>% e</span><span class=s2>ndfill %}</span>
<a id=__codelineno-1-9 name=__codelineno-1-9 href=#__codelineno-1-9></a>
<a id=__codelineno-1-10 name=__codelineno-1-10 href=#__codelineno-1-10></a><span class=s2> {</span><span class=si>% f</span><span class=s2>ill &quot;sidebar&quot; %}</span>
<a id=__codelineno-1-11 name=__codelineno-1-11 href=#__codelineno-1-11></a><span class=s2> 🍷🧉🍾</span>
<a id=__codelineno-1-12 name=__codelineno-1-12 href=#__codelineno-1-12></a><span class=s2> {</span><span class=si>% e</span><span class=s2>ndfill %}</span>
<a id=__codelineno-1-13 name=__codelineno-1-13 href=#__codelineno-1-13></a><span class=s2> {</span><span class=si>% e</span><span class=s2>ndcomponent %}</span>
<a id=__codelineno-1-14 name=__codelineno-1-14 href=#__codelineno-1-14></a><span class=s2> &lt;/div&gt;</span>
<a id=__codelineno-1-15 name=__codelineno-1-15 href=#__codelineno-1-15></a><span class=s2> &quot;&quot;&quot;</span>
</code></pre></div> <h6 id=django_components.templatetags.component_tags.slot--passing-data-to-slots>Passing data to slots<a class=headerlink href=#django_components.templatetags.component_tags.slot--passing-data-to-slots title="Permanent link">¤</a></h6> <p>Any extra kwargs will be considered as slot data, and will be accessible in the <a href=#django_components.templatetags.component_tags.slot--fill><code>{% fill %}</code></a> tag via fill's <code>data</code> kwarg:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-2-1 name=__codelineno-2-1 href=#__codelineno-2-1></a><span class=nd>@register</span><span class=p>(</span><span class=s2>&quot;child&quot;</span><span class=p>)</span>
<a id=__codelineno-2-2 name=__codelineno-2-2 href=#__codelineno-2-2></a><span class=k>class</span> <span class=nc>Child</span><span class=p>(</span><span class=n>Component</span><span class=p>):</span>
<a id=__codelineno-2-3 name=__codelineno-2-3 href=#__codelineno-2-3></a> <span class=n>template</span> <span class=o>=</span> <span class=s2>&quot;&quot;&quot;</span>
<a id=__codelineno-2-4 name=__codelineno-2-4 href=#__codelineno-2-4></a><span class=s2> &lt;div&gt;</span>
<a id=__codelineno-2-5 name=__codelineno-2-5 href=#__codelineno-2-5></a><span class=s2> {# Passing data to the slot #}</span>
<a id=__codelineno-2-6 name=__codelineno-2-6 href=#__codelineno-2-6></a><span class=s2> {</span><span class=si>% s</span><span class=s2>lot &quot;content&quot; user=user %}</span>
<a id=__codelineno-2-7 name=__codelineno-2-7 href=#__codelineno-2-7></a><span class=s2> This is shown if not overriden!</span>
<a id=__codelineno-2-8 name=__codelineno-2-8 href=#__codelineno-2-8></a><span class=s2> {</span><span class=si>% e</span><span class=s2>ndslot %}</span>
<a id=__codelineno-2-9 name=__codelineno-2-9 href=#__codelineno-2-9></a><span class=s2> &lt;/div&gt;</span>
<a id=__codelineno-2-10 name=__codelineno-2-10 href=#__codelineno-2-10></a><span class=s2> &quot;&quot;&quot;</span>
</code></pre></div> <div class=highlight><pre><span></span><code><a id=__codelineno-3-1 name=__codelineno-3-1 href=#__codelineno-3-1></a><span class=nd>@register</span><span class=p>(</span><span class=s2>&quot;parent&quot;</span><span class=p>)</span>
<a id=__codelineno-3-2 name=__codelineno-3-2 href=#__codelineno-3-2></a><span class=k>class</span> <span class=nc>Parent</span><span class=p>(</span><span class=n>Component</span><span class=p>):</span>
<a id=__codelineno-3-3 name=__codelineno-3-3 href=#__codelineno-3-3></a> <span class=n>template</span> <span class=o>=</span> <span class=s2>&quot;&quot;&quot;</span>
<a id=__codelineno-3-4 name=__codelineno-3-4 href=#__codelineno-3-4></a><span class=s2> {# Parent can access the slot data #}</span>
<a id=__codelineno-3-5 name=__codelineno-3-5 href=#__codelineno-3-5></a><span class=s2> {</span><span class=si>% c</span><span class=s2>omponent &quot;child&quot; %}</span>
<a id=__codelineno-3-6 name=__codelineno-3-6 href=#__codelineno-3-6></a><span class=s2> {</span><span class=si>% f</span><span class=s2>ill &quot;content&quot; data=&quot;data&quot; %}</span>
<a id=__codelineno-3-7 name=__codelineno-3-7 href=#__codelineno-3-7></a><span class=s2> &lt;div class=&quot;wrapper-class&quot;&gt;</span>
<a id=__codelineno-3-8 name=__codelineno-3-8 href=#__codelineno-3-8></a><span class=s2> {{ data.user }}</span>
<a id=__codelineno-3-9 name=__codelineno-3-9 href=#__codelineno-3-9></a><span class=s2> &lt;/div&gt;</span>
<a id=__codelineno-3-10 name=__codelineno-3-10 href=#__codelineno-3-10></a><span class=s2> {</span><span class=si>% e</span><span class=s2>ndfill %}</span>
<a id=__codelineno-3-11 name=__codelineno-3-11 href=#__codelineno-3-11></a><span class=s2> {</span><span class=si>% e</span><span class=s2>ndcomponent %}</span>
<a id=__codelineno-3-12 name=__codelineno-3-12 href=#__codelineno-3-12></a><span class=s2> &quot;&quot;&quot;</span>
</code></pre></div> <h6 id=django_components.templatetags.component_tags.slot--accessing-default-slot-content>Accessing default slot content<a class=headerlink href=#django_components.templatetags.component_tags.slot--accessing-default-slot-content title="Permanent link">¤</a></h6> <p>The content between the <code>{% slot %}..{% endslot %}</code> tags is the default content that will be rendered if no fill is given for the slot.</p> <p>This default content can then be accessed from within the <a href=#django_components.templatetags.component_tags.slot--fill><code>{% fill %}</code></a> tag using the fill's <code>default</code> kwarg. This is useful if you need to wrap / prepend / append the original slot's content.</p> <div class=highlight><pre><span></span><code><a id=__codelineno-4-1 name=__codelineno-4-1 href=#__codelineno-4-1></a><span class=nd>@register</span><span class=p>(</span><span class=s2>&quot;child&quot;</span><span class=p>)</span>
<a id=__codelineno-4-2 name=__codelineno-4-2 href=#__codelineno-4-2></a><span class=k>class</span> <span class=nc>Child</span><span class=p>(</span><span class=n>Component</span><span class=p>):</span>
<a id=__codelineno-4-3 name=__codelineno-4-3 href=#__codelineno-4-3></a> <span class=n>template</span> <span class=o>=</span> <span class=s2>&quot;&quot;&quot;</span>
<a id=__codelineno-4-4 name=__codelineno-4-4 href=#__codelineno-4-4></a><span class=s2> &lt;div&gt;</span>
<a id=__codelineno-4-5 name=__codelineno-4-5 href=#__codelineno-4-5></a><span class=s2> {</span><span class=si>% s</span><span class=s2>lot &quot;content&quot; %}</span>
<a id=__codelineno-4-6 name=__codelineno-4-6 href=#__codelineno-4-6></a><span class=s2> This is default content!</span>
<a id=__codelineno-4-7 name=__codelineno-4-7 href=#__codelineno-4-7></a><span class=s2> {</span><span class=si>% e</span><span class=s2>ndslot %}</span>
<a id=__codelineno-4-8 name=__codelineno-4-8 href=#__codelineno-4-8></a><span class=s2> &lt;/div&gt;</span>
<a id=__codelineno-4-9 name=__codelineno-4-9 href=#__codelineno-4-9></a><span class=s2> &quot;&quot;&quot;</span>
</code></pre></div> <div class=highlight><pre><span></span><code><a id=__codelineno-5-1 name=__codelineno-5-1 href=#__codelineno-5-1></a><span class=nd>@register</span><span class=p>(</span><span class=s2>&quot;parent&quot;</span><span class=p>)</span>
<a id=__codelineno-5-2 name=__codelineno-5-2 href=#__codelineno-5-2></a><span class=k>class</span> <span class=nc>Parent</span><span class=p>(</span><span class=n>Component</span><span class=p>):</span>
<a id=__codelineno-5-3 name=__codelineno-5-3 href=#__codelineno-5-3></a> <span class=n>template</span> <span class=o>=</span> <span class=s2>&quot;&quot;&quot;</span>
<a id=__codelineno-5-4 name=__codelineno-5-4 href=#__codelineno-5-4></a><span class=s2> {# Parent can access the slot&#39;s default content #}</span>
<a id=__codelineno-5-5 name=__codelineno-5-5 href=#__codelineno-5-5></a><span class=s2> {</span><span class=si>% c</span><span class=s2>omponent &quot;child&quot; %}</span>
<a id=__codelineno-5-6 name=__codelineno-5-6 href=#__codelineno-5-6></a><span class=s2> {</span><span class=si>% f</span><span class=s2>ill &quot;content&quot; default=&quot;default&quot; %}</span>
<a id=__codelineno-5-7 name=__codelineno-5-7 href=#__codelineno-5-7></a><span class=s2> {{ default }}</span>
<a id=__codelineno-5-8 name=__codelineno-5-8 href=#__codelineno-5-8></a><span class=s2> {</span><span class=si>% e</span><span class=s2>ndfill %}</span>
<a id=__codelineno-5-9 name=__codelineno-5-9 href=#__codelineno-5-9></a><span class=s2> {</span><span class=si>% e</span><span class=s2>ndcomponent %}</span>
<a id=__codelineno-5-10 name=__codelineno-5-10 href=#__codelineno-5-10></a><span class=s2> &quot;&quot;&quot;</span>
</code></pre></div> <details class=quote> <summary>Source code in <code>src/django_components/templatetags/component_tags.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-191>191</a></span>
<span class=normal><a href=#__codelineno-0-192>192</a></span>
<span class=normal><a href=#__codelineno-0-193>193</a></span>
<span class=normal><a href=#__codelineno-0-194>194</a></span>
<span class=normal><a href=#__codelineno-0-195>195</a></span>
<span class=normal><a href=#__codelineno-0-196>196</a></span>
<span class=normal><a href=#__codelineno-0-197>197</a></span>
<span class=normal><a href=#__codelineno-0-198>198</a></span>
<span class=normal><a href=#__codelineno-0-199>199</a></span>
<span class=normal><a href=#__codelineno-0-200>200</a></span>
<span class=normal><a href=#__codelineno-0-201>201</a></span>
<span class=normal><a href=#__codelineno-0-202>202</a></span>
<span class=normal><a href=#__codelineno-0-203>203</a></span>
<span class=normal><a href=#__codelineno-0-204>204</a></span>
<span class=normal><a href=#__codelineno-0-205>205</a></span>
<span class=normal><a href=#__codelineno-0-206>206</a></span>
<span class=normal><a href=#__codelineno-0-207>207</a></span>
<span class=normal><a href=#__codelineno-0-208>208</a></span>
<span class=normal><a href=#__codelineno-0-209>209</a></span>
<span class=normal><a href=#__codelineno-0-210>210</a></span>
<span class=normal><a href=#__codelineno-0-211>211</a></span>
<span class=normal><a href=#__codelineno-0-212>212</a></span>
<span class=normal><a href=#__codelineno-0-213>213</a></span>
<span class=normal><a href=#__codelineno-0-214>214</a></span>
<span class=normal><a href=#__codelineno-0-215>215</a></span>
<span class=normal><a href=#__codelineno-0-216>216</a></span>
<span class=normal><a href=#__codelineno-0-217>217</a></span>
<span class=normal><a href=#__codelineno-0-218>218</a></span>
<span class=normal><a href=#__codelineno-0-219>219</a></span>
<span class=normal><a href=#__codelineno-0-220>220</a></span>
<span class=normal><a href=#__codelineno-0-221>221</a></span>
<span class=normal><a href=#__codelineno-0-222>222</a></span>
<span class=normal><a href=#__codelineno-0-223>223</a></span>
<span class=normal><a href=#__codelineno-0-224>224</a></span>
<span class=normal><a href=#__codelineno-0-225>225</a></span>
<span class=normal><a href=#__codelineno-0-226>226</a></span>
<span class=normal><a href=#__codelineno-0-227>227</a></span>
<span class=normal><a href=#__codelineno-0-228>228</a></span>
<span class=normal><a href=#__codelineno-0-229>229</a></span>
<span class=normal><a href=#__codelineno-0-230>230</a></span>
<span class=normal><a href=#__codelineno-0-231>231</a></span>
<span class=normal><a href=#__codelineno-0-232>232</a></span>
<span class=normal><a href=#__codelineno-0-233>233</a></span>
<span class=normal><a href=#__codelineno-0-234>234</a></span>
<span class=normal><a href=#__codelineno-0-235>235</a></span>
<span class=normal><a href=#__codelineno-0-236>236</a></span>
<span class=normal><a href=#__codelineno-0-237>237</a></span>
<span class=normal><a href=#__codelineno-0-238>238</a></span>
<span class=normal><a href=#__codelineno-0-239>239</a></span>
<span class=normal><a href=#__codelineno-0-240>240</a></span>
<span class=normal><a href=#__codelineno-0-241>241</a></span>
<span class=normal><a href=#__codelineno-0-242>242</a></span>
<span class=normal><a href=#__codelineno-0-243>243</a></span>
<span class=normal><a href=#__codelineno-0-244>244</a></span>
<span class=normal><a href=#__codelineno-0-245>245</a></span>
<span class=normal><a href=#__codelineno-0-246>246</a></span>
<span class=normal><a href=#__codelineno-0-247>247</a></span>
<span class=normal><a href=#__codelineno-0-248>248</a></span>
<span class=normal><a href=#__codelineno-0-249>249</a></span>
<span class=normal><a href=#__codelineno-0-250>250</a></span>
<span class=normal><a href=#__codelineno-0-251>251</a></span>
<span class=normal><a href=#__codelineno-0-252>252</a></span>
<span class=normal><a href=#__codelineno-0-253>253</a></span>
<span class=normal><a href=#__codelineno-0-254>254</a></span>
<span class=normal><a href=#__codelineno-0-255>255</a></span>
<span class=normal><a href=#__codelineno-0-256>256</a></span>
<span class=normal><a href=#__codelineno-0-257>257</a></span>
<span class=normal><a href=#__codelineno-0-258>258</a></span>
<span class=normal><a href=#__codelineno-0-259>259</a></span>
<span class=normal><a href=#__codelineno-0-260>260</a></span>
<span class=normal><a href=#__codelineno-0-261>261</a></span>
<span class=normal><a href=#__codelineno-0-262>262</a></span>
<span class=normal><a href=#__codelineno-0-263>263</a></span>
<span class=normal><a href=#__codelineno-0-264>264</a></span>
<span class=normal><a href=#__codelineno-0-265>265</a></span>
<span class=normal><a href=#__codelineno-0-266>266</a></span>
<span class=normal><a href=#__codelineno-0-267>267</a></span>
<span class=normal><a href=#__codelineno-0-268>268</a></span>
<span class=normal><a href=#__codelineno-0-269>269</a></span>
<span class=normal><a href=#__codelineno-0-270>270</a></span>
<span class=normal><a href=#__codelineno-0-271>271</a></span>
<span class=normal><a href=#__codelineno-0-272>272</a></span>
<span class=normal><a href=#__codelineno-0-273>273</a></span>
<span class=normal><a href=#__codelineno-0-274>274</a></span>
<span class=normal><a href=#__codelineno-0-275>275</a></span>
<span class=normal><a href=#__codelineno-0-276>276</a></span>
<span class=normal><a href=#__codelineno-0-277>277</a></span>
<span class=normal><a href=#__codelineno-0-278>278</a></span>
<span class=normal><a href=#__codelineno-0-279>279</a></span>
<span class=normal><a href=#__codelineno-0-280>280</a></span>
<span class=normal><a href=#__codelineno-0-281>281</a></span>
<span class=normal><a href=#__codelineno-0-282>282</a></span>
<span class=normal><a href=#__codelineno-0-283>283</a></span>
<span class=normal><a href=#__codelineno-0-284>284</a></span>
<span class=normal><a href=#__codelineno-0-285>285</a></span>
<span class=normal><a href=#__codelineno-0-286>286</a></span>
<span class=normal><a href=#__codelineno-0-287>287</a></span>
<span class=normal><a href=#__codelineno-0-288>288</a></span>
<span class=normal><a href=#__codelineno-0-289>289</a></span>
<span class=normal><a href=#__codelineno-0-290>290</a></span>
<span class=normal><a href=#__codelineno-0-291>291</a></span>
<span class=normal><a href=#__codelineno-0-292>292</a></span>
<span class=normal><a href=#__codelineno-0-293>293</a></span>
<span class=normal><a href=#__codelineno-0-294>294</a></span>
<span class=normal><a href=#__codelineno-0-295>295</a></span>
<span class=normal><a href=#__codelineno-0-296>296</a></span>
<span class=normal><a href=#__codelineno-0-297>297</a></span>
<span class=normal><a href=#__codelineno-0-298>298</a></span>
<span class=normal><a href=#__codelineno-0-299>299</a></span>
<span class=normal><a href=#__codelineno-0-300>300</a></span>
<span class=normal><a href=#__codelineno-0-301>301</a></span>
<span class=normal><a href=#__codelineno-0-302>302</a></span>
<span class=normal><a href=#__codelineno-0-303>303</a></span>
<span class=normal><a href=#__codelineno-0-304>304</a></span>
<span class=normal><a href=#__codelineno-0-305>305</a></span>
<span class=normal><a href=#__codelineno-0-306>306</a></span>
<span class=normal><a href=#__codelineno-0-307>307</a></span>
<span class=normal><a href=#__codelineno-0-308>308</a></span>
<span class=normal><a href=#__codelineno-0-309>309</a></span>
<span class=normal><a href=#__codelineno-0-310>310</a></span>
<span class=normal><a href=#__codelineno-0-311>311</a></span>
<span class=normal><a href=#__codelineno-0-312>312</a></span>
<span class=normal><a href=#__codelineno-0-313>313</a></span>
<span class=normal><a href=#__codelineno-0-314>314</a></span>
<span class=normal><a href=#__codelineno-0-315>315</a></span>
<span class=normal><a href=#__codelineno-0-316>316</a></span>
<span class=normal><a href=#__codelineno-0-317>317</a></span>
<span class=normal><a href=#__codelineno-0-318>318</a></span>
<span class=normal><a href=#__codelineno-0-319>319</a></span>
<span class=normal><a href=#__codelineno-0-320>320</a></span>
<span class=normal><a href=#__codelineno-0-321>321</a></span>
<span class=normal><a href=#__codelineno-0-322>322</a></span>
<span class=normal><a href=#__codelineno-0-323>323</a></span>
<span class=normal><a href=#__codelineno-0-324>324</a></span>
<span class=normal><a href=#__codelineno-0-325>325</a></span>
<span class=normal><a href=#__codelineno-0-326>326</a></span>
<span class=normal><a href=#__codelineno-0-327>327</a></span>
<span class=normal><a href=#__codelineno-0-328>328</a></span>
<span class=normal><a href=#__codelineno-0-329>329</a></span>
<span class=normal><a href=#__codelineno-0-330>330</a></span>
<span class=normal><a href=#__codelineno-0-331>331</a></span>
<span class=normal><a href=#__codelineno-0-332>332</a></span>
<span class=normal><a href=#__codelineno-0-333>333</a></span>
<span class=normal><a href=#__codelineno-0-334>334</a></span>
<span class=normal><a href=#__codelineno-0-335>335</a></span>
<span class=normal><a href=#__codelineno-0-336>336</a></span>
<span class=normal><a href=#__codelineno-0-337>337</a></span>
<span class=normal><a href=#__codelineno-0-338>338</a></span>
<span class=normal><a href=#__codelineno-0-339>339</a></span>
<span class=normal><a href=#__codelineno-0-340>340</a></span>
<span class=normal><a href=#__codelineno-0-341>341</a></span>
<span class=normal><a href=#__codelineno-0-342>342</a></span>
<span class=normal><a href=#__codelineno-0-343>343</a></span>
<span class=normal><a href=#__codelineno-0-344>344</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-191 name=__codelineno-0-191></a><span class=nd>@register</span><span class=o>.</span><span class=n>tag</span><span class=p>(</span><span class=s2>&quot;slot&quot;</span><span class=p>)</span>
<a id=__codelineno-0-192 name=__codelineno-0-192></a><span class=nd>@with_tag_spec</span><span class=p>(</span>
<a id=__codelineno-0-193 name=__codelineno-0-193></a> <span class=n>TagSpec</span><span class=p>(</span>
<a id=__codelineno-0-194 name=__codelineno-0-194></a> <span class=n>tag</span><span class=o>=</span><span class=s2>&quot;slot&quot;</span><span class=p>,</span>
<a id=__codelineno-0-195 name=__codelineno-0-195></a> <span class=n>end_tag</span><span class=o>=</span><span class=s2>&quot;endslot&quot;</span><span class=p>,</span>
<a id=__codelineno-0-196 name=__codelineno-0-196></a> <span class=n>positional_only_args</span><span class=o>=</span><span class=p>[],</span>
<a id=__codelineno-0-197 name=__codelineno-0-197></a> <span class=n>pos_or_keyword_args</span><span class=o>=</span><span class=p>[</span><span class=n>SLOT_NAME_KWARG</span><span class=p>],</span>
<a id=__codelineno-0-198 name=__codelineno-0-198></a> <span class=n>keywordonly_args</span><span class=o>=</span><span class=kc>True</span><span class=p>,</span>
<a id=__codelineno-0-199 name=__codelineno-0-199></a> <span class=n>repeatable_kwargs</span><span class=o>=</span><span class=kc>False</span><span class=p>,</span>
<a id=__codelineno-0-200 name=__codelineno-0-200></a> <span class=n>flags</span><span class=o>=</span><span class=p>[</span><span class=n>SLOT_DEFAULT_KEYWORD</span><span class=p>,</span> <span class=n>SLOT_REQUIRED_KEYWORD</span><span class=p>],</span>
<a id=__codelineno-0-201 name=__codelineno-0-201></a> <span class=p>)</span>
<a id=__codelineno-0-202 name=__codelineno-0-202></a><span class=p>)</span>
<a id=__codelineno-0-203 name=__codelineno-0-203></a><span class=k>def</span> <span class=nf>slot</span><span class=p>(</span><span class=n>parser</span><span class=p>:</span> <span class=n>Parser</span><span class=p>,</span> <span class=n>token</span><span class=p>:</span> <span class=n>Token</span><span class=p>,</span> <span class=n>tag_spec</span><span class=p>:</span> <span class=n>TagSpec</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n>SlotNode</span><span class=p>:</span>
<a id=__codelineno-0-204 name=__codelineno-0-204></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-205 name=__codelineno-0-205></a><span class=sd> Slot tag marks a place inside a component where content can be inserted</span>
<a id=__codelineno-0-206 name=__codelineno-0-206></a><span class=sd> from outside.</span>
<a id=__codelineno-0-207 name=__codelineno-0-207></a>
<a id=__codelineno-0-208 name=__codelineno-0-208></a><span class=sd> [Learn more](../../concepts/fundamentals/slots) about using slots.</span>
<a id=__codelineno-0-209 name=__codelineno-0-209></a>
<a id=__codelineno-0-210 name=__codelineno-0-210></a><span class=sd> This is similar to slots as seen in</span>
<a id=__codelineno-0-211 name=__codelineno-0-211></a><span class=sd> [Web components](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/slot),</span>
<a id=__codelineno-0-212 name=__codelineno-0-212></a><span class=sd> [Vue](https://vuejs.org/guide/components/slots.html)</span>
<a id=__codelineno-0-213 name=__codelineno-0-213></a><span class=sd> or [React&#39;s `children`](https://react.dev/learn/passing-props-to-a-component#passing-jsx-as-children).</span>
<a id=__codelineno-0-214 name=__codelineno-0-214></a>
<a id=__codelineno-0-215 name=__codelineno-0-215></a><span class=sd> **Args:**</span>
<a id=__codelineno-0-216 name=__codelineno-0-216></a>
<a id=__codelineno-0-217 name=__codelineno-0-217></a><span class=sd> - `name` (str, required): Registered name of the component to render</span>
<a id=__codelineno-0-218 name=__codelineno-0-218></a><span class=sd> - `default`: Optional flag. If there is a default slot, you can pass the component slot content</span>
<a id=__codelineno-0-219 name=__codelineno-0-219></a><span class=sd> without using the [`{% fill %}`](#fill) tag. See</span>
<a id=__codelineno-0-220 name=__codelineno-0-220></a><span class=sd> [Default slot](../../concepts/fundamentals/slots#default-slot)</span>
<a id=__codelineno-0-221 name=__codelineno-0-221></a><span class=sd> - `required`: Optional flag. Will raise an error if a slot is required but not given.</span>
<a id=__codelineno-0-222 name=__codelineno-0-222></a><span class=sd> - `**kwargs`: Any extra kwargs will be passed as the slot data.</span>
<a id=__codelineno-0-223 name=__codelineno-0-223></a>
<a id=__codelineno-0-224 name=__codelineno-0-224></a><span class=sd> **Example:**</span>
<a id=__codelineno-0-225 name=__codelineno-0-225></a>
<a id=__codelineno-0-226 name=__codelineno-0-226></a><span class=sd> ```python</span>
<a id=__codelineno-0-227 name=__codelineno-0-227></a><span class=sd> @register(&quot;child&quot;)</span>
<a id=__codelineno-0-228 name=__codelineno-0-228></a><span class=sd> class Child(Component):</span>
<a id=__codelineno-0-229 name=__codelineno-0-229></a><span class=sd> template = \&quot;\&quot;\&quot;</span>
<a id=__codelineno-0-230 name=__codelineno-0-230></a><span class=sd> &lt;div&gt;</span>
<a id=__codelineno-0-231 name=__codelineno-0-231></a><span class=sd> {% slot &quot;content&quot; default %}</span>
<a id=__codelineno-0-232 name=__codelineno-0-232></a><span class=sd> This is shown if not overriden!</span>
<a id=__codelineno-0-233 name=__codelineno-0-233></a><span class=sd> {% endslot %}</span>
<a id=__codelineno-0-234 name=__codelineno-0-234></a><span class=sd> &lt;/div&gt;</span>
<a id=__codelineno-0-235 name=__codelineno-0-235></a><span class=sd> &lt;aside&gt;</span>
<a id=__codelineno-0-236 name=__codelineno-0-236></a><span class=sd> {% slot &quot;sidebar&quot; required / %}</span>
<a id=__codelineno-0-237 name=__codelineno-0-237></a><span class=sd> &lt;/aside&gt;</span>
<a id=__codelineno-0-238 name=__codelineno-0-238></a><span class=sd> \&quot;\&quot;\&quot;</span>
<a id=__codelineno-0-239 name=__codelineno-0-239></a><span class=sd> ```</span>
<a id=__codelineno-0-240 name=__codelineno-0-240></a>
<a id=__codelineno-0-241 name=__codelineno-0-241></a><span class=sd> ```python</span>
<a id=__codelineno-0-242 name=__codelineno-0-242></a><span class=sd> @register(&quot;parent&quot;)</span>
<a id=__codelineno-0-243 name=__codelineno-0-243></a><span class=sd> class Parent(Component):</span>
<a id=__codelineno-0-244 name=__codelineno-0-244></a><span class=sd> template = \&quot;\&quot;\&quot;</span>
<a id=__codelineno-0-245 name=__codelineno-0-245></a><span class=sd> &lt;div&gt;</span>
<a id=__codelineno-0-246 name=__codelineno-0-246></a><span class=sd> {% component &quot;child&quot; %}</span>
<a id=__codelineno-0-247 name=__codelineno-0-247></a><span class=sd> {% fill &quot;content&quot; %}</span>
<a id=__codelineno-0-248 name=__codelineno-0-248></a><span class=sd> 🗞️📰</span>
<a id=__codelineno-0-249 name=__codelineno-0-249></a><span class=sd> {% endfill %}</span>
<a id=__codelineno-0-250 name=__codelineno-0-250></a>
<a id=__codelineno-0-251 name=__codelineno-0-251></a><span class=sd> {% fill &quot;sidebar&quot; %}</span>
<a id=__codelineno-0-252 name=__codelineno-0-252></a><span class=sd> 🍷🧉🍾</span>
<a id=__codelineno-0-253 name=__codelineno-0-253></a><span class=sd> {% endfill %}</span>
<a id=__codelineno-0-254 name=__codelineno-0-254></a><span class=sd> {% endcomponent %}</span>
<a id=__codelineno-0-255 name=__codelineno-0-255></a><span class=sd> &lt;/div&gt;</span>
<a id=__codelineno-0-256 name=__codelineno-0-256></a><span class=sd> \&quot;\&quot;\&quot;</span>
<a id=__codelineno-0-257 name=__codelineno-0-257></a><span class=sd> ```</span>
<a id=__codelineno-0-258 name=__codelineno-0-258></a>
<a id=__codelineno-0-259 name=__codelineno-0-259></a><span class=sd> ### Passing data to slots</span>
<a id=__codelineno-0-260 name=__codelineno-0-260></a>
<a id=__codelineno-0-261 name=__codelineno-0-261></a><span class=sd> Any extra kwargs will be considered as slot data, and will be accessible in the [`{% fill %}`](#fill)</span>
<a id=__codelineno-0-262 name=__codelineno-0-262></a><span class=sd> tag via fill&#39;s `data` kwarg:</span>
<a id=__codelineno-0-263 name=__codelineno-0-263></a>
<a id=__codelineno-0-264 name=__codelineno-0-264></a><span class=sd> ```python</span>
<a id=__codelineno-0-265 name=__codelineno-0-265></a><span class=sd> @register(&quot;child&quot;)</span>
<a id=__codelineno-0-266 name=__codelineno-0-266></a><span class=sd> class Child(Component):</span>
<a id=__codelineno-0-267 name=__codelineno-0-267></a><span class=sd> template = \&quot;\&quot;\&quot;</span>
<a id=__codelineno-0-268 name=__codelineno-0-268></a><span class=sd> &lt;div&gt;</span>
<a id=__codelineno-0-269 name=__codelineno-0-269></a><span class=sd> {# Passing data to the slot #}</span>
<a id=__codelineno-0-270 name=__codelineno-0-270></a><span class=sd> {% slot &quot;content&quot; user=user %}</span>
<a id=__codelineno-0-271 name=__codelineno-0-271></a><span class=sd> This is shown if not overriden!</span>
<a id=__codelineno-0-272 name=__codelineno-0-272></a><span class=sd> {% endslot %}</span>
<a id=__codelineno-0-273 name=__codelineno-0-273></a><span class=sd> &lt;/div&gt;</span>
<a id=__codelineno-0-274 name=__codelineno-0-274></a><span class=sd> \&quot;\&quot;\&quot;</span>
<a id=__codelineno-0-275 name=__codelineno-0-275></a><span class=sd> ```</span>
<a id=__codelineno-0-276 name=__codelineno-0-276></a>
<a id=__codelineno-0-277 name=__codelineno-0-277></a><span class=sd> ```python</span>
<a id=__codelineno-0-278 name=__codelineno-0-278></a><span class=sd> @register(&quot;parent&quot;)</span>
<a id=__codelineno-0-279 name=__codelineno-0-279></a><span class=sd> class Parent(Component):</span>
<a id=__codelineno-0-280 name=__codelineno-0-280></a><span class=sd> template = \&quot;\&quot;\&quot;</span>
<a id=__codelineno-0-281 name=__codelineno-0-281></a><span class=sd> {# Parent can access the slot data #}</span>
<a id=__codelineno-0-282 name=__codelineno-0-282></a><span class=sd> {% component &quot;child&quot; %}</span>
<a id=__codelineno-0-283 name=__codelineno-0-283></a><span class=sd> {% fill &quot;content&quot; data=&quot;data&quot; %}</span>
<a id=__codelineno-0-284 name=__codelineno-0-284></a><span class=sd> &lt;div class=&quot;wrapper-class&quot;&gt;</span>
<a id=__codelineno-0-285 name=__codelineno-0-285></a><span class=sd> {{ data.user }}</span>
<a id=__codelineno-0-286 name=__codelineno-0-286></a><span class=sd> &lt;/div&gt;</span>
<a id=__codelineno-0-287 name=__codelineno-0-287></a><span class=sd> {% endfill %}</span>
<a id=__codelineno-0-288 name=__codelineno-0-288></a><span class=sd> {% endcomponent %}</span>
<a id=__codelineno-0-289 name=__codelineno-0-289></a><span class=sd> \&quot;\&quot;\&quot;</span>
<a id=__codelineno-0-290 name=__codelineno-0-290></a><span class=sd> ```</span>
<a id=__codelineno-0-291 name=__codelineno-0-291></a>
<a id=__codelineno-0-292 name=__codelineno-0-292></a><span class=sd> ### Accessing default slot content</span>
<a id=__codelineno-0-293 name=__codelineno-0-293></a>
<a id=__codelineno-0-294 name=__codelineno-0-294></a><span class=sd> The content between the `{% slot %}..{% endslot %}` tags is the default content that</span>
<a id=__codelineno-0-295 name=__codelineno-0-295></a><span class=sd> will be rendered if no fill is given for the slot.</span>
<a id=__codelineno-0-296 name=__codelineno-0-296></a>
<a id=__codelineno-0-297 name=__codelineno-0-297></a><span class=sd> This default content can then be accessed from within the [`{% fill %}`](#fill) tag using</span>
<a id=__codelineno-0-298 name=__codelineno-0-298></a><span class=sd> the fill&#39;s `default` kwarg.</span>
<a id=__codelineno-0-299 name=__codelineno-0-299></a><span class=sd> This is useful if you need to wrap / prepend / append the original slot&#39;s content.</span>
<a id=__codelineno-0-300 name=__codelineno-0-300></a>
<a id=__codelineno-0-301 name=__codelineno-0-301></a><span class=sd> ```python</span>
<a id=__codelineno-0-302 name=__codelineno-0-302></a><span class=sd> @register(&quot;child&quot;)</span>
<a id=__codelineno-0-303 name=__codelineno-0-303></a><span class=sd> class Child(Component):</span>
<a id=__codelineno-0-304 name=__codelineno-0-304></a><span class=sd> template = \&quot;\&quot;\&quot;</span>
<a id=__codelineno-0-305 name=__codelineno-0-305></a><span class=sd> &lt;div&gt;</span>
<a id=__codelineno-0-306 name=__codelineno-0-306></a><span class=sd> {% slot &quot;content&quot; %}</span>
<a id=__codelineno-0-307 name=__codelineno-0-307></a><span class=sd> This is default content!</span>
<a id=__codelineno-0-308 name=__codelineno-0-308></a><span class=sd> {% endslot %}</span>
<a id=__codelineno-0-309 name=__codelineno-0-309></a><span class=sd> &lt;/div&gt;</span>
<a id=__codelineno-0-310 name=__codelineno-0-310></a><span class=sd> \&quot;\&quot;\&quot;</span>
<a id=__codelineno-0-311 name=__codelineno-0-311></a><span class=sd> ```</span>
<a id=__codelineno-0-312 name=__codelineno-0-312></a>
<a id=__codelineno-0-313 name=__codelineno-0-313></a><span class=sd> ```python</span>
<a id=__codelineno-0-314 name=__codelineno-0-314></a><span class=sd> @register(&quot;parent&quot;)</span>
<a id=__codelineno-0-315 name=__codelineno-0-315></a><span class=sd> class Parent(Component):</span>
<a id=__codelineno-0-316 name=__codelineno-0-316></a><span class=sd> template = \&quot;\&quot;\&quot;</span>
<a id=__codelineno-0-317 name=__codelineno-0-317></a><span class=sd> {# Parent can access the slot&#39;s default content #}</span>
<a id=__codelineno-0-318 name=__codelineno-0-318></a><span class=sd> {% component &quot;child&quot; %}</span>
<a id=__codelineno-0-319 name=__codelineno-0-319></a><span class=sd> {% fill &quot;content&quot; default=&quot;default&quot; %}</span>
<a id=__codelineno-0-320 name=__codelineno-0-320></a><span class=sd> {{ default }}</span>
<a id=__codelineno-0-321 name=__codelineno-0-321></a><span class=sd> {% endfill %}</span>
<a id=__codelineno-0-322 name=__codelineno-0-322></a><span class=sd> {% endcomponent %}</span>
<a id=__codelineno-0-323 name=__codelineno-0-323></a><span class=sd> \&quot;\&quot;\&quot;</span>
<a id=__codelineno-0-324 name=__codelineno-0-324></a><span class=sd> ```</span>
<a id=__codelineno-0-325 name=__codelineno-0-325></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-326 name=__codelineno-0-326></a> <span class=n>tag</span> <span class=o>=</span> <span class=n>_parse_tag</span><span class=p>(</span><span class=n>parser</span><span class=p>,</span> <span class=n>token</span><span class=p>,</span> <span class=n>tag_spec</span><span class=p>)</span>
<a id=__codelineno-0-327 name=__codelineno-0-327></a>
<a id=__codelineno-0-328 name=__codelineno-0-328></a> <span class=n>slot_name_kwarg</span> <span class=o>=</span> <span class=n>tag</span><span class=o>.</span><span class=n>kwargs</span><span class=o>.</span><span class=n>kwargs</span><span class=o>.</span><span class=n>get</span><span class=p>(</span><span class=n>SLOT_NAME_KWARG</span><span class=p>,</span> <span class=kc>None</span><span class=p>)</span>
<a id=__codelineno-0-329 name=__codelineno-0-329></a> <span class=n>trace_id</span> <span class=o>=</span> <span class=sa>f</span><span class=s2>&quot;slot-id-</span><span class=si>{</span><span class=n>tag</span><span class=o>.</span><span class=n>id</span><span class=si>}</span><span class=s2> (</span><span class=si>{</span><span class=n>slot_name_kwarg</span><span class=si>}</span><span class=s2>)&quot;</span> <span class=k>if</span> <span class=n>slot_name_kwarg</span> <span class=k>else</span> <span class=sa>f</span><span class=s2>&quot;slot-id-</span><span class=si>{</span><span class=n>tag</span><span class=o>.</span><span class=n>id</span><span class=si>}</span><span class=s2>&quot;</span>
<a id=__codelineno-0-330 name=__codelineno-0-330></a>
<a id=__codelineno-0-331 name=__codelineno-0-331></a> <span class=n>trace_msg</span><span class=p>(</span><span class=s2>&quot;PARSE&quot;</span><span class=p>,</span> <span class=s2>&quot;SLOT&quot;</span><span class=p>,</span> <span class=n>trace_id</span><span class=p>,</span> <span class=n>tag</span><span class=o>.</span><span class=n>id</span><span class=p>)</span>
<a id=__codelineno-0-332 name=__codelineno-0-332></a>
<a id=__codelineno-0-333 name=__codelineno-0-333></a> <span class=n>body</span> <span class=o>=</span> <span class=n>tag</span><span class=o>.</span><span class=n>parse_body</span><span class=p>()</span>
<a id=__codelineno-0-334 name=__codelineno-0-334></a> <span class=n>slot_node</span> <span class=o>=</span> <span class=n>SlotNode</span><span class=p>(</span>
<a id=__codelineno-0-335 name=__codelineno-0-335></a> <span class=n>nodelist</span><span class=o>=</span><span class=n>body</span><span class=p>,</span>
<a id=__codelineno-0-336 name=__codelineno-0-336></a> <span class=n>node_id</span><span class=o>=</span><span class=n>tag</span><span class=o>.</span><span class=n>id</span><span class=p>,</span>
<a id=__codelineno-0-337 name=__codelineno-0-337></a> <span class=n>kwargs</span><span class=o>=</span><span class=n>tag</span><span class=o>.</span><span class=n>kwargs</span><span class=p>,</span>
<a id=__codelineno-0-338 name=__codelineno-0-338></a> <span class=n>is_required</span><span class=o>=</span><span class=n>tag</span><span class=o>.</span><span class=n>flags</span><span class=p>[</span><span class=n>SLOT_REQUIRED_KEYWORD</span><span class=p>],</span>
<a id=__codelineno-0-339 name=__codelineno-0-339></a> <span class=n>is_default</span><span class=o>=</span><span class=n>tag</span><span class=o>.</span><span class=n>flags</span><span class=p>[</span><span class=n>SLOT_DEFAULT_KEYWORD</span><span class=p>],</span>
<a id=__codelineno-0-340 name=__codelineno-0-340></a> <span class=n>trace_id</span><span class=o>=</span><span class=n>trace_id</span><span class=p>,</span>
<a id=__codelineno-0-341 name=__codelineno-0-341></a> <span class=p>)</span>
<a id=__codelineno-0-342 name=__codelineno-0-342></a>
<a id=__codelineno-0-343 name=__codelineno-0-343></a> <span class=n>trace_msg</span><span class=p>(</span><span class=s2>&quot;PARSE&quot;</span><span class=p>,</span> <span class=s2>&quot;SLOT&quot;</span><span class=p>,</span> <span class=n>trace_id</span><span class=p>,</span> <span class=n>tag</span><span class=o>.</span><span class=n>id</span><span class=p>,</span> <span class=s2>&quot;...Done!&quot;</span><span class=p>)</span>
<a id=__codelineno-0-344 name=__codelineno-0-344></a> <span class=k>return</span> <span class=n>slot_node</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h4 id=django_components.templatetags.component_tags.with_tag_spec class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-function"></code> <span class="doc doc-object-name doc-function-name">with_tag_spec</span> <a href=#django_components.templatetags.component_tags.with_tag_spec class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>with_tag_spec</span><span class=p>(</span><span class=n>tag_spec</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-internal" title=django_components.templatetags.component_tags.TagSpec href=#django_components.templatetags.component_tags.TagSpec>TagSpec</a></span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-external" title=typing.Callable href=https://docs.python.org/3.12/library/typing.html#typing.Callable>Callable</a></span>
</code></pre></div> <div class="doc doc-contents "> <details class=quote> <summary>Source code in <code>src/django_components/templatetags/component_tags.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-112>112</a></span>
<span class=normal><a href=#__codelineno-0-113>113</a></span>
<span class=normal><a href=#__codelineno-0-114>114</a></span>
<span class=normal><a href=#__codelineno-0-115>115</a></span>
<span class=normal><a href=#__codelineno-0-116>116</a></span>
<span class=normal><a href=#__codelineno-0-117>117</a></span>
<span class=normal><a href=#__codelineno-0-118>118</a></span>
<span class=normal><a href=#__codelineno-0-119>119</a></span>
<span class=normal><a href=#__codelineno-0-120>120</a></span>
<span class=normal><a href=#__codelineno-0-121>121</a></span>
<span class=normal><a href=#__codelineno-0-122>122</a></span>
<span class=normal><a href=#__codelineno-0-123>123</a></span>
<span class=normal><a href=#__codelineno-0-124>124</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-112 name=__codelineno-0-112></a><span class=k>def</span> <span class=nf>with_tag_spec</span><span class=p>(</span><span class=n>tag_spec</span><span class=p>:</span> <span class=n>TagSpec</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n>Callable</span><span class=p>:</span>
<a id=__codelineno-0-113 name=__codelineno-0-113></a><span class=w> </span><span class=sd>&quot;&quot;&quot;&quot;&quot;&quot;</span>
<a id=__codelineno-0-114 name=__codelineno-0-114></a>
<a id=__codelineno-0-115 name=__codelineno-0-115></a> <span class=k>def</span> <span class=nf>decorator</span><span class=p>(</span><span class=n>fn</span><span class=p>:</span> <span class=n>Callable</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n>Any</span><span class=p>:</span>
<a id=__codelineno-0-116 name=__codelineno-0-116></a> <span class=n>fn</span><span class=o>.</span><span class=n>_tag_spec</span> <span class=o>=</span> <span class=n>tag_spec</span> <span class=c1># type: ignore[attr-defined]</span>
<a id=__codelineno-0-117 name=__codelineno-0-117></a>
<a id=__codelineno-0-118 name=__codelineno-0-118></a> <span class=nd>@functools</span><span class=o>.</span><span class=n>wraps</span><span class=p>(</span><span class=n>fn</span><span class=p>)</span>
<a id=__codelineno-0-119 name=__codelineno-0-119></a> <span class=k>def</span> <span class=nf>wrapper</span><span class=p>(</span><span class=o>*</span><span class=n>args</span><span class=p>:</span> <span class=n>Any</span><span class=p>,</span> <span class=o>**</span><span class=n>kwargs</span><span class=p>:</span> <span class=n>Any</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n>Any</span><span class=p>:</span>
<a id=__codelineno-0-120 name=__codelineno-0-120></a> <span class=k>return</span> <span class=n>fn</span><span class=p>(</span><span class=o>*</span><span class=n>args</span><span class=p>,</span> <span class=o>**</span><span class=n>kwargs</span><span class=p>,</span> <span class=n>tag_spec</span><span class=o>=</span><span class=n>tag_spec</span><span class=p>)</span>
<a id=__codelineno-0-121 name=__codelineno-0-121></a>
<a id=__codelineno-0-122 name=__codelineno-0-122></a> <span class=k>return</span> <span class=n>wrapper</span>
<a id=__codelineno-0-123 name=__codelineno-0-123></a>
<a id=__codelineno-0-124 name=__codelineno-0-124></a> <span class=k>return</span> <span class=n>decorator</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> </div> </div> </div> </div> </div> </div> <div class="doc doc-object doc-module"> <h2 id=django_components.types class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-module"></code> <span class="doc doc-object-name doc-module-name">types</span> <a href=#django_components.types class=headerlink title="Permanent link">¤</a></h2> <div class="doc doc-contents "> <p>Helper types for IDEs.</p> <div class="doc doc-children"> </div> </div> </div> <div class="doc doc-object doc-module"> <h2 id=django_components.util class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-module"></code> <span class="doc doc-object-name doc-module-name">util</span> <a href=#django_components.util class=headerlink title="Permanent link">¤</a></h2> <div class="doc doc-contents "> <p><span class=doc-section-title>Modules:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.util.cache href=#django_components.util.cache>cache</a></code></b> <div class=doc-md-description> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.util.html href=#django_components.util.html>html</a></code></b> <div class=doc-md-description> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.util.loader href=#django_components.util.loader>loader</a></code></b> <div class=doc-md-description> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.util.logger href=#django_components.util.logger>logger</a></code></b> <div class=doc-md-description> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.util.misc href=#django_components.util.misc>misc</a></code></b> <div class=doc-md-description> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.util.tag_parser href=#django_components.util.tag_parser>tag_parser</a></code></b> <div class=doc-md-description> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.util.types href=#django_components.util.types>types</a></code></b> <div class=doc-md-description> </div> </li> </ul> <div class="doc doc-children"> <div class="doc doc-object doc-module"> <h3 id=django_components.util.cache class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-module"></code> <span class="doc doc-object-name doc-module-name">cache</span> <a href=#django_components.util.cache class=headerlink title="Permanent link">¤</a></h3> <div class="doc doc-contents "> <p><span class=doc-section-title>Functions:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.util.cache.lazy_cache href=#django_components.util.cache.lazy_cache>lazy_cache</a></code></b> <div class=doc-md-description> <p>Decorator that caches the given function similarly to <code>functools.lru_cache</code>.</p> </div> </li> </ul> <div class="doc doc-children"> <div class="doc doc-object doc-function"> <h4 id=django_components.util.cache.lazy_cache class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-function"></code> <span class="doc doc-object-name doc-function-name">lazy_cache</span> <a href=#django_components.util.cache.lazy_cache class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>lazy_cache</span><span class=p>(</span><span class=n>make_cache</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Callable href=https://docs.python.org/3.12/library/typing.html#typing.Callable>Callable</a></span><span class=p>[[],</span> <span class=n><a class="autorefs autorefs-external" title=typing.Callable href=https://docs.python.org/3.12/library/typing.html#typing.Callable>Callable</a></span><span class=p>[[</span><span class=n><a class="autorefs autorefs-external" title=typing.Callable href=https://docs.python.org/3.12/library/typing.html#typing.Callable>Callable</a></span><span class=p>],</span> <span class=n><a class="autorefs autorefs-external" title=typing.Callable href=https://docs.python.org/3.12/library/typing.html#typing.Callable>Callable</a></span><span class=p>]])</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-external" title=typing.Callable href=https://docs.python.org/3.12/library/typing.html#typing.Callable>Callable</a></span><span class=p>[[</span><span class=n><span title=django_components.util.cache.TFunc>TFunc</span></span><span class=p>],</span> <span class=n><span title=django_components.util.cache.TFunc>TFunc</span></span><span class=p>]</span>
</code></pre></div> <div class="doc doc-contents "> <p>Decorator that caches the given function similarly to <code>functools.lru_cache</code>. But the cache is instantiated only at first invocation.</p> <p><code>cache</code> argument is a function that generates the cache function, e.g. <code>functools.lru_cache()</code>.</p> <details class=quote> <summary>Source code in <code>src/django_components/util/cache.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-7> 7</a></span>
<span class=normal><a href=#__codelineno-0-8> 8</a></span>
<span class=normal><a href=#__codelineno-0-9> 9</a></span>
<span class=normal><a href=#__codelineno-0-10>10</a></span>
<span class=normal><a href=#__codelineno-0-11>11</a></span>
<span class=normal><a href=#__codelineno-0-12>12</a></span>
<span class=normal><a href=#__codelineno-0-13>13</a></span>
<span class=normal><a href=#__codelineno-0-14>14</a></span>
<span class=normal><a href=#__codelineno-0-15>15</a></span>
<span class=normal><a href=#__codelineno-0-16>16</a></span>
<span class=normal><a href=#__codelineno-0-17>17</a></span>
<span class=normal><a href=#__codelineno-0-18>18</a></span>
<span class=normal><a href=#__codelineno-0-19>19</a></span>
<span class=normal><a href=#__codelineno-0-20>20</a></span>
<span class=normal><a href=#__codelineno-0-21>21</a></span>
<span class=normal><a href=#__codelineno-0-22>22</a></span>
<span class=normal><a href=#__codelineno-0-23>23</a></span>
<span class=normal><a href=#__codelineno-0-24>24</a></span>
<span class=normal><a href=#__codelineno-0-25>25</a></span>
<span class=normal><a href=#__codelineno-0-26>26</a></span>
<span class=normal><a href=#__codelineno-0-27>27</a></span>
<span class=normal><a href=#__codelineno-0-28>28</a></span>
<span class=normal><a href=#__codelineno-0-29>29</a></span>
<span class=normal><a href=#__codelineno-0-30>30</a></span>
<span class=normal><a href=#__codelineno-0-31>31</a></span>
<span class=normal><a href=#__codelineno-0-32>32</a></span>
<span class=normal><a href=#__codelineno-0-33>33</a></span>
<span class=normal><a href=#__codelineno-0-34>34</a></span>
<span class=normal><a href=#__codelineno-0-35>35</a></span>
<span class=normal><a href=#__codelineno-0-36>36</a></span>
<span class=normal><a href=#__codelineno-0-37>37</a></span>
<span class=normal><a href=#__codelineno-0-38>38</a></span>
<span class=normal><a href=#__codelineno-0-39>39</a></span>
<span class=normal><a href=#__codelineno-0-40>40</a></span>
<span class=normal><a href=#__codelineno-0-41>41</a></span>
<span class=normal><a href=#__codelineno-0-42>42</a></span>
<span class=normal><a href=#__codelineno-0-43>43</a></span>
<span class=normal><a href=#__codelineno-0-44>44</a></span>
<span class=normal><a href=#__codelineno-0-45>45</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-7 name=__codelineno-0-7></a><span class=k>def</span> <span class=nf>lazy_cache</span><span class=p>(</span>
<a id=__codelineno-0-8 name=__codelineno-0-8></a> <span class=n>make_cache</span><span class=p>:</span> <span class=n>Callable</span><span class=p>[[],</span> <span class=n>Callable</span><span class=p>[[</span><span class=n>Callable</span><span class=p>],</span> <span class=n>Callable</span><span class=p>]],</span>
<a id=__codelineno-0-9 name=__codelineno-0-9></a><span class=p>)</span> <span class=o>-&gt;</span> <span class=n>Callable</span><span class=p>[[</span><span class=n>TFunc</span><span class=p>],</span> <span class=n>TFunc</span><span class=p>]:</span>
<a id=__codelineno-0-10 name=__codelineno-0-10></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-11 name=__codelineno-0-11></a><span class=sd> Decorator that caches the given function similarly to `functools.lru_cache`.</span>
<a id=__codelineno-0-12 name=__codelineno-0-12></a><span class=sd> But the cache is instantiated only at first invocation.</span>
<a id=__codelineno-0-13 name=__codelineno-0-13></a>
<a id=__codelineno-0-14 name=__codelineno-0-14></a><span class=sd> `cache` argument is a function that generates the cache function,</span>
<a id=__codelineno-0-15 name=__codelineno-0-15></a><span class=sd> e.g. `functools.lru_cache()`.</span>
<a id=__codelineno-0-16 name=__codelineno-0-16></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-17 name=__codelineno-0-17></a> <span class=n>_cached_fn</span> <span class=o>=</span> <span class=kc>None</span>
<a id=__codelineno-0-18 name=__codelineno-0-18></a>
<a id=__codelineno-0-19 name=__codelineno-0-19></a> <span class=k>def</span> <span class=nf>decorator</span><span class=p>(</span><span class=n>fn</span><span class=p>:</span> <span class=n>TFunc</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n>TFunc</span><span class=p>:</span>
<a id=__codelineno-0-20 name=__codelineno-0-20></a> <span class=nd>@functools</span><span class=o>.</span><span class=n>wraps</span><span class=p>(</span><span class=n>fn</span><span class=p>)</span>
<a id=__codelineno-0-21 name=__codelineno-0-21></a> <span class=k>def</span> <span class=nf>wrapper</span><span class=p>(</span><span class=o>*</span><span class=n>args</span><span class=p>:</span> <span class=n>Any</span><span class=p>,</span> <span class=o>**</span><span class=n>kwargs</span><span class=p>:</span> <span class=n>Any</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n>Any</span><span class=p>:</span>
<a id=__codelineno-0-22 name=__codelineno-0-22></a> <span class=c1># Lazily initialize the cache</span>
<a id=__codelineno-0-23 name=__codelineno-0-23></a> <span class=k>nonlocal</span> <span class=n>_cached_fn</span>
<a id=__codelineno-0-24 name=__codelineno-0-24></a> <span class=k>if</span> <span class=ow>not</span> <span class=n>_cached_fn</span><span class=p>:</span>
<a id=__codelineno-0-25 name=__codelineno-0-25></a> <span class=c1># E.g. `lambda: functools.lru_cache(maxsize=app_settings.TEMPLATE_CACHE_SIZE)`</span>
<a id=__codelineno-0-26 name=__codelineno-0-26></a> <span class=n>cache</span> <span class=o>=</span> <span class=n>make_cache</span><span class=p>()</span>
<a id=__codelineno-0-27 name=__codelineno-0-27></a> <span class=n>_cached_fn</span> <span class=o>=</span> <span class=n>cache</span><span class=p>(</span><span class=n>fn</span><span class=p>)</span>
<a id=__codelineno-0-28 name=__codelineno-0-28></a>
<a id=__codelineno-0-29 name=__codelineno-0-29></a> <span class=k>return</span> <span class=n>_cached_fn</span><span class=p>(</span><span class=o>*</span><span class=n>args</span><span class=p>,</span> <span class=o>**</span><span class=n>kwargs</span><span class=p>)</span>
<a id=__codelineno-0-30 name=__codelineno-0-30></a>
<a id=__codelineno-0-31 name=__codelineno-0-31></a> <span class=c1># Allow to access the LRU cache methods</span>
<a id=__codelineno-0-32 name=__codelineno-0-32></a> <span class=c1># See https://stackoverflow.com/a/37654201/9788634</span>
<a id=__codelineno-0-33 name=__codelineno-0-33></a> <span class=n>wrapper</span><span class=o>.</span><span class=n>cache_info</span> <span class=o>=</span> <span class=k>lambda</span><span class=p>:</span> <span class=n>_cached_fn</span><span class=o>.</span><span class=n>cache_info</span><span class=p>()</span> <span class=c1># type: ignore</span>
<a id=__codelineno-0-34 name=__codelineno-0-34></a> <span class=n>wrapper</span><span class=o>.</span><span class=n>cache_clear</span> <span class=o>=</span> <span class=k>lambda</span><span class=p>:</span> <span class=n>_cached_fn</span><span class=o>.</span><span class=n>cache_clear</span><span class=p>()</span> <span class=c1># type: ignore</span>
<a id=__codelineno-0-35 name=__codelineno-0-35></a>
<a id=__codelineno-0-36 name=__codelineno-0-36></a> <span class=c1># And allow to remove the cache instance (mostly for tests)</span>
<a id=__codelineno-0-37 name=__codelineno-0-37></a> <span class=k>def</span> <span class=nf>cache_remove</span><span class=p>()</span> <span class=o>-&gt;</span> <span class=kc>None</span><span class=p>:</span>
<a id=__codelineno-0-38 name=__codelineno-0-38></a> <span class=k>nonlocal</span> <span class=n>_cached_fn</span>
<a id=__codelineno-0-39 name=__codelineno-0-39></a> <span class=n>_cached_fn</span> <span class=o>=</span> <span class=kc>None</span>
<a id=__codelineno-0-40 name=__codelineno-0-40></a>
<a id=__codelineno-0-41 name=__codelineno-0-41></a> <span class=n>wrapper</span><span class=o>.</span><span class=n>cache_remove</span> <span class=o>=</span> <span class=n>cache_remove</span> <span class=c1># type: ignore</span>
<a id=__codelineno-0-42 name=__codelineno-0-42></a>
<a id=__codelineno-0-43 name=__codelineno-0-43></a> <span class=k>return</span> <span class=n>cast</span><span class=p>(</span><span class=n>TFunc</span><span class=p>,</span> <span class=n>wrapper</span><span class=p>)</span>
<a id=__codelineno-0-44 name=__codelineno-0-44></a>
<a id=__codelineno-0-45 name=__codelineno-0-45></a> <span class=k>return</span> <span class=n>decorator</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> </div> </div> </div> <div class="doc doc-object doc-module"> <h3 id=django_components.util.html class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-module"></code> <span class="doc doc-object-name doc-module-name">html</span> <a href=#django_components.util.html class=headerlink title="Permanent link">¤</a></h3> <div class="doc doc-contents "> <p><span class=doc-section-title>Functions:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.util.html.parse_document_or_nodes href=#django_components.util.html.parse_document_or_nodes>parse_document_or_nodes</a></code></b> <div class=doc-md-description> <p>Use this if you do NOT know whether the given HTML is a full document</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.util.html.parse_multiroot_html href=#django_components.util.html.parse_multiroot_html>parse_multiroot_html</a></code></b> <div class=doc-md-description> <p>Use this when you know the given HTML is a multiple nodes like</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.util.html.parse_node href=#django_components.util.html.parse_node>parse_node</a></code></b> <div class=doc-md-description> <p>Use this when you know the given HTML is a single node like</p> </div> </li> </ul> <div class="doc doc-children"> <div class="doc doc-object doc-function"> <h4 id=django_components.util.html.parse_document_or_nodes class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-function"></code> <span class="doc doc-object-name doc-function-name">parse_document_or_nodes</span> <a href=#django_components.util.html.parse_document_or_nodes class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>parse_document_or_nodes</span><span class=p>(</span><span class=n>html</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-external" title=typing.Union href=https://docs.python.org/3.12/library/typing.html#typing.Union>Union</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.List href=https://docs.python.org/3.12/library/typing.html#typing.List>List</a></span><span class=p>[</span><span class=n><span title=selectolax.lexbor.LexborNode>LexborNode</span></span><span class=p>],</span> <span class=n><span title=selectolax.lexbor.LexborHTMLParser>LexborHTMLParser</span></span><span class=p>]</span>
</code></pre></div> <div class="doc doc-contents "> <p>Use this if you do NOT know whether the given HTML is a full document with <code>&lt;html&gt;</code>, <code>&lt;head&gt;</code>, and <code>&lt;body&gt;</code> tags, or an HTML fragment.</p> <details class=quote> <summary>Source code in <code>src/django_components/util/html.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-18>18</a></span>
<span class=normal><a href=#__codelineno-0-19>19</a></span>
<span class=normal><a href=#__codelineno-0-20>20</a></span>
<span class=normal><a href=#__codelineno-0-21>21</a></span>
<span class=normal><a href=#__codelineno-0-22>22</a></span>
<span class=normal><a href=#__codelineno-0-23>23</a></span>
<span class=normal><a href=#__codelineno-0-24>24</a></span>
<span class=normal><a href=#__codelineno-0-25>25</a></span>
<span class=normal><a href=#__codelineno-0-26>26</a></span>
<span class=normal><a href=#__codelineno-0-27>27</a></span>
<span class=normal><a href=#__codelineno-0-28>28</a></span>
<span class=normal><a href=#__codelineno-0-29>29</a></span>
<span class=normal><a href=#__codelineno-0-30>30</a></span>
<span class=normal><a href=#__codelineno-0-31>31</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-18 name=__codelineno-0-18></a><span class=k>def</span> <span class=nf>parse_document_or_nodes</span><span class=p>(</span><span class=n>html</span><span class=p>:</span> <span class=nb>str</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n>Union</span><span class=p>[</span><span class=n>List</span><span class=p>[</span><span class=n>LexborNode</span><span class=p>],</span> <span class=n>LexborHTMLParser</span><span class=p>]:</span>
<a id=__codelineno-0-19 name=__codelineno-0-19></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-20 name=__codelineno-0-20></a><span class=sd> Use this if you do NOT know whether the given HTML is a full document</span>
<a id=__codelineno-0-21 name=__codelineno-0-21></a><span class=sd> with `&lt;html&gt;`, `&lt;head&gt;`, and `&lt;body&gt;` tags, or an HTML fragment.</span>
<a id=__codelineno-0-22 name=__codelineno-0-22></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-23 name=__codelineno-0-23></a> <span class=n>html</span> <span class=o>=</span> <span class=n>html</span><span class=o>.</span><span class=n>strip</span><span class=p>()</span>
<a id=__codelineno-0-24 name=__codelineno-0-24></a> <span class=n>tree</span> <span class=o>=</span> <span class=n>LexborHTMLParser</span><span class=p>(</span><span class=n>html</span><span class=p>)</span>
<a id=__codelineno-0-25 name=__codelineno-0-25></a> <span class=n>is_fragment</span> <span class=o>=</span> <span class=n>is_html_parser_fragment</span><span class=p>(</span><span class=n>html</span><span class=p>,</span> <span class=n>tree</span><span class=p>)</span>
<a id=__codelineno-0-26 name=__codelineno-0-26></a>
<a id=__codelineno-0-27 name=__codelineno-0-27></a> <span class=k>if</span> <span class=n>is_fragment</span><span class=p>:</span>
<a id=__codelineno-0-28 name=__codelineno-0-28></a> <span class=n>nodes</span> <span class=o>=</span> <span class=n>parse_multiroot_html</span><span class=p>(</span><span class=n>html</span><span class=p>)</span>
<a id=__codelineno-0-29 name=__codelineno-0-29></a> <span class=k>return</span> <span class=n>nodes</span>
<a id=__codelineno-0-30 name=__codelineno-0-30></a> <span class=k>else</span><span class=p>:</span>
<a id=__codelineno-0-31 name=__codelineno-0-31></a> <span class=k>return</span> <span class=n>tree</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h4 id=django_components.util.html.parse_multiroot_html class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-function"></code> <span class="doc doc-object-name doc-function-name">parse_multiroot_html</span> <a href=#django_components.util.html.parse_multiroot_html class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>parse_multiroot_html</span><span class=p>(</span><span class=n>html</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-external" title=typing.List href=https://docs.python.org/3.12/library/typing.html#typing.List>List</a></span><span class=p>[</span><span class=n><span title=selectolax.lexbor.LexborNode>LexborNode</span></span><span class=p>]</span>
</code></pre></div> <div class="doc doc-contents "> <p>Use this when you know the given HTML is a multiple nodes like</p> <p><code>&lt;div&gt; Hi &lt;/div&gt; &lt;span&gt; Hello &lt;/span&gt;</code></p> <details class=quote> <summary>Source code in <code>src/django_components/util/html.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-34>34</a></span>
<span class=normal><a href=#__codelineno-0-35>35</a></span>
<span class=normal><a href=#__codelineno-0-36>36</a></span>
<span class=normal><a href=#__codelineno-0-37>37</a></span>
<span class=normal><a href=#__codelineno-0-38>38</a></span>
<span class=normal><a href=#__codelineno-0-39>39</a></span>
<span class=normal><a href=#__codelineno-0-40>40</a></span>
<span class=normal><a href=#__codelineno-0-41>41</a></span>
<span class=normal><a href=#__codelineno-0-42>42</a></span>
<span class=normal><a href=#__codelineno-0-43>43</a></span>
<span class=normal><a href=#__codelineno-0-44>44</a></span>
<span class=normal><a href=#__codelineno-0-45>45</a></span>
<span class=normal><a href=#__codelineno-0-46>46</a></span>
<span class=normal><a href=#__codelineno-0-47>47</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-34 name=__codelineno-0-34></a><span class=k>def</span> <span class=nf>parse_multiroot_html</span><span class=p>(</span><span class=n>html</span><span class=p>:</span> <span class=nb>str</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n>List</span><span class=p>[</span><span class=n>LexborNode</span><span class=p>]:</span>
<a id=__codelineno-0-35 name=__codelineno-0-35></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-36 name=__codelineno-0-36></a><span class=sd> Use this when you know the given HTML is a multiple nodes like</span>
<a id=__codelineno-0-37 name=__codelineno-0-37></a>
<a id=__codelineno-0-38 name=__codelineno-0-38></a><span class=sd> `&lt;div&gt; Hi &lt;/div&gt; &lt;span&gt; Hello &lt;/span&gt;`</span>
<a id=__codelineno-0-39 name=__codelineno-0-39></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-40 name=__codelineno-0-40></a> <span class=c1># NOTE: HTML / XML MUST have a single root. So, to support multiple</span>
<a id=__codelineno-0-41 name=__codelineno-0-41></a> <span class=c1># top-level elements, we wrap them in a dummy singular root.</span>
<a id=__codelineno-0-42 name=__codelineno-0-42></a> <span class=n>parser</span> <span class=o>=</span> <span class=n>LexborHTMLParser</span><span class=p>(</span><span class=sa>f</span><span class=s2>&quot;&lt;root&gt;</span><span class=si>{</span><span class=n>html</span><span class=si>}</span><span class=s2>&lt;/root&gt;&quot;</span><span class=p>)</span>
<a id=__codelineno-0-43 name=__codelineno-0-43></a>
<a id=__codelineno-0-44 name=__codelineno-0-44></a> <span class=c1># Get all contents of the root</span>
<a id=__codelineno-0-45 name=__codelineno-0-45></a> <span class=n>root_elem</span> <span class=o>=</span> <span class=n>parser</span><span class=o>.</span><span class=n>css_first</span><span class=p>(</span><span class=s2>&quot;root&quot;</span><span class=p>)</span>
<a id=__codelineno-0-46 name=__codelineno-0-46></a> <span class=n>elems</span> <span class=o>=</span> <span class=p>[</span><span class=o>*</span><span class=n>root_elem</span><span class=o>.</span><span class=n>iter</span><span class=p>()]</span> <span class=k>if</span> <span class=n>root_elem</span> <span class=k>else</span> <span class=p>[]</span>
<a id=__codelineno-0-47 name=__codelineno-0-47></a> <span class=k>return</span> <span class=n>elems</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h4 id=django_components.util.html.parse_node class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-function"></code> <span class="doc doc-object-name doc-function-name">parse_node</span> <a href=#django_components.util.html.parse_node class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>parse_node</span><span class=p>(</span><span class=n>html</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><span title=selectolax.lexbor.LexborNode>LexborNode</span></span>
</code></pre></div> <div class="doc doc-contents "> <p>Use this when you know the given HTML is a single node like</p> <p><code>&lt;div&gt; Hi &lt;/div&gt;</code></p> <details class=quote> <summary>Source code in <code>src/django_components/util/html.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-6> 6</a></span>
<span class=normal><a href=#__codelineno-0-7> 7</a></span>
<span class=normal><a href=#__codelineno-0-8> 8</a></span>
<span class=normal><a href=#__codelineno-0-9> 9</a></span>
<span class=normal><a href=#__codelineno-0-10>10</a></span>
<span class=normal><a href=#__codelineno-0-11>11</a></span>
<span class=normal><a href=#__codelineno-0-12>12</a></span>
<span class=normal><a href=#__codelineno-0-13>13</a></span>
<span class=normal><a href=#__codelineno-0-14>14</a></span>
<span class=normal><a href=#__codelineno-0-15>15</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-6 name=__codelineno-0-6></a><span class=k>def</span> <span class=nf>parse_node</span><span class=p>(</span><span class=n>html</span><span class=p>:</span> <span class=nb>str</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n>LexborNode</span><span class=p>:</span>
<a id=__codelineno-0-7 name=__codelineno-0-7></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-8 name=__codelineno-0-8></a><span class=sd> Use this when you know the given HTML is a single node like</span>
<a id=__codelineno-0-9 name=__codelineno-0-9></a>
<a id=__codelineno-0-10 name=__codelineno-0-10></a><span class=sd> `&lt;div&gt; Hi &lt;/div&gt;`</span>
<a id=__codelineno-0-11 name=__codelineno-0-11></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-12 name=__codelineno-0-12></a> <span class=n>tree</span> <span class=o>=</span> <span class=n>LexborHTMLParser</span><span class=p>(</span><span class=n>html</span><span class=p>)</span>
<a id=__codelineno-0-13 name=__codelineno-0-13></a> <span class=c1># NOTE: The parser automatically places &lt;style&gt; tags inside &lt;head&gt;</span>
<a id=__codelineno-0-14 name=__codelineno-0-14></a> <span class=c1># while &lt;script&gt; tags are inside &lt;body&gt;.</span>
<a id=__codelineno-0-15 name=__codelineno-0-15></a> <span class=k>return</span> <span class=n>tree</span><span class=o>.</span><span class=n>body</span><span class=o>.</span><span class=n>child</span> <span class=ow>or</span> <span class=n>tree</span><span class=o>.</span><span class=n>head</span><span class=o>.</span><span class=n>child</span> <span class=c1># type: ignore[union-attr, return-value]</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> </div> </div> </div> <div class="doc doc-object doc-module"> <h3 id=django_components.util.loader class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-module"></code> <span class="doc doc-object-name doc-module-name">loader</span> <a href=#django_components.util.loader class=headerlink title="Permanent link">¤</a></h3> <div class="doc doc-contents "> <p><span class=doc-section-title>Classes:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.util.loader.ComponentFileEntry href=#django_components.util.loader.ComponentFileEntry>ComponentFileEntry</a></code></b> <div class=doc-md-description> <p>Result returned by <a href=../api#django_components.get_component_files><code>get_component_files()</code></a>.</p> </div> </li> </ul> <p><span class=doc-section-title>Functions:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.util.loader.get_component_dirs href=#django_components.util.loader.get_component_dirs>get_component_dirs</a></code></b> <div class=doc-md-description> <p>Get directories that may contain component files.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.util.loader.get_component_files href=#django_components.util.loader.get_component_files>get_component_files</a></code></b> <div class=doc-md-description> <p>Search for files within the component directories (as defined in</p> </div> </li> </ul> <div class="doc doc-children"> <div class="doc doc-object doc-class"> <h4 id=django_components.util.loader.ComponentFileEntry class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-class"></code> <span class="doc doc-object-name doc-class-name">ComponentFileEntry</span> <a href=#django_components.util.loader.ComponentFileEntry class=headerlink title="Permanent link">¤</a></h4> <div class="doc doc-contents "> <p class="doc doc-class-bases"> Bases: <code><a class="autorefs autorefs-external" title=typing.NamedTuple href=https://docs.python.org/3.12/library/typing.html#typing.NamedTuple>NamedTuple</a></code></p> <p>Result returned by <a href=../api#django_components.get_component_files><code>get_component_files()</code></a>.</p> <p><span class=doc-section-title>Attributes:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.util.loader.ComponentFileEntry.dot_path href=#django_components.util.loader.ComponentFileEntry.dot_path>dot_path</a></code></b> (<code><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></code>) <div class=doc-md-description> <p>The python import path for the module. E.g. <code>app.components.mycomp</code></p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.util.loader.ComponentFileEntry.filepath href=#django_components.util.loader.ComponentFileEntry.filepath>filepath</a></code></b> (<code><a class="autorefs autorefs-external" title=pathlib.Path href=https://docs.python.org/3.12/library/pathlib.html#pathlib.Path>Path</a></code>) <div class=doc-md-description> <p>The filesystem path to the module. E.g. <code>/path/to/project/app/components/mycomp.py</code></p> </div> </li> </ul> <div class="doc doc-children"> <div class="doc doc-object doc-attribute"> <h5 id=django_components.util.loader.ComponentFileEntry.dot_path class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">dot_path</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.util.loader.ComponentFileEntry.dot_path class=headerlink title="Permanent link">¤</a></h5> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>dot_path</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span>
</code></pre></div> <div class="doc doc-contents "> <p>The python import path for the module. E.g. <code>app.components.mycomp</code></p> </div> </div> <div class="doc doc-object doc-attribute"> <h5 id=django_components.util.loader.ComponentFileEntry.filepath class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">filepath</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.util.loader.ComponentFileEntry.filepath class=headerlink title="Permanent link">¤</a></h5> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>filepath</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=pathlib.Path href=https://docs.python.org/3.12/library/pathlib.html#pathlib.Path>Path</a></span>
</code></pre></div> <div class="doc doc-contents "> <p>The filesystem path to the module. E.g. <code>/path/to/project/app/components/mycomp.py</code></p> </div> </div> </div> </div> </div> <div class="doc doc-object doc-function"> <h4 id=django_components.util.loader.get_component_dirs class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-function"></code> <span class="doc doc-object-name doc-function-name">get_component_dirs</span> <a href=#django_components.util.loader.get_component_dirs class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>get_component_dirs</span><span class=p>(</span><span class=n>include_apps</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/functions.html#bool>bool</a></span> <span class=o>=</span> <span class=kc>True</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-external" title=typing.List href=https://docs.python.org/3.12/library/typing.html#typing.List>List</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=pathlib.Path href=https://docs.python.org/3.12/library/pathlib.html#pathlib.Path>Path</a></span><span class=p>]</span>
</code></pre></div> <div class="doc doc-contents "> <p>Get directories that may contain component files.</p> <p>This is the heart of all features that deal with filesystem and file lookup. Autodiscovery, Django template resolution, static file resolution - They all use this.</p> <p><span class=doc-section-title>Parameters:</span></p> <ul> <li class="doc-section-item field-body"> <b><code>include_apps</code></b> (<code><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/functions.html#bool>bool</a></code>, default: <code>True</code> ) <div class=doc-md-description> <p>Include directories from installed Django apps. Defaults to <code>True</code>.</p> </div> </li> </ul> <p><span class=doc-section-title>Returns:</span></p> <ul> <li class="doc-section-item field-body"> <code><a class="autorefs autorefs-external" title=typing.List href=https://docs.python.org/3.12/library/typing.html#typing.List>List</a>[<a class="autorefs autorefs-external" title=pathlib.Path href=https://docs.python.org/3.12/library/pathlib.html#pathlib.Path>Path</a>]</code> <div class=doc-md-description> <p>List[Path]: A list of directories that may contain component files.</p> </div> </li> </ul> <p><code>get_component_dirs()</code> searches for dirs set in <a href=../settings#django_components.app_settings.ComponentsSettings.dirs><code>COMPONENTS.dirs</code></a> settings. If none set, defaults to searching for a <code>"components"</code> app.</p> <p>In addition to that, also all installed Django apps are checked whether they contain directories as set in <a href=../settings#django_components.app_settings.ComponentsSettings.app_dirs><code>COMPONENTS.app_dirs</code></a> (e.g. <code>[app]/components</code>).</p> <p><strong>Notes:</strong></p> <ul> <li> <p>Paths that do not point to directories are ignored.</p> </li> <li> <p><code>BASE_DIR</code> setting is required.</p> </li> <li> <p>The paths in <a href=../settings#django_components.app_settings.ComponentsSettings.dirs><code>COMPONENTS.dirs</code></a> must be absolute paths.</p> </li> </ul> <details class=quote> <summary>Source code in <code>src/django_components/util/loader.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-13> 13</a></span>
<span class=normal><a href=#__codelineno-0-14> 14</a></span>
<span class=normal><a href=#__codelineno-0-15> 15</a></span>
<span class=normal><a href=#__codelineno-0-16> 16</a></span>
<span class=normal><a href=#__codelineno-0-17> 17</a></span>
<span class=normal><a href=#__codelineno-0-18> 18</a></span>
<span class=normal><a href=#__codelineno-0-19> 19</a></span>
<span class=normal><a href=#__codelineno-0-20> 20</a></span>
<span class=normal><a href=#__codelineno-0-21> 21</a></span>
<span class=normal><a href=#__codelineno-0-22> 22</a></span>
<span class=normal><a href=#__codelineno-0-23> 23</a></span>
<span class=normal><a href=#__codelineno-0-24> 24</a></span>
<span class=normal><a href=#__codelineno-0-25> 25</a></span>
<span class=normal><a href=#__codelineno-0-26> 26</a></span>
<span class=normal><a href=#__codelineno-0-27> 27</a></span>
<span class=normal><a href=#__codelineno-0-28> 28</a></span>
<span class=normal><a href=#__codelineno-0-29> 29</a></span>
<span class=normal><a href=#__codelineno-0-30> 30</a></span>
<span class=normal><a href=#__codelineno-0-31> 31</a></span>
<span class=normal><a href=#__codelineno-0-32> 32</a></span>
<span class=normal><a href=#__codelineno-0-33> 33</a></span>
<span class=normal><a href=#__codelineno-0-34> 34</a></span>
<span class=normal><a href=#__codelineno-0-35> 35</a></span>
<span class=normal><a href=#__codelineno-0-36> 36</a></span>
<span class=normal><a href=#__codelineno-0-37> 37</a></span>
<span class=normal><a href=#__codelineno-0-38> 38</a></span>
<span class=normal><a href=#__codelineno-0-39> 39</a></span>
<span class=normal><a href=#__codelineno-0-40> 40</a></span>
<span class=normal><a href=#__codelineno-0-41> 41</a></span>
<span class=normal><a href=#__codelineno-0-42> 42</a></span>
<span class=normal><a href=#__codelineno-0-43> 43</a></span>
<span class=normal><a href=#__codelineno-0-44> 44</a></span>
<span class=normal><a href=#__codelineno-0-45> 45</a></span>
<span class=normal><a href=#__codelineno-0-46> 46</a></span>
<span class=normal><a href=#__codelineno-0-47> 47</a></span>
<span class=normal><a href=#__codelineno-0-48> 48</a></span>
<span class=normal><a href=#__codelineno-0-49> 49</a></span>
<span class=normal><a href=#__codelineno-0-50> 50</a></span>
<span class=normal><a href=#__codelineno-0-51> 51</a></span>
<span class=normal><a href=#__codelineno-0-52> 52</a></span>
<span class=normal><a href=#__codelineno-0-53> 53</a></span>
<span class=normal><a href=#__codelineno-0-54> 54</a></span>
<span class=normal><a href=#__codelineno-0-55> 55</a></span>
<span class=normal><a href=#__codelineno-0-56> 56</a></span>
<span class=normal><a href=#__codelineno-0-57> 57</a></span>
<span class=normal><a href=#__codelineno-0-58> 58</a></span>
<span class=normal><a href=#__codelineno-0-59> 59</a></span>
<span class=normal><a href=#__codelineno-0-60> 60</a></span>
<span class=normal><a href=#__codelineno-0-61> 61</a></span>
<span class=normal><a href=#__codelineno-0-62> 62</a></span>
<span class=normal><a href=#__codelineno-0-63> 63</a></span>
<span class=normal><a href=#__codelineno-0-64> 64</a></span>
<span class=normal><a href=#__codelineno-0-65> 65</a></span>
<span class=normal><a href=#__codelineno-0-66> 66</a></span>
<span class=normal><a href=#__codelineno-0-67> 67</a></span>
<span class=normal><a href=#__codelineno-0-68> 68</a></span>
<span class=normal><a href=#__codelineno-0-69> 69</a></span>
<span class=normal><a href=#__codelineno-0-70> 70</a></span>
<span class=normal><a href=#__codelineno-0-71> 71</a></span>
<span class=normal><a href=#__codelineno-0-72> 72</a></span>
<span class=normal><a href=#__codelineno-0-73> 73</a></span>
<span class=normal><a href=#__codelineno-0-74> 74</a></span>
<span class=normal><a href=#__codelineno-0-75> 75</a></span>
<span class=normal><a href=#__codelineno-0-76> 76</a></span>
<span class=normal><a href=#__codelineno-0-77> 77</a></span>
<span class=normal><a href=#__codelineno-0-78> 78</a></span>
<span class=normal><a href=#__codelineno-0-79> 79</a></span>
<span class=normal><a href=#__codelineno-0-80> 80</a></span>
<span class=normal><a href=#__codelineno-0-81> 81</a></span>
<span class=normal><a href=#__codelineno-0-82> 82</a></span>
<span class=normal><a href=#__codelineno-0-83> 83</a></span>
<span class=normal><a href=#__codelineno-0-84> 84</a></span>
<span class=normal><a href=#__codelineno-0-85> 85</a></span>
<span class=normal><a href=#__codelineno-0-86> 86</a></span>
<span class=normal><a href=#__codelineno-0-87> 87</a></span>
<span class=normal><a href=#__codelineno-0-88> 88</a></span>
<span class=normal><a href=#__codelineno-0-89> 89</a></span>
<span class=normal><a href=#__codelineno-0-90> 90</a></span>
<span class=normal><a href=#__codelineno-0-91> 91</a></span>
<span class=normal><a href=#__codelineno-0-92> 92</a></span>
<span class=normal><a href=#__codelineno-0-93> 93</a></span>
<span class=normal><a href=#__codelineno-0-94> 94</a></span>
<span class=normal><a href=#__codelineno-0-95> 95</a></span>
<span class=normal><a href=#__codelineno-0-96> 96</a></span>
<span class=normal><a href=#__codelineno-0-97> 97</a></span>
<span class=normal><a href=#__codelineno-0-98> 98</a></span>
<span class=normal><a href=#__codelineno-0-99> 99</a></span>
<span class=normal><a href=#__codelineno-0-100>100</a></span>
<span class=normal><a href=#__codelineno-0-101>101</a></span>
<span class=normal><a href=#__codelineno-0-102>102</a></span>
<span class=normal><a href=#__codelineno-0-103>103</a></span>
<span class=normal><a href=#__codelineno-0-104>104</a></span>
<span class=normal><a href=#__codelineno-0-105>105</a></span>
<span class=normal><a href=#__codelineno-0-106>106</a></span>
<span class=normal><a href=#__codelineno-0-107>107</a></span>
<span class=normal><a href=#__codelineno-0-108>108</a></span>
<span class=normal><a href=#__codelineno-0-109>109</a></span>
<span class=normal><a href=#__codelineno-0-110>110</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-13 name=__codelineno-0-13></a><span class=k>def</span> <span class=nf>get_component_dirs</span><span class=p>(</span><span class=n>include_apps</span><span class=p>:</span> <span class=nb>bool</span> <span class=o>=</span> <span class=kc>True</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n>List</span><span class=p>[</span><span class=n>Path</span><span class=p>]:</span>
<a id=__codelineno-0-14 name=__codelineno-0-14></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-15 name=__codelineno-0-15></a><span class=sd> Get directories that may contain component files.</span>
<a id=__codelineno-0-16 name=__codelineno-0-16></a>
<a id=__codelineno-0-17 name=__codelineno-0-17></a><span class=sd> This is the heart of all features that deal with filesystem and file lookup.</span>
<a id=__codelineno-0-18 name=__codelineno-0-18></a><span class=sd> Autodiscovery, Django template resolution, static file resolution - They all use this.</span>
<a id=__codelineno-0-19 name=__codelineno-0-19></a>
<a id=__codelineno-0-20 name=__codelineno-0-20></a><span class=sd> Args:</span>
<a id=__codelineno-0-21 name=__codelineno-0-21></a><span class=sd> include_apps (bool, optional): Include directories from installed Django apps.\</span>
<a id=__codelineno-0-22 name=__codelineno-0-22></a><span class=sd> Defaults to `True`.</span>
<a id=__codelineno-0-23 name=__codelineno-0-23></a>
<a id=__codelineno-0-24 name=__codelineno-0-24></a><span class=sd> Returns:</span>
<a id=__codelineno-0-25 name=__codelineno-0-25></a><span class=sd> List[Path]: A list of directories that may contain component files.</span>
<a id=__codelineno-0-26 name=__codelineno-0-26></a>
<a id=__codelineno-0-27 name=__codelineno-0-27></a><span class=sd> `get_component_dirs()` searches for dirs set in</span>
<a id=__codelineno-0-28 name=__codelineno-0-28></a><span class=sd> [`COMPONENTS.dirs`](../settings#django_components.app_settings.ComponentsSettings.dirs)</span>
<a id=__codelineno-0-29 name=__codelineno-0-29></a><span class=sd> settings. If none set, defaults to searching for a `&quot;components&quot;` app.</span>
<a id=__codelineno-0-30 name=__codelineno-0-30></a>
<a id=__codelineno-0-31 name=__codelineno-0-31></a><span class=sd> In addition to that, also all installed Django apps are checked whether they contain</span>
<a id=__codelineno-0-32 name=__codelineno-0-32></a><span class=sd> directories as set in</span>
<a id=__codelineno-0-33 name=__codelineno-0-33></a><span class=sd> [`COMPONENTS.app_dirs`](../settings#django_components.app_settings.ComponentsSettings.app_dirs)</span>
<a id=__codelineno-0-34 name=__codelineno-0-34></a><span class=sd> (e.g. `[app]/components`).</span>
<a id=__codelineno-0-35 name=__codelineno-0-35></a>
<a id=__codelineno-0-36 name=__codelineno-0-36></a><span class=sd> **Notes:**</span>
<a id=__codelineno-0-37 name=__codelineno-0-37></a>
<a id=__codelineno-0-38 name=__codelineno-0-38></a><span class=sd> - Paths that do not point to directories are ignored.</span>
<a id=__codelineno-0-39 name=__codelineno-0-39></a>
<a id=__codelineno-0-40 name=__codelineno-0-40></a><span class=sd> - `BASE_DIR` setting is required.</span>
<a id=__codelineno-0-41 name=__codelineno-0-41></a>
<a id=__codelineno-0-42 name=__codelineno-0-42></a><span class=sd> - The paths in [`COMPONENTS.dirs`](../settings#django_components.app_settings.ComponentsSettings.dirs)</span>
<a id=__codelineno-0-43 name=__codelineno-0-43></a><span class=sd> must be absolute paths.</span>
<a id=__codelineno-0-44 name=__codelineno-0-44></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-45 name=__codelineno-0-45></a> <span class=c1># Allow to configure from settings which dirs should be checked for components</span>
<a id=__codelineno-0-46 name=__codelineno-0-46></a> <span class=n>component_dirs</span> <span class=o>=</span> <span class=n>app_settings</span><span class=o>.</span><span class=n>DIRS</span>
<a id=__codelineno-0-47 name=__codelineno-0-47></a>
<a id=__codelineno-0-48 name=__codelineno-0-48></a> <span class=c1># TODO_REMOVE_IN_V1</span>
<a id=__codelineno-0-49 name=__codelineno-0-49></a> <span class=n>raw_component_settings</span> <span class=o>=</span> <span class=nb>getattr</span><span class=p>(</span><span class=n>settings</span><span class=p>,</span> <span class=s2>&quot;COMPONENTS&quot;</span><span class=p>,</span> <span class=p>{})</span>
<a id=__codelineno-0-50 name=__codelineno-0-50></a> <span class=k>if</span> <span class=nb>isinstance</span><span class=p>(</span><span class=n>raw_component_settings</span><span class=p>,</span> <span class=nb>dict</span><span class=p>):</span>
<a id=__codelineno-0-51 name=__codelineno-0-51></a> <span class=n>raw_dirs_value</span> <span class=o>=</span> <span class=n>raw_component_settings</span><span class=o>.</span><span class=n>get</span><span class=p>(</span><span class=s2>&quot;dirs&quot;</span><span class=p>,</span> <span class=kc>None</span><span class=p>)</span>
<a id=__codelineno-0-52 name=__codelineno-0-52></a> <span class=k>elif</span> <span class=nb>isinstance</span><span class=p>(</span><span class=n>raw_component_settings</span><span class=p>,</span> <span class=n>ComponentsSettings</span><span class=p>):</span>
<a id=__codelineno-0-53 name=__codelineno-0-53></a> <span class=n>raw_dirs_value</span> <span class=o>=</span> <span class=n>raw_component_settings</span><span class=o>.</span><span class=n>dirs</span>
<a id=__codelineno-0-54 name=__codelineno-0-54></a> <span class=k>else</span><span class=p>:</span>
<a id=__codelineno-0-55 name=__codelineno-0-55></a> <span class=n>raw_dirs_value</span> <span class=o>=</span> <span class=kc>None</span>
<a id=__codelineno-0-56 name=__codelineno-0-56></a> <span class=n>is_component_dirs_set</span> <span class=o>=</span> <span class=n>raw_dirs_value</span> <span class=ow>is</span> <span class=ow>not</span> <span class=kc>None</span>
<a id=__codelineno-0-57 name=__codelineno-0-57></a> <span class=n>is_legacy_paths</span> <span class=o>=</span> <span class=p>(</span>
<a id=__codelineno-0-58 name=__codelineno-0-58></a> <span class=c1># Use value of `STATICFILES_DIRS` ONLY if `COMPONENT.dirs` not set</span>
<a id=__codelineno-0-59 name=__codelineno-0-59></a> <span class=ow>not</span> <span class=n>is_component_dirs_set</span>
<a id=__codelineno-0-60 name=__codelineno-0-60></a> <span class=ow>and</span> <span class=nb>hasattr</span><span class=p>(</span><span class=n>settings</span><span class=p>,</span> <span class=s2>&quot;STATICFILES_DIRS&quot;</span><span class=p>)</span>
<a id=__codelineno-0-61 name=__codelineno-0-61></a> <span class=ow>and</span> <span class=n>settings</span><span class=o>.</span><span class=n>STATICFILES_DIRS</span>
<a id=__codelineno-0-62 name=__codelineno-0-62></a> <span class=p>)</span>
<a id=__codelineno-0-63 name=__codelineno-0-63></a> <span class=k>if</span> <span class=n>is_legacy_paths</span><span class=p>:</span>
<a id=__codelineno-0-64 name=__codelineno-0-64></a> <span class=c1># NOTE: For STATICFILES_DIRS, we use the defaults even for empty list.</span>
<a id=__codelineno-0-65 name=__codelineno-0-65></a> <span class=c1># We don&#39;t do this for COMPONENTS.dirs, so user can explicitly specify &quot;NO dirs&quot;.</span>
<a id=__codelineno-0-66 name=__codelineno-0-66></a> <span class=n>component_dirs</span> <span class=o>=</span> <span class=n>settings</span><span class=o>.</span><span class=n>STATICFILES_DIRS</span> <span class=ow>or</span> <span class=p>[</span><span class=n>settings</span><span class=o>.</span><span class=n>BASE_DIR</span> <span class=o>/</span> <span class=s2>&quot;components&quot;</span><span class=p>]</span>
<a id=__codelineno-0-67 name=__codelineno-0-67></a> <span class=c1># END TODO_REMOVE_IN_V1</span>
<a id=__codelineno-0-68 name=__codelineno-0-68></a>
<a id=__codelineno-0-69 name=__codelineno-0-69></a> <span class=n>source</span> <span class=o>=</span> <span class=s2>&quot;STATICFILES_DIRS&quot;</span> <span class=k>if</span> <span class=n>is_legacy_paths</span> <span class=k>else</span> <span class=s2>&quot;COMPONENTS.dirs&quot;</span>
<a id=__codelineno-0-70 name=__codelineno-0-70></a>
<a id=__codelineno-0-71 name=__codelineno-0-71></a> <span class=n>logger</span><span class=o>.</span><span class=n>debug</span><span class=p>(</span>
<a id=__codelineno-0-72 name=__codelineno-0-72></a> <span class=s2>&quot;get_component_dirs will search for valid dirs from following options:</span><span class=se>\n</span><span class=s2>&quot;</span>
<a id=__codelineno-0-73 name=__codelineno-0-73></a> <span class=o>+</span> <span class=s2>&quot;</span><span class=se>\n</span><span class=s2>&quot;</span><span class=o>.</span><span class=n>join</span><span class=p>([</span><span class=sa>f</span><span class=s2>&quot; - </span><span class=si>{</span><span class=nb>str</span><span class=p>(</span><span class=n>d</span><span class=p>)</span><span class=si>}</span><span class=s2>&quot;</span> <span class=k>for</span> <span class=n>d</span> <span class=ow>in</span> <span class=n>component_dirs</span><span class=p>])</span>
<a id=__codelineno-0-74 name=__codelineno-0-74></a> <span class=p>)</span>
<a id=__codelineno-0-75 name=__codelineno-0-75></a>
<a id=__codelineno-0-76 name=__codelineno-0-76></a> <span class=c1># Add `[app]/[APP_DIR]` to the directories. This is, by default `[app]/components`</span>
<a id=__codelineno-0-77 name=__codelineno-0-77></a> <span class=n>app_paths</span><span class=p>:</span> <span class=n>List</span><span class=p>[</span><span class=n>Path</span><span class=p>]</span> <span class=o>=</span> <span class=p>[]</span>
<a id=__codelineno-0-78 name=__codelineno-0-78></a> <span class=k>if</span> <span class=n>include_apps</span><span class=p>:</span>
<a id=__codelineno-0-79 name=__codelineno-0-79></a> <span class=k>for</span> <span class=n>conf</span> <span class=ow>in</span> <span class=n>apps</span><span class=o>.</span><span class=n>get_app_configs</span><span class=p>():</span>
<a id=__codelineno-0-80 name=__codelineno-0-80></a> <span class=k>for</span> <span class=n>app_dir</span> <span class=ow>in</span> <span class=n>app_settings</span><span class=o>.</span><span class=n>APP_DIRS</span><span class=p>:</span>
<a id=__codelineno-0-81 name=__codelineno-0-81></a> <span class=n>comps_path</span> <span class=o>=</span> <span class=n>Path</span><span class=p>(</span><span class=n>conf</span><span class=o>.</span><span class=n>path</span><span class=p>)</span><span class=o>.</span><span class=n>joinpath</span><span class=p>(</span><span class=n>app_dir</span><span class=p>)</span>
<a id=__codelineno-0-82 name=__codelineno-0-82></a> <span class=k>if</span> <span class=n>comps_path</span><span class=o>.</span><span class=n>exists</span><span class=p>():</span>
<a id=__codelineno-0-83 name=__codelineno-0-83></a> <span class=n>app_paths</span><span class=o>.</span><span class=n>append</span><span class=p>(</span><span class=n>comps_path</span><span class=p>)</span>
<a id=__codelineno-0-84 name=__codelineno-0-84></a>
<a id=__codelineno-0-85 name=__codelineno-0-85></a> <span class=n>directories</span><span class=p>:</span> <span class=n>Set</span><span class=p>[</span><span class=n>Path</span><span class=p>]</span> <span class=o>=</span> <span class=nb>set</span><span class=p>(</span><span class=n>app_paths</span><span class=p>)</span>
<a id=__codelineno-0-86 name=__codelineno-0-86></a>
<a id=__codelineno-0-87 name=__codelineno-0-87></a> <span class=c1># Validate and add other values from the config</span>
<a id=__codelineno-0-88 name=__codelineno-0-88></a> <span class=k>for</span> <span class=n>component_dir</span> <span class=ow>in</span> <span class=n>component_dirs</span><span class=p>:</span>
<a id=__codelineno-0-89 name=__codelineno-0-89></a> <span class=c1># Consider tuples for STATICFILES_DIRS (See #489)</span>
<a id=__codelineno-0-90 name=__codelineno-0-90></a> <span class=c1># See https://docs.djangoproject.com/en/5.0/ref/settings/#prefixes-optional</span>
<a id=__codelineno-0-91 name=__codelineno-0-91></a> <span class=k>if</span> <span class=nb>isinstance</span><span class=p>(</span><span class=n>component_dir</span><span class=p>,</span> <span class=p>(</span><span class=nb>tuple</span><span class=p>,</span> <span class=nb>list</span><span class=p>)):</span>
<a id=__codelineno-0-92 name=__codelineno-0-92></a> <span class=n>component_dir</span> <span class=o>=</span> <span class=n>component_dir</span><span class=p>[</span><span class=mi>1</span><span class=p>]</span>
<a id=__codelineno-0-93 name=__codelineno-0-93></a> <span class=k>try</span><span class=p>:</span>
<a id=__codelineno-0-94 name=__codelineno-0-94></a> <span class=n>Path</span><span class=p>(</span><span class=n>component_dir</span><span class=p>)</span>
<a id=__codelineno-0-95 name=__codelineno-0-95></a> <span class=k>except</span> <span class=ne>TypeError</span><span class=p>:</span>
<a id=__codelineno-0-96 name=__codelineno-0-96></a> <span class=n>logger</span><span class=o>.</span><span class=n>warning</span><span class=p>(</span>
<a id=__codelineno-0-97 name=__codelineno-0-97></a> <span class=sa>f</span><span class=s2>&quot;</span><span class=si>{</span><span class=n>source</span><span class=si>}</span><span class=s2> expected str, bytes or os.PathLike object, or tuple/list of length 2. &quot;</span>
<a id=__codelineno-0-98 name=__codelineno-0-98></a> <span class=sa>f</span><span class=s2>&quot;See Django documentation for STATICFILES_DIRS. Got </span><span class=si>{</span><span class=nb>type</span><span class=p>(</span><span class=n>component_dir</span><span class=p>)</span><span class=si>}</span><span class=s2> : </span><span class=si>{</span><span class=n>component_dir</span><span class=si>}</span><span class=s2>&quot;</span>
<a id=__codelineno-0-99 name=__codelineno-0-99></a> <span class=p>)</span>
<a id=__codelineno-0-100 name=__codelineno-0-100></a> <span class=k>continue</span>
<a id=__codelineno-0-101 name=__codelineno-0-101></a>
<a id=__codelineno-0-102 name=__codelineno-0-102></a> <span class=k>if</span> <span class=ow>not</span> <span class=n>Path</span><span class=p>(</span><span class=n>component_dir</span><span class=p>)</span><span class=o>.</span><span class=n>is_absolute</span><span class=p>():</span>
<a id=__codelineno-0-103 name=__codelineno-0-103></a> <span class=k>raise</span> <span class=ne>ValueError</span><span class=p>(</span><span class=sa>f</span><span class=s2>&quot;</span><span class=si>{</span><span class=n>source</span><span class=si>}</span><span class=s2> must contain absolute paths, got &#39;</span><span class=si>{</span><span class=n>component_dir</span><span class=si>}</span><span class=s2>&#39;&quot;</span><span class=p>)</span>
<a id=__codelineno-0-104 name=__codelineno-0-104></a> <span class=k>else</span><span class=p>:</span>
<a id=__codelineno-0-105 name=__codelineno-0-105></a> <span class=n>directories</span><span class=o>.</span><span class=n>add</span><span class=p>(</span><span class=n>Path</span><span class=p>(</span><span class=n>component_dir</span><span class=p>)</span><span class=o>.</span><span class=n>resolve</span><span class=p>())</span>
<a id=__codelineno-0-106 name=__codelineno-0-106></a>
<a id=__codelineno-0-107 name=__codelineno-0-107></a> <span class=n>logger</span><span class=o>.</span><span class=n>debug</span><span class=p>(</span>
<a id=__codelineno-0-108 name=__codelineno-0-108></a> <span class=s2>&quot;get_component_dirs matched following template dirs:</span><span class=se>\n</span><span class=s2>&quot;</span> <span class=o>+</span> <span class=s2>&quot;</span><span class=se>\n</span><span class=s2>&quot;</span><span class=o>.</span><span class=n>join</span><span class=p>([</span><span class=sa>f</span><span class=s2>&quot; - </span><span class=si>{</span><span class=nb>str</span><span class=p>(</span><span class=n>d</span><span class=p>)</span><span class=si>}</span><span class=s2>&quot;</span> <span class=k>for</span> <span class=n>d</span> <span class=ow>in</span> <span class=n>directories</span><span class=p>])</span>
<a id=__codelineno-0-109 name=__codelineno-0-109></a> <span class=p>)</span>
<a id=__codelineno-0-110 name=__codelineno-0-110></a> <span class=k>return</span> <span class=nb>list</span><span class=p>(</span><span class=n>directories</span><span class=p>)</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h4 id=django_components.util.loader.get_component_files class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-function"></code> <span class="doc doc-object-name doc-function-name">get_component_files</span> <a href=#django_components.util.loader.get_component_files class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>get_component_files</span><span class=p>(</span><span class=n>suffix</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-external" title=typing.List href=https://docs.python.org/3.12/library/typing.html#typing.List>List</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-internal" title=django_components.util.loader.ComponentFileEntry href=#django_components.util.loader.ComponentFileEntry>ComponentFileEntry</a></span><span class=p>]</span>
</code></pre></div> <div class="doc doc-contents "> <p>Search for files within the component directories (as defined in <a href=../api#django_components.get_component_dirs><code>get_component_dirs()</code></a>).</p> <p>Requires <code>BASE_DIR</code> setting to be set.</p> <p><span class=doc-section-title>Parameters:</span></p> <ul> <li class="doc-section-item field-body"> <b><code>suffix</code></b> (<code><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a>[<a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a>]</code>, default: <code>None</code> ) <div class=doc-md-description> <p>The suffix to search for. E.g. <code>.py</code>, <code>.js</code>, <code>.css</code>. Defaults to <code>None</code>, which will search for all files.</p> </div> </li> </ul> <p><span class=doc-section-title>Returns:</span></p> <ul> <li class="doc-section-item field-body"> <code><a class="autorefs autorefs-external" title=typing.List href=https://docs.python.org/3.12/library/typing.html#typing.List>List</a>[<a class="autorefs autorefs-internal" title=django_components.util.loader.ComponentFileEntry href=#django_components.util.loader.ComponentFileEntry>ComponentFileEntry</a>]</code> <div class=doc-md-description> <p>List[ComponentFileEntry] A list of entries that contain both the filesystem path and the python import path (dot path).</p> </div> </li> </ul> <p><strong>Example:</strong></p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=kn>from</span> <span class=nn>django_components</span> <span class=kn>import</span> <span class=n>get_component_files</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=n>modules</span> <span class=o>=</span> <span class=n>get_component_files</span><span class=p>(</span><span class=s2>&quot;.py&quot;</span><span class=p>)</span>
</code></pre></div> <details class=quote> <summary>Source code in <code>src/django_components/util/loader.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-122>122</a></span>
<span class=normal><a href=#__codelineno-0-123>123</a></span>
<span class=normal><a href=#__codelineno-0-124>124</a></span>
<span class=normal><a href=#__codelineno-0-125>125</a></span>
<span class=normal><a href=#__codelineno-0-126>126</a></span>
<span class=normal><a href=#__codelineno-0-127>127</a></span>
<span class=normal><a href=#__codelineno-0-128>128</a></span>
<span class=normal><a href=#__codelineno-0-129>129</a></span>
<span class=normal><a href=#__codelineno-0-130>130</a></span>
<span class=normal><a href=#__codelineno-0-131>131</a></span>
<span class=normal><a href=#__codelineno-0-132>132</a></span>
<span class=normal><a href=#__codelineno-0-133>133</a></span>
<span class=normal><a href=#__codelineno-0-134>134</a></span>
<span class=normal><a href=#__codelineno-0-135>135</a></span>
<span class=normal><a href=#__codelineno-0-136>136</a></span>
<span class=normal><a href=#__codelineno-0-137>137</a></span>
<span class=normal><a href=#__codelineno-0-138>138</a></span>
<span class=normal><a href=#__codelineno-0-139>139</a></span>
<span class=normal><a href=#__codelineno-0-140>140</a></span>
<span class=normal><a href=#__codelineno-0-141>141</a></span>
<span class=normal><a href=#__codelineno-0-142>142</a></span>
<span class=normal><a href=#__codelineno-0-143>143</a></span>
<span class=normal><a href=#__codelineno-0-144>144</a></span>
<span class=normal><a href=#__codelineno-0-145>145</a></span>
<span class=normal><a href=#__codelineno-0-146>146</a></span>
<span class=normal><a href=#__codelineno-0-147>147</a></span>
<span class=normal><a href=#__codelineno-0-148>148</a></span>
<span class=normal><a href=#__codelineno-0-149>149</a></span>
<span class=normal><a href=#__codelineno-0-150>150</a></span>
<span class=normal><a href=#__codelineno-0-151>151</a></span>
<span class=normal><a href=#__codelineno-0-152>152</a></span>
<span class=normal><a href=#__codelineno-0-153>153</a></span>
<span class=normal><a href=#__codelineno-0-154>154</a></span>
<span class=normal><a href=#__codelineno-0-155>155</a></span>
<span class=normal><a href=#__codelineno-0-156>156</a></span>
<span class=normal><a href=#__codelineno-0-157>157</a></span>
<span class=normal><a href=#__codelineno-0-158>158</a></span>
<span class=normal><a href=#__codelineno-0-159>159</a></span>
<span class=normal><a href=#__codelineno-0-160>160</a></span>
<span class=normal><a href=#__codelineno-0-161>161</a></span>
<span class=normal><a href=#__codelineno-0-162>162</a></span>
<span class=normal><a href=#__codelineno-0-163>163</a></span>
<span class=normal><a href=#__codelineno-0-164>164</a></span>
<span class=normal><a href=#__codelineno-0-165>165</a></span>
<span class=normal><a href=#__codelineno-0-166>166</a></span>
<span class=normal><a href=#__codelineno-0-167>167</a></span>
<span class=normal><a href=#__codelineno-0-168>168</a></span>
<span class=normal><a href=#__codelineno-0-169>169</a></span>
<span class=normal><a href=#__codelineno-0-170>170</a></span>
<span class=normal><a href=#__codelineno-0-171>171</a></span>
<span class=normal><a href=#__codelineno-0-172>172</a></span>
<span class=normal><a href=#__codelineno-0-173>173</a></span>
<span class=normal><a href=#__codelineno-0-174>174</a></span>
<span class=normal><a href=#__codelineno-0-175>175</a></span>
<span class=normal><a href=#__codelineno-0-176>176</a></span>
<span class=normal><a href=#__codelineno-0-177>177</a></span>
<span class=normal><a href=#__codelineno-0-178>178</a></span>
<span class=normal><a href=#__codelineno-0-179>179</a></span>
<span class=normal><a href=#__codelineno-0-180>180</a></span>
<span class=normal><a href=#__codelineno-0-181>181</a></span>
<span class=normal><a href=#__codelineno-0-182>182</a></span>
<span class=normal><a href=#__codelineno-0-183>183</a></span>
<span class=normal><a href=#__codelineno-0-184>184</a></span>
<span class=normal><a href=#__codelineno-0-185>185</a></span>
<span class=normal><a href=#__codelineno-0-186>186</a></span>
<span class=normal><a href=#__codelineno-0-187>187</a></span>
<span class=normal><a href=#__codelineno-0-188>188</a></span>
<span class=normal><a href=#__codelineno-0-189>189</a></span>
<span class=normal><a href=#__codelineno-0-190>190</a></span>
<span class=normal><a href=#__codelineno-0-191>191</a></span>
<span class=normal><a href=#__codelineno-0-192>192</a></span>
<span class=normal><a href=#__codelineno-0-193>193</a></span>
<span class=normal><a href=#__codelineno-0-194>194</a></span>
<span class=normal><a href=#__codelineno-0-195>195</a></span>
<span class=normal><a href=#__codelineno-0-196>196</a></span>
<span class=normal><a href=#__codelineno-0-197>197</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-122 name=__codelineno-0-122></a><span class=k>def</span> <span class=nf>get_component_files</span><span class=p>(</span><span class=n>suffix</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=nb>str</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=n>List</span><span class=p>[</span><span class=n>ComponentFileEntry</span><span class=p>]:</span>
<a id=__codelineno-0-123 name=__codelineno-0-123></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-124 name=__codelineno-0-124></a><span class=sd> Search for files within the component directories (as defined in</span>
<a id=__codelineno-0-125 name=__codelineno-0-125></a><span class=sd> [`get_component_dirs()`](../api#django_components.get_component_dirs)).</span>
<a id=__codelineno-0-126 name=__codelineno-0-126></a>
<a id=__codelineno-0-127 name=__codelineno-0-127></a><span class=sd> Requires `BASE_DIR` setting to be set.</span>
<a id=__codelineno-0-128 name=__codelineno-0-128></a>
<a id=__codelineno-0-129 name=__codelineno-0-129></a><span class=sd> Args:</span>
<a id=__codelineno-0-130 name=__codelineno-0-130></a><span class=sd> suffix (Optional[str], optional): The suffix to search for. E.g. `.py`, `.js`, `.css`.\</span>
<a id=__codelineno-0-131 name=__codelineno-0-131></a><span class=sd> Defaults to `None`, which will search for all files.</span>
<a id=__codelineno-0-132 name=__codelineno-0-132></a>
<a id=__codelineno-0-133 name=__codelineno-0-133></a><span class=sd> Returns:</span>
<a id=__codelineno-0-134 name=__codelineno-0-134></a><span class=sd> List[ComponentFileEntry] A list of entries that contain both the filesystem path and \</span>
<a id=__codelineno-0-135 name=__codelineno-0-135></a><span class=sd> the python import path (dot path).</span>
<a id=__codelineno-0-136 name=__codelineno-0-136></a>
<a id=__codelineno-0-137 name=__codelineno-0-137></a><span class=sd> **Example:**</span>
<a id=__codelineno-0-138 name=__codelineno-0-138></a>
<a id=__codelineno-0-139 name=__codelineno-0-139></a><span class=sd> ```python</span>
<a id=__codelineno-0-140 name=__codelineno-0-140></a><span class=sd> from django_components import get_component_files</span>
<a id=__codelineno-0-141 name=__codelineno-0-141></a>
<a id=__codelineno-0-142 name=__codelineno-0-142></a><span class=sd> modules = get_component_files(&quot;.py&quot;)</span>
<a id=__codelineno-0-143 name=__codelineno-0-143></a><span class=sd> ```</span>
<a id=__codelineno-0-144 name=__codelineno-0-144></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-145 name=__codelineno-0-145></a> <span class=n>search_glob</span> <span class=o>=</span> <span class=sa>f</span><span class=s2>&quot;**/*</span><span class=si>{</span><span class=n>suffix</span><span class=si>}</span><span class=s2>&quot;</span> <span class=k>if</span> <span class=n>suffix</span> <span class=k>else</span> <span class=s2>&quot;**/*&quot;</span>
<a id=__codelineno-0-146 name=__codelineno-0-146></a>
<a id=__codelineno-0-147 name=__codelineno-0-147></a> <span class=n>dirs</span> <span class=o>=</span> <span class=n>get_component_dirs</span><span class=p>(</span><span class=n>include_apps</span><span class=o>=</span><span class=kc>False</span><span class=p>)</span>
<a id=__codelineno-0-148 name=__codelineno-0-148></a> <span class=n>component_filepaths</span> <span class=o>=</span> <span class=n>_search_dirs</span><span class=p>(</span><span class=n>dirs</span><span class=p>,</span> <span class=n>search_glob</span><span class=p>)</span>
<a id=__codelineno-0-149 name=__codelineno-0-149></a>
<a id=__codelineno-0-150 name=__codelineno-0-150></a> <span class=k>if</span> <span class=nb>hasattr</span><span class=p>(</span><span class=n>settings</span><span class=p>,</span> <span class=s2>&quot;BASE_DIR&quot;</span><span class=p>)</span> <span class=ow>and</span> <span class=n>settings</span><span class=o>.</span><span class=n>BASE_DIR</span><span class=p>:</span>
<a id=__codelineno-0-151 name=__codelineno-0-151></a> <span class=n>project_root</span> <span class=o>=</span> <span class=nb>str</span><span class=p>(</span><span class=n>settings</span><span class=o>.</span><span class=n>BASE_DIR</span><span class=p>)</span>
<a id=__codelineno-0-152 name=__codelineno-0-152></a> <span class=k>else</span><span class=p>:</span>
<a id=__codelineno-0-153 name=__codelineno-0-153></a> <span class=c1># Fallback for getting the root dir, see https://stackoverflow.com/a/16413955/9788634</span>
<a id=__codelineno-0-154 name=__codelineno-0-154></a> <span class=n>project_root</span> <span class=o>=</span> <span class=n>os</span><span class=o>.</span><span class=n>path</span><span class=o>.</span><span class=n>abspath</span><span class=p>(</span><span class=n>os</span><span class=o>.</span><span class=n>path</span><span class=o>.</span><span class=n>dirname</span><span class=p>(</span><span class=vm>__name__</span><span class=p>))</span>
<a id=__codelineno-0-155 name=__codelineno-0-155></a>
<a id=__codelineno-0-156 name=__codelineno-0-156></a> <span class=c1># NOTE: We handle dirs from `COMPONENTS.dirs` and from individual apps separately.</span>
<a id=__codelineno-0-157 name=__codelineno-0-157></a> <span class=n>modules</span><span class=p>:</span> <span class=n>List</span><span class=p>[</span><span class=n>ComponentFileEntry</span><span class=p>]</span> <span class=o>=</span> <span class=p>[]</span>
<a id=__codelineno-0-158 name=__codelineno-0-158></a>
<a id=__codelineno-0-159 name=__codelineno-0-159></a> <span class=c1># First let&#39;s handle the dirs from `COMPONENTS.dirs`</span>
<a id=__codelineno-0-160 name=__codelineno-0-160></a> <span class=c1>#</span>
<a id=__codelineno-0-161 name=__codelineno-0-161></a> <span class=c1># Because for dirs in `COMPONENTS.dirs`, we assume they will be nested under `BASE_DIR`,</span>
<a id=__codelineno-0-162 name=__codelineno-0-162></a> <span class=c1># and that `BASE_DIR` is the current working dir (CWD). So the path relatively to `BASE_DIR`</span>
<a id=__codelineno-0-163 name=__codelineno-0-163></a> <span class=c1># is ALSO the python import path.</span>
<a id=__codelineno-0-164 name=__codelineno-0-164></a> <span class=k>for</span> <span class=n>filepath</span> <span class=ow>in</span> <span class=n>component_filepaths</span><span class=p>:</span>
<a id=__codelineno-0-165 name=__codelineno-0-165></a> <span class=n>module_path</span> <span class=o>=</span> <span class=n>_filepath_to_python_module</span><span class=p>(</span><span class=n>filepath</span><span class=p>,</span> <span class=n>project_root</span><span class=p>,</span> <span class=kc>None</span><span class=p>)</span>
<a id=__codelineno-0-166 name=__codelineno-0-166></a> <span class=c1># Ignore files starting with dot `.` or files in dirs that start with dot.</span>
<a id=__codelineno-0-167 name=__codelineno-0-167></a> <span class=c1>#</span>
<a id=__codelineno-0-168 name=__codelineno-0-168></a> <span class=c1># If any of the parts of the path start with a dot, e.g. the filesystem path</span>
<a id=__codelineno-0-169 name=__codelineno-0-169></a> <span class=c1># is `./abc/.def`, then this gets converted to python module as `abc..def`</span>
<a id=__codelineno-0-170 name=__codelineno-0-170></a> <span class=c1>#</span>
<a id=__codelineno-0-171 name=__codelineno-0-171></a> <span class=c1># NOTE: This approach also ignores files:</span>
<a id=__codelineno-0-172 name=__codelineno-0-172></a> <span class=c1># - with two dots in the middle (ab..cd.py)</span>
<a id=__codelineno-0-173 name=__codelineno-0-173></a> <span class=c1># - an extra dot at the end (abcd..py)</span>
<a id=__codelineno-0-174 name=__codelineno-0-174></a> <span class=c1># - files outside of the parent component (../abcd.py).</span>
<a id=__codelineno-0-175 name=__codelineno-0-175></a> <span class=c1># But all these are NOT valid python modules so that&#39;s fine.</span>
<a id=__codelineno-0-176 name=__codelineno-0-176></a> <span class=k>if</span> <span class=s2>&quot;..&quot;</span> <span class=ow>in</span> <span class=n>module_path</span><span class=p>:</span>
<a id=__codelineno-0-177 name=__codelineno-0-177></a> <span class=k>continue</span>
<a id=__codelineno-0-178 name=__codelineno-0-178></a>
<a id=__codelineno-0-179 name=__codelineno-0-179></a> <span class=n>entry</span> <span class=o>=</span> <span class=n>ComponentFileEntry</span><span class=p>(</span><span class=n>dot_path</span><span class=o>=</span><span class=n>module_path</span><span class=p>,</span> <span class=n>filepath</span><span class=o>=</span><span class=n>filepath</span><span class=p>)</span>
<a id=__codelineno-0-180 name=__codelineno-0-180></a> <span class=n>modules</span><span class=o>.</span><span class=n>append</span><span class=p>(</span><span class=n>entry</span><span class=p>)</span>
<a id=__codelineno-0-181 name=__codelineno-0-181></a>
<a id=__codelineno-0-182 name=__codelineno-0-182></a> <span class=c1># For for apps, the directories may be outside of the project, e.g. in case of third party</span>
<a id=__codelineno-0-183 name=__codelineno-0-183></a> <span class=c1># apps. So we have to resolve the python import path relative to the package name / the root</span>
<a id=__codelineno-0-184 name=__codelineno-0-184></a> <span class=c1># import path for the app.</span>
<a id=__codelineno-0-185 name=__codelineno-0-185></a> <span class=c1># See https://github.com/EmilStenstrom/django-components/issues/669</span>
<a id=__codelineno-0-186 name=__codelineno-0-186></a> <span class=k>for</span> <span class=n>conf</span> <span class=ow>in</span> <span class=n>apps</span><span class=o>.</span><span class=n>get_app_configs</span><span class=p>():</span>
<a id=__codelineno-0-187 name=__codelineno-0-187></a> <span class=k>for</span> <span class=n>app_dir</span> <span class=ow>in</span> <span class=n>app_settings</span><span class=o>.</span><span class=n>APP_DIRS</span><span class=p>:</span>
<a id=__codelineno-0-188 name=__codelineno-0-188></a> <span class=n>comps_path</span> <span class=o>=</span> <span class=n>Path</span><span class=p>(</span><span class=n>conf</span><span class=o>.</span><span class=n>path</span><span class=p>)</span><span class=o>.</span><span class=n>joinpath</span><span class=p>(</span><span class=n>app_dir</span><span class=p>)</span>
<a id=__codelineno-0-189 name=__codelineno-0-189></a> <span class=k>if</span> <span class=ow>not</span> <span class=n>comps_path</span><span class=o>.</span><span class=n>exists</span><span class=p>():</span>
<a id=__codelineno-0-190 name=__codelineno-0-190></a> <span class=k>continue</span>
<a id=__codelineno-0-191 name=__codelineno-0-191></a> <span class=n>app_component_filepaths</span> <span class=o>=</span> <span class=n>_search_dirs</span><span class=p>([</span><span class=n>comps_path</span><span class=p>],</span> <span class=n>search_glob</span><span class=p>)</span>
<a id=__codelineno-0-192 name=__codelineno-0-192></a> <span class=k>for</span> <span class=n>filepath</span> <span class=ow>in</span> <span class=n>app_component_filepaths</span><span class=p>:</span>
<a id=__codelineno-0-193 name=__codelineno-0-193></a> <span class=n>app_component_module</span> <span class=o>=</span> <span class=n>_filepath_to_python_module</span><span class=p>(</span><span class=n>filepath</span><span class=p>,</span> <span class=n>conf</span><span class=o>.</span><span class=n>path</span><span class=p>,</span> <span class=n>conf</span><span class=o>.</span><span class=n>name</span><span class=p>)</span>
<a id=__codelineno-0-194 name=__codelineno-0-194></a> <span class=n>entry</span> <span class=o>=</span> <span class=n>ComponentFileEntry</span><span class=p>(</span><span class=n>dot_path</span><span class=o>=</span><span class=n>app_component_module</span><span class=p>,</span> <span class=n>filepath</span><span class=o>=</span><span class=n>filepath</span><span class=p>)</span>
<a id=__codelineno-0-195 name=__codelineno-0-195></a> <span class=n>modules</span><span class=o>.</span><span class=n>append</span><span class=p>(</span><span class=n>entry</span><span class=p>)</span>
<a id=__codelineno-0-196 name=__codelineno-0-196></a>
<a id=__codelineno-0-197 name=__codelineno-0-197></a> <span class=k>return</span> <span class=n>modules</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> </div> </div> </div> <div class="doc doc-object doc-module"> <h3 id=django_components.util.logger class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-module"></code> <span class="doc doc-object-name doc-module-name">logger</span> <a href=#django_components.util.logger class=headerlink title="Permanent link">¤</a></h3> <div class="doc doc-contents "> <p><span class=doc-section-title>Functions:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.util.logger.trace href=#django_components.util.logger.trace>trace</a></code></b> <div class=doc-md-description> <p>TRACE level logger.</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.util.logger.trace_msg href=#django_components.util.logger.trace_msg>trace_msg</a></code></b> <div class=doc-md-description> <p>TRACE level logger with opinionated format for tracing interaction of components,</p> </div> </li> </ul> <div class="doc doc-children"> <div class="doc doc-object doc-function"> <h4 id=django_components.util.logger.trace class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-function"></code> <span class="doc doc-object-name doc-function-name">trace</span> <a href=#django_components.util.logger.trace class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>trace</span><span class=p>(</span><span class=n>logger</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=logging.Logger href=https://docs.python.org/3.12/library/logging.html#logging.Logger>Logger</a></span><span class=p>,</span> <span class=n>message</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span> <span class=o>*</span><span class=n>args</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Any href=https://docs.python.org/3.12/library/typing.html#typing.Any>Any</a></span><span class=p>,</span> <span class=o>**</span><span class=n>kwargs</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Any href=https://docs.python.org/3.12/library/typing.html#typing.Any>Any</a></span><span class=p>)</span> <span class=o>-&gt;</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>TRACE level logger.</p> <p>To display TRACE logs, set the logging level to 5.</p> <p>Example: <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>LOGGING</span> <span class=o>=</span> <span class=p>{</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a> <span class=s2>&quot;version&quot;</span><span class=p>:</span> <span class=mi>1</span><span class=p>,</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a> <span class=s2>&quot;disable_existing_loggers&quot;</span><span class=p>:</span> <span class=kc>False</span><span class=p>,</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a> <span class=s2>&quot;handlers&quot;</span><span class=p>:</span> <span class=p>{</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a> <span class=s2>&quot;console&quot;</span><span class=p>:</span> <span class=p>{</span>
<a id=__codelineno-0-6 name=__codelineno-0-6 href=#__codelineno-0-6></a> <span class=s2>&quot;class&quot;</span><span class=p>:</span> <span class=s2>&quot;logging.StreamHandler&quot;</span><span class=p>,</span>
<a id=__codelineno-0-7 name=__codelineno-0-7 href=#__codelineno-0-7></a> <span class=s2>&quot;stream&quot;</span><span class=p>:</span> <span class=n>sys</span><span class=o>.</span><span class=n>stdout</span><span class=p>,</span>
<a id=__codelineno-0-8 name=__codelineno-0-8 href=#__codelineno-0-8></a> <span class=p>},</span>
<a id=__codelineno-0-9 name=__codelineno-0-9 href=#__codelineno-0-9></a> <span class=p>},</span>
<a id=__codelineno-0-10 name=__codelineno-0-10 href=#__codelineno-0-10></a> <span class=s2>&quot;loggers&quot;</span><span class=p>:</span> <span class=p>{</span>
<a id=__codelineno-0-11 name=__codelineno-0-11 href=#__codelineno-0-11></a> <span class=s2>&quot;django_components&quot;</span><span class=p>:</span> <span class=p>{</span>
<a id=__codelineno-0-12 name=__codelineno-0-12 href=#__codelineno-0-12></a> <span class=s2>&quot;level&quot;</span><span class=p>:</span> <span class=mi>5</span><span class=p>,</span>
<a id=__codelineno-0-13 name=__codelineno-0-13 href=#__codelineno-0-13></a> <span class=s2>&quot;handlers&quot;</span><span class=p>:</span> <span class=p>[</span><span class=s2>&quot;console&quot;</span><span class=p>],</span>
<a id=__codelineno-0-14 name=__codelineno-0-14 href=#__codelineno-0-14></a> <span class=p>},</span>
<a id=__codelineno-0-15 name=__codelineno-0-15 href=#__codelineno-0-15></a> <span class=p>},</span>
<a id=__codelineno-0-16 name=__codelineno-0-16 href=#__codelineno-0-16></a><span class=p>}</span>
</code></pre></div></p> <details class=quote> <summary>Source code in <code>src/django_components/util/logger.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-32>32</a></span>
<span class=normal><a href=#__codelineno-0-33>33</a></span>
<span class=normal><a href=#__codelineno-0-34>34</a></span>
<span class=normal><a href=#__codelineno-0-35>35</a></span>
<span class=normal><a href=#__codelineno-0-36>36</a></span>
<span class=normal><a href=#__codelineno-0-37>37</a></span>
<span class=normal><a href=#__codelineno-0-38>38</a></span>
<span class=normal><a href=#__codelineno-0-39>39</a></span>
<span class=normal><a href=#__codelineno-0-40>40</a></span>
<span class=normal><a href=#__codelineno-0-41>41</a></span>
<span class=normal><a href=#__codelineno-0-42>42</a></span>
<span class=normal><a href=#__codelineno-0-43>43</a></span>
<span class=normal><a href=#__codelineno-0-44>44</a></span>
<span class=normal><a href=#__codelineno-0-45>45</a></span>
<span class=normal><a href=#__codelineno-0-46>46</a></span>
<span class=normal><a href=#__codelineno-0-47>47</a></span>
<span class=normal><a href=#__codelineno-0-48>48</a></span>
<span class=normal><a href=#__codelineno-0-49>49</a></span>
<span class=normal><a href=#__codelineno-0-50>50</a></span>
<span class=normal><a href=#__codelineno-0-51>51</a></span>
<span class=normal><a href=#__codelineno-0-52>52</a></span>
<span class=normal><a href=#__codelineno-0-53>53</a></span>
<span class=normal><a href=#__codelineno-0-54>54</a></span>
<span class=normal><a href=#__codelineno-0-55>55</a></span>
<span class=normal><a href=#__codelineno-0-56>56</a></span>
<span class=normal><a href=#__codelineno-0-57>57</a></span>
<span class=normal><a href=#__codelineno-0-58>58</a></span>
<span class=normal><a href=#__codelineno-0-59>59</a></span>
<span class=normal><a href=#__codelineno-0-60>60</a></span>
<span class=normal><a href=#__codelineno-0-61>61</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-32 name=__codelineno-0-32></a><span class=k>def</span> <span class=nf>trace</span><span class=p>(</span><span class=n>logger</span><span class=p>:</span> <span class=n>logging</span><span class=o>.</span><span class=n>Logger</span><span class=p>,</span> <span class=n>message</span><span class=p>:</span> <span class=nb>str</span><span class=p>,</span> <span class=o>*</span><span class=n>args</span><span class=p>:</span> <span class=n>Any</span><span class=p>,</span> <span class=o>**</span><span class=n>kwargs</span><span class=p>:</span> <span class=n>Any</span><span class=p>)</span> <span class=o>-&gt;</span> <span class=kc>None</span><span class=p>:</span>
<a id=__codelineno-0-33 name=__codelineno-0-33></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-34 name=__codelineno-0-34></a><span class=sd> TRACE level logger.</span>
<a id=__codelineno-0-35 name=__codelineno-0-35></a>
<a id=__codelineno-0-36 name=__codelineno-0-36></a><span class=sd> To display TRACE logs, set the logging level to 5.</span>
<a id=__codelineno-0-37 name=__codelineno-0-37></a>
<a id=__codelineno-0-38 name=__codelineno-0-38></a><span class=sd> Example:</span>
<a id=__codelineno-0-39 name=__codelineno-0-39></a><span class=sd> ```py</span>
<a id=__codelineno-0-40 name=__codelineno-0-40></a><span class=sd> LOGGING = {</span>
<a id=__codelineno-0-41 name=__codelineno-0-41></a><span class=sd> &quot;version&quot;: 1,</span>
<a id=__codelineno-0-42 name=__codelineno-0-42></a><span class=sd> &quot;disable_existing_loggers&quot;: False,</span>
<a id=__codelineno-0-43 name=__codelineno-0-43></a><span class=sd> &quot;handlers&quot;: {</span>
<a id=__codelineno-0-44 name=__codelineno-0-44></a><span class=sd> &quot;console&quot;: {</span>
<a id=__codelineno-0-45 name=__codelineno-0-45></a><span class=sd> &quot;class&quot;: &quot;logging.StreamHandler&quot;,</span>
<a id=__codelineno-0-46 name=__codelineno-0-46></a><span class=sd> &quot;stream&quot;: sys.stdout,</span>
<a id=__codelineno-0-47 name=__codelineno-0-47></a><span class=sd> },</span>
<a id=__codelineno-0-48 name=__codelineno-0-48></a><span class=sd> },</span>
<a id=__codelineno-0-49 name=__codelineno-0-49></a><span class=sd> &quot;loggers&quot;: {</span>
<a id=__codelineno-0-50 name=__codelineno-0-50></a><span class=sd> &quot;django_components&quot;: {</span>
<a id=__codelineno-0-51 name=__codelineno-0-51></a><span class=sd> &quot;level&quot;: 5,</span>
<a id=__codelineno-0-52 name=__codelineno-0-52></a><span class=sd> &quot;handlers&quot;: [&quot;console&quot;],</span>
<a id=__codelineno-0-53 name=__codelineno-0-53></a><span class=sd> },</span>
<a id=__codelineno-0-54 name=__codelineno-0-54></a><span class=sd> },</span>
<a id=__codelineno-0-55 name=__codelineno-0-55></a><span class=sd> }</span>
<a id=__codelineno-0-56 name=__codelineno-0-56></a><span class=sd> ```</span>
<a id=__codelineno-0-57 name=__codelineno-0-57></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-58 name=__codelineno-0-58></a> <span class=k>if</span> <span class=n>actual_trace_level_num</span> <span class=o>==</span> <span class=o>-</span><span class=mi>1</span><span class=p>:</span>
<a id=__codelineno-0-59 name=__codelineno-0-59></a> <span class=n>setup_logging</span><span class=p>()</span>
<a id=__codelineno-0-60 name=__codelineno-0-60></a> <span class=k>if</span> <span class=n>logger</span><span class=o>.</span><span class=n>isEnabledFor</span><span class=p>(</span><span class=n>actual_trace_level_num</span><span class=p>):</span>
<a id=__codelineno-0-61 name=__codelineno-0-61></a> <span class=n>logger</span><span class=o>.</span><span class=n>log</span><span class=p>(</span><span class=n>actual_trace_level_num</span><span class=p>,</span> <span class=n>message</span><span class=p>,</span> <span class=o>*</span><span class=n>args</span><span class=p>,</span> <span class=o>**</span><span class=n>kwargs</span><span class=p>)</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h4 id=django_components.util.logger.trace_msg class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-function"></code> <span class="doc doc-object-name doc-function-name">trace_msg</span> <a href=#django_components.util.logger.trace_msg class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>trace_msg</span><span class=p>(</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a> <span class=n>action</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Literal href=https://docs.python.org/3.12/library/typing.html#typing.Literal>Literal</a></span><span class=p>[</span><span class=s2>&quot;PARSE&quot;</span><span class=p>,</span> <span class=s2>&quot;RENDR&quot;</span><span class=p>,</span> <span class=s2>&quot;GET&quot;</span><span class=p>,</span> <span class=s2>&quot;SET&quot;</span><span class=p>],</span>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a> <span class=n>node_type</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Literal href=https://docs.python.org/3.12/library/typing.html#typing.Literal>Literal</a></span><span class=p>[</span><span class=s2>&quot;COMP&quot;</span><span class=p>,</span> <span class=s2>&quot;FILL&quot;</span><span class=p>,</span> <span class=s2>&quot;SLOT&quot;</span><span class=p>,</span> <span class=s2>&quot;PROVIDE&quot;</span><span class=p>,</span> <span class=s2>&quot;N/A&quot;</span><span class=p>],</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a> <span class=n>node_name</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span>
<a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a> <span class=n>node_id</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span>
<a id=__codelineno-0-6 name=__codelineno-0-6 href=#__codelineno-0-6></a> <span class=n>msg</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span> <span class=o>=</span> <span class=s2>&quot;&quot;</span><span class=p>,</span>
<a id=__codelineno-0-7 name=__codelineno-0-7 href=#__codelineno-0-7></a> <span class=n>component_id</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-8 name=__codelineno-0-8 href=#__codelineno-0-8></a><span class=p>)</span> <span class=o>-&gt;</span> <span class=kc>None</span>
</code></pre></div> <div class="doc doc-contents "> <p>TRACE level logger with opinionated format for tracing interaction of components, nodes, and slots. Formats messages like so:</p> <p><code>"ASSOC SLOT test_slot ID 0088 TO COMP 0087"</code></p> <details class=quote> <summary>Source code in <code>src/django_components/util/logger.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-64>64</a></span>
<span class=normal><a href=#__codelineno-0-65>65</a></span>
<span class=normal><a href=#__codelineno-0-66>66</a></span>
<span class=normal><a href=#__codelineno-0-67>67</a></span>
<span class=normal><a href=#__codelineno-0-68>68</a></span>
<span class=normal><a href=#__codelineno-0-69>69</a></span>
<span class=normal><a href=#__codelineno-0-70>70</a></span>
<span class=normal><a href=#__codelineno-0-71>71</a></span>
<span class=normal><a href=#__codelineno-0-72>72</a></span>
<span class=normal><a href=#__codelineno-0-73>73</a></span>
<span class=normal><a href=#__codelineno-0-74>74</a></span>
<span class=normal><a href=#__codelineno-0-75>75</a></span>
<span class=normal><a href=#__codelineno-0-76>76</a></span>
<span class=normal><a href=#__codelineno-0-77>77</a></span>
<span class=normal><a href=#__codelineno-0-78>78</a></span>
<span class=normal><a href=#__codelineno-0-79>79</a></span>
<span class=normal><a href=#__codelineno-0-80>80</a></span>
<span class=normal><a href=#__codelineno-0-81>81</a></span>
<span class=normal><a href=#__codelineno-0-82>82</a></span>
<span class=normal><a href=#__codelineno-0-83>83</a></span>
<span class=normal><a href=#__codelineno-0-84>84</a></span>
<span class=normal><a href=#__codelineno-0-85>85</a></span>
<span class=normal><a href=#__codelineno-0-86>86</a></span>
<span class=normal><a href=#__codelineno-0-87>87</a></span>
<span class=normal><a href=#__codelineno-0-88>88</a></span>
<span class=normal><a href=#__codelineno-0-89>89</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-64 name=__codelineno-0-64></a><span class=k>def</span> <span class=nf>trace_msg</span><span class=p>(</span>
<a id=__codelineno-0-65 name=__codelineno-0-65></a> <span class=n>action</span><span class=p>:</span> <span class=n>Literal</span><span class=p>[</span><span class=s2>&quot;PARSE&quot;</span><span class=p>,</span> <span class=s2>&quot;RENDR&quot;</span><span class=p>,</span> <span class=s2>&quot;GET&quot;</span><span class=p>,</span> <span class=s2>&quot;SET&quot;</span><span class=p>],</span>
<a id=__codelineno-0-66 name=__codelineno-0-66></a> <span class=n>node_type</span><span class=p>:</span> <span class=n>Literal</span><span class=p>[</span><span class=s2>&quot;COMP&quot;</span><span class=p>,</span> <span class=s2>&quot;FILL&quot;</span><span class=p>,</span> <span class=s2>&quot;SLOT&quot;</span><span class=p>,</span> <span class=s2>&quot;PROVIDE&quot;</span><span class=p>,</span> <span class=s2>&quot;N/A&quot;</span><span class=p>],</span>
<a id=__codelineno-0-67 name=__codelineno-0-67></a> <span class=n>node_name</span><span class=p>:</span> <span class=nb>str</span><span class=p>,</span>
<a id=__codelineno-0-68 name=__codelineno-0-68></a> <span class=n>node_id</span><span class=p>:</span> <span class=nb>str</span><span class=p>,</span>
<a id=__codelineno-0-69 name=__codelineno-0-69></a> <span class=n>msg</span><span class=p>:</span> <span class=nb>str</span> <span class=o>=</span> <span class=s2>&quot;&quot;</span><span class=p>,</span>
<a id=__codelineno-0-70 name=__codelineno-0-70></a> <span class=n>component_id</span><span class=p>:</span> <span class=n>Optional</span><span class=p>[</span><span class=nb>str</span><span class=p>]</span> <span class=o>=</span> <span class=kc>None</span><span class=p>,</span>
<a id=__codelineno-0-71 name=__codelineno-0-71></a><span class=p>)</span> <span class=o>-&gt;</span> <span class=kc>None</span><span class=p>:</span>
<a id=__codelineno-0-72 name=__codelineno-0-72></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-73 name=__codelineno-0-73></a><span class=sd> TRACE level logger with opinionated format for tracing interaction of components,</span>
<a id=__codelineno-0-74 name=__codelineno-0-74></a><span class=sd> nodes, and slots. Formats messages like so:</span>
<a id=__codelineno-0-75 name=__codelineno-0-75></a>
<a id=__codelineno-0-76 name=__codelineno-0-76></a><span class=sd> `&quot;ASSOC SLOT test_slot ID 0088 TO COMP 0087&quot;`</span>
<a id=__codelineno-0-77 name=__codelineno-0-77></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-78 name=__codelineno-0-78></a> <span class=n>msg_prefix</span> <span class=o>=</span> <span class=s2>&quot;&quot;</span>
<a id=__codelineno-0-79 name=__codelineno-0-79></a> <span class=k>if</span> <span class=n>action</span> <span class=o>==</span> <span class=s2>&quot;RENDR&quot;</span> <span class=ow>and</span> <span class=n>node_type</span> <span class=o>==</span> <span class=s2>&quot;FILL&quot;</span><span class=p>:</span>
<a id=__codelineno-0-80 name=__codelineno-0-80></a> <span class=k>if</span> <span class=ow>not</span> <span class=n>component_id</span><span class=p>:</span>
<a id=__codelineno-0-81 name=__codelineno-0-81></a> <span class=k>raise</span> <span class=ne>ValueError</span><span class=p>(</span><span class=s2>&quot;component_id must be set for the RENDER action&quot;</span><span class=p>)</span>
<a id=__codelineno-0-82 name=__codelineno-0-82></a> <span class=n>msg_prefix</span> <span class=o>=</span> <span class=sa>f</span><span class=s2>&quot;FOR COMP </span><span class=si>{</span><span class=n>component_id</span><span class=si>}</span><span class=s2>&quot;</span>
<a id=__codelineno-0-83 name=__codelineno-0-83></a>
<a id=__codelineno-0-84 name=__codelineno-0-84></a> <span class=n>msg_parts</span> <span class=o>=</span> <span class=p>[</span><span class=sa>f</span><span class=s2>&quot;</span><span class=si>{</span><span class=n>action</span><span class=si>}</span><span class=s2> </span><span class=si>{</span><span class=n>node_type</span><span class=si>}</span><span class=s2> </span><span class=si>{</span><span class=n>node_name</span><span class=si>}</span><span class=s2> ID </span><span class=si>{</span><span class=n>node_id</span><span class=si>}</span><span class=s2>&quot;</span><span class=p>,</span> <span class=o>*</span><span class=p>([</span><span class=n>msg_prefix</span><span class=p>]</span> <span class=k>if</span> <span class=n>msg_prefix</span> <span class=k>else</span> <span class=p>[]),</span> <span class=n>msg</span><span class=p>]</span>
<a id=__codelineno-0-85 name=__codelineno-0-85></a> <span class=n>full_msg</span> <span class=o>=</span> <span class=s2>&quot; &quot;</span><span class=o>.</span><span class=n>join</span><span class=p>(</span><span class=n>msg_parts</span><span class=p>)</span>
<a id=__codelineno-0-86 name=__codelineno-0-86></a>
<a id=__codelineno-0-87 name=__codelineno-0-87></a> <span class=c1># NOTE: When debugging tests during development, it may be easier to change</span>
<a id=__codelineno-0-88 name=__codelineno-0-88></a> <span class=c1># this to `print()`</span>
<a id=__codelineno-0-89 name=__codelineno-0-89></a> <span class=n>trace</span><span class=p>(</span><span class=n>logger</span><span class=p>,</span> <span class=n>full_msg</span><span class=p>)</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> </div> </div> </div> <div class="doc doc-object doc-module"> <h3 id=django_components.util.misc class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-module"></code> <span class="doc doc-object-name doc-module-name">misc</span> <a href=#django_components.util.misc class=headerlink title="Permanent link">¤</a></h3> <div class="doc doc-contents "> <p><span class=doc-section-title>Functions:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.util.misc.gen_id href=#django_components.util.misc.gen_id>gen_id</a></code></b> <div class=doc-md-description> <p>Generate a unique ID that can be associated with a Node</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.util.misc.get_import_path href=#django_components.util.misc.get_import_path>get_import_path</a></code></b> <div class=doc-md-description> <p>Get the full import path for a class or a function, e.g. <code>"path.to.MyClass"</code></p> </div> </li> </ul> <div class="doc doc-children"> <div class="doc doc-object doc-function"> <h4 id=django_components.util.misc.gen_id class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-function"></code> <span class="doc doc-object-name doc-function-name">gen_id</span> <a href=#django_components.util.misc.gen_id class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>gen_id</span><span class=p>()</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span>
</code></pre></div> <div class="doc doc-contents "> <p>Generate a unique ID that can be associated with a Node</p> <details class=quote> <summary>Source code in <code>src/django_components/util/misc.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-13>13</a></span>
<span class=normal><a href=#__codelineno-0-14>14</a></span>
<span class=normal><a href=#__codelineno-0-15>15</a></span>
<span class=normal><a href=#__codelineno-0-16>16</a></span>
<span class=normal><a href=#__codelineno-0-17>17</a></span>
<span class=normal><a href=#__codelineno-0-18>18</a></span>
<span class=normal><a href=#__codelineno-0-19>19</a></span>
<span class=normal><a href=#__codelineno-0-20>20</a></span>
<span class=normal><a href=#__codelineno-0-21>21</a></span>
<span class=normal><a href=#__codelineno-0-22>22</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-13 name=__codelineno-0-13></a><span class=k>def</span> <span class=nf>gen_id</span><span class=p>()</span> <span class=o>-&gt;</span> <span class=nb>str</span><span class=p>:</span>
<a id=__codelineno-0-14 name=__codelineno-0-14></a><span class=w> </span><span class=sd>&quot;&quot;&quot;Generate a unique ID that can be associated with a Node&quot;&quot;&quot;</span>
<a id=__codelineno-0-15 name=__codelineno-0-15></a> <span class=c1># Alphabet is only alphanumeric. Compared to the default alphabet used by nanoid,</span>
<a id=__codelineno-0-16 name=__codelineno-0-16></a> <span class=c1># we&#39;ve omitted `-` and `_`.</span>
<a id=__codelineno-0-17 name=__codelineno-0-17></a> <span class=c1># With this alphabet, at 6 chars, the chance of collision is 1 in 3.3M.</span>
<a id=__codelineno-0-18 name=__codelineno-0-18></a> <span class=c1># See https://zelark.github.io/nano-id-cc/</span>
<a id=__codelineno-0-19 name=__codelineno-0-19></a> <span class=k>return</span> <span class=n>generate</span><span class=p>(</span>
<a id=__codelineno-0-20 name=__codelineno-0-20></a> <span class=s2>&quot;0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ&quot;</span><span class=p>,</span>
<a id=__codelineno-0-21 name=__codelineno-0-21></a> <span class=n>size</span><span class=o>=</span><span class=mi>6</span><span class=p>,</span>
<a id=__codelineno-0-22 name=__codelineno-0-22></a> <span class=p>)</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> <div class="doc doc-object doc-function"> <h4 id=django_components.util.misc.get_import_path class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-function"></code> <span class="doc doc-object-name doc-function-name">get_import_path</span> <a href=#django_components.util.misc.get_import_path class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>get_import_path</span><span class=p>(</span><span class=n>cls_or_fn</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Type href=https://docs.python.org/3.12/library/typing.html#typing.Type>Type</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" title=typing.Any href=https://docs.python.org/3.12/library/typing.html#typing.Any>Any</a></span><span class=p>])</span> <span class=o>-&gt;</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span>
</code></pre></div> <div class="doc doc-contents "> <p>Get the full import path for a class or a function, e.g. <code>"path.to.MyClass"</code></p> <details class=quote> <summary>Source code in <code>src/django_components/util/misc.py</code></summary> <div class=highlight><table class=highlighttable><tr><td class=linenos><div class=linenodiv><pre><span></span><span class=normal><a href=#__codelineno-0-45>45</a></span>
<span class=normal><a href=#__codelineno-0-46>46</a></span>
<span class=normal><a href=#__codelineno-0-47>47</a></span>
<span class=normal><a href=#__codelineno-0-48>48</a></span>
<span class=normal><a href=#__codelineno-0-49>49</a></span>
<span class=normal><a href=#__codelineno-0-50>50</a></span>
<span class=normal><a href=#__codelineno-0-51>51</a></span>
<span class=normal><a href=#__codelineno-0-52>52</a></span></pre></div></td><td class=code><div><pre><span></span><code><a id=__codelineno-0-45 name=__codelineno-0-45></a><span class=k>def</span> <span class=nf>get_import_path</span><span class=p>(</span><span class=n>cls_or_fn</span><span class=p>:</span> <span class=n>Type</span><span class=p>[</span><span class=n>Any</span><span class=p>])</span> <span class=o>-&gt;</span> <span class=nb>str</span><span class=p>:</span>
<a id=__codelineno-0-46 name=__codelineno-0-46></a><span class=w> </span><span class=sd>&quot;&quot;&quot;</span>
<a id=__codelineno-0-47 name=__codelineno-0-47></a><span class=sd> Get the full import path for a class or a function, e.g. `&quot;path.to.MyClass&quot;`</span>
<a id=__codelineno-0-48 name=__codelineno-0-48></a><span class=sd> &quot;&quot;&quot;</span>
<a id=__codelineno-0-49 name=__codelineno-0-49></a> <span class=n>module</span> <span class=o>=</span> <span class=n>cls_or_fn</span><span class=o>.</span><span class=vm>__module__</span>
<a id=__codelineno-0-50 name=__codelineno-0-50></a> <span class=k>if</span> <span class=n>module</span> <span class=o>==</span> <span class=s2>&quot;builtins&quot;</span><span class=p>:</span>
<a id=__codelineno-0-51 name=__codelineno-0-51></a> <span class=k>return</span> <span class=n>cls_or_fn</span><span class=o>.</span><span class=vm>__qualname__</span> <span class=c1># avoid outputs like &#39;builtins.str&#39;</span>
<a id=__codelineno-0-52 name=__codelineno-0-52></a> <span class=k>return</span> <span class=n>module</span> <span class=o>+</span> <span class=s2>&quot;.&quot;</span> <span class=o>+</span> <span class=n>cls_or_fn</span><span class=o>.</span><span class=vm>__qualname__</span>
</code></pre></div></td></tr></table></div> </details> </div> </div> </div> </div> </div> <div class="doc doc-object doc-module"> <h3 id=django_components.util.tag_parser class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-module"></code> <span class="doc doc-object-name doc-module-name">tag_parser</span> <a href=#django_components.util.tag_parser class=headerlink title="Permanent link">¤</a></h3> <div class="doc doc-contents "> <p><span class=doc-section-title>Classes:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.util.tag_parser.TagAttr href=#django_components.util.tag_parser.TagAttr>TagAttr</a></code></b> <div class=doc-md-description> </div> </li> </ul> <div class="doc doc-children"> <div class="doc doc-object doc-class"> <h4 id=django_components.util.tag_parser.TagAttr class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-class"></code> <span class="doc doc-object-name doc-class-name">TagAttr</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-dataclass"><code>dataclass</code></small> </span> <a href=#django_components.util.tag_parser.TagAttr class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=nf>TagAttr</span><span class=p>(</span><span class=n>key</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" title=typing.Optional href=https://docs.python.org/3.12/library/typing.html#typing.Optional>Optional</a></span><span class=p>[</span><span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>],</span> <span class=n>value</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/stdtypes.html#str>str</a></span><span class=p>,</span> <span class=n>start_index</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/functions.html#int>int</a></span><span class=p>,</span> <span class=n>quoted</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/functions.html#bool>bool</a></span><span class=p>)</span>
</code></pre></div> <div class="doc doc-contents "> <p><span class=doc-section-title>Attributes:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.util.tag_parser.TagAttr.quoted href=#django_components.util.tag_parser.TagAttr.quoted>quoted</a></code></b> (<code><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/functions.html#bool>bool</a></code>) <div class=doc-md-description> <p>Whether the value is quoted (either with single or double quotes)</p> </div> </li> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.util.tag_parser.TagAttr.start_index href=#django_components.util.tag_parser.TagAttr.start_index>start_index</a></code></b> (<code><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/functions.html#int>int</a></code>) <div class=doc-md-description> <p>Start index of the attribute (include both key and value),</p> </div> </li> </ul> <div class="doc doc-children"> <div class="doc doc-object doc-attribute"> <h5 id=django_components.util.tag_parser.TagAttr.quoted class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">quoted</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.util.tag_parser.TagAttr.quoted class=headerlink title="Permanent link">¤</a></h5> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>quoted</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/functions.html#bool>bool</a></span>
</code></pre></div> <div class="doc doc-contents "> <p>Whether the value is quoted (either with single or double quotes)</p> </div> </div> <div class="doc doc-object doc-attribute"> <h5 id=django_components.util.tag_parser.TagAttr.start_index class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">start_index</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-instance-attribute"><code>instance-attribute</code></small> </span> <a href=#django_components.util.tag_parser.TagAttr.start_index class=headerlink title="Permanent link">¤</a></h5> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>start_index</span><span class=p>:</span> <span class=n><a class="autorefs autorefs-external" href=https://docs.python.org/3.12/library/functions.html#int>int</a></span>
</code></pre></div> <div class="doc doc-contents "> <p>Start index of the attribute (include both key and value), relative to the start of the owner Tag.</p> </div> </div> </div> </div> </div> </div> </div> </div> <div class="doc doc-object doc-module"> <h3 id=django_components.util.types class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-module"></code> <span class="doc doc-object-name doc-module-name">types</span> <a href=#django_components.util.types class=headerlink title="Permanent link">¤</a></h3> <div class="doc doc-contents "> <p><span class=doc-section-title>Classes:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.util.types.EmptyDict href=#django_components.util.types.EmptyDict>EmptyDict</a></code></b> <div class=doc-md-description> <p>TypedDict with no members.</p> </div> </li> </ul> <p><span class=doc-section-title>Attributes:</span></p> <ul> <li class="doc-section-item field-body"> <b><code><a class="autorefs autorefs-internal" title=django_components.util.types.EmptyTuple href=#django_components.util.types.EmptyTuple>EmptyTuple</a></code></b> <div class=doc-md-description> <p>Tuple with no members.</p> </div> </li> </ul> <div class="doc doc-children"> <div class="doc doc-object doc-attribute"> <h4 id=django_components.util.types.EmptyTuple class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-attribute"></code> <span class="doc doc-object-name doc-attribute-name">EmptyTuple</span> <span class="doc doc-labels"> <small class="doc doc-label doc-label-module-attribute"><code>module-attribute</code></small> </span> <a href=#django_components.util.types.EmptyTuple class=headerlink title="Permanent link">¤</a></h4> <div class="doc-signature highlight"><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=n>EmptyTuple</span> <span class=o>=</span> <span class=n><a class="autorefs autorefs-external" title=typing.Tuple href=https://docs.python.org/3.12/library/typing.html#typing.Tuple>Tuple</a></span><span class=p>[]</span>
</code></pre></div> <div class="doc doc-contents "> <p>Tuple with no members.</p> <p>You can use this to define a <a href=../api#django_components.Component>Component</a> that accepts NO positional arguments:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=kn>from</span> <span class=nn>django_components</span> <span class=kn>import</span> <span class=n>Component</span><span class=p>,</span> <span class=n>EmptyTuple</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=k>class</span> <span class=nc>Table</span><span class=p>(</span><span class=n>Component</span><span class=p>(</span><span class=n>EmptyTuple</span><span class=p>,</span> <span class=n>Any</span><span class=p>,</span> <span class=n>Any</span><span class=p>,</span> <span class=n>Any</span><span class=p>,</span> <span class=n>Any</span><span class=p>,</span> <span class=n>Any</span><span class=p>))</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a> <span class=o>...</span>
</code></pre></div> <p>After that, when you call <a href=../api#django_components.Component.render><code>Component.render()</code></a> or <a href=../api#django_components.Component.render_to_response><code>Component.render_to_response()</code></a>, the <code>args</code> parameter will raise type error if <code>args</code> is anything else than an empty tuple.</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>Table</span><span class=o>.</span><span class=n>render</span><span class=p>(</span>
<a id=__codelineno-1-2 name=__codelineno-1-2 href=#__codelineno-1-2></a> <span class=n>args</span><span class=p>:</span> <span class=p>(),</span>
<a id=__codelineno-1-3 name=__codelineno-1-3 href=#__codelineno-1-3></a><span class=p>)</span>
</code></pre></div> <p>Omitting <code>args</code> is also fine:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-2-1 name=__codelineno-2-1 href=#__codelineno-2-1></a><span class=n>Table</span><span class=o>.</span><span class=n>render</span><span class=p>()</span>
</code></pre></div> <p>Other values are not allowed. This will raise an error with MyPy:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-3-1 name=__codelineno-3-1 href=#__codelineno-3-1></a><span class=n>Table</span><span class=o>.</span><span class=n>render</span><span class=p>(</span>
<a id=__codelineno-3-2 name=__codelineno-3-2 href=#__codelineno-3-2></a> <span class=n>args</span><span class=p>:</span> <span class=p>(</span><span class=s2>&quot;one&quot;</span><span class=p>,</span> <span class=mi>2</span><span class=p>,</span> <span class=s2>&quot;three&quot;</span><span class=p>),</span>
<a id=__codelineno-3-3 name=__codelineno-3-3 href=#__codelineno-3-3></a><span class=p>)</span>
</code></pre></div> </div> </div> <div class="doc doc-object doc-class"> <h4 id=django_components.util.types.EmptyDict class="doc doc-heading"> <code class="doc-symbol doc-symbol-heading doc-symbol-class"></code> <span class="doc doc-object-name doc-class-name">EmptyDict</span> <a href=#django_components.util.types.EmptyDict class=headerlink title="Permanent link">¤</a></h4> <div class="doc doc-contents "> <p class="doc doc-class-bases"> Bases: <code><span title=typing_extensions.TypedDict>TypedDict</span></code></p> <p>TypedDict with no members.</p> <p>You can use this to define a <a href=../api#django_components.Component>Component</a> that accepts NO kwargs, or NO slots, or returns NO data from <a href=../api#django_components.Component.get_context_data><code>Component.get_context_data()</code></a> / <a href=../api#django_components.Component.get_js_data><code>Component.get_js_data()</code></a> / <a href=../api#django_components.Component.get_css_data><code>Component.get_css_data()</code></a>:</p> <p>Accepts NO kwargs:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a><span class=kn>from</span> <span class=nn>django_components</span> <span class=kn>import</span> <span class=n>Component</span><span class=p>,</span> <span class=n>EmptyDict</span>
<a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a>
<a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=k>class</span> <span class=nc>Table</span><span class=p>(</span><span class=n>Component</span><span class=p>(</span><span class=n>Any</span><span class=p>,</span> <span class=n>EmptyDict</span><span class=p>,</span> <span class=n>Any</span><span class=p>,</span> <span class=n>Any</span><span class=p>,</span> <span class=n>Any</span><span class=p>,</span> <span class=n>Any</span><span class=p>))</span>
<a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a> <span class=o>...</span>
</code></pre></div> <p>Accepts NO slots:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-1-1 name=__codelineno-1-1 href=#__codelineno-1-1></a><span class=kn>from</span> <span class=nn>django_components</span> <span class=kn>import</span> <span class=n>Component</span><span class=p>,</span> <span class=n>EmptyDict</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=nc>Table</span><span class=p>(</span><span class=n>Component</span><span class=p>(</span><span class=n>Any</span><span class=p>,</span> <span class=n>Any</span><span class=p>,</span> <span class=n>EmptyDict</span><span class=p>,</span> <span class=n>Any</span><span class=p>,</span> <span class=n>Any</span><span class=p>,</span> <span class=n>Any</span><span class=p>))</span>
<a id=__codelineno-1-4 name=__codelineno-1-4 href=#__codelineno-1-4></a> <span class=o>...</span>
</code></pre></div> <p>Returns NO data from <code>get_context_data()</code>:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-2-1 name=__codelineno-2-1 href=#__codelineno-2-1></a><span class=kn>from</span> <span class=nn>django_components</span> <span class=kn>import</span> <span class=n>Component</span><span class=p>,</span> <span class=n>EmptyDict</span>
<a id=__codelineno-2-2 name=__codelineno-2-2 href=#__codelineno-2-2></a>
<a id=__codelineno-2-3 name=__codelineno-2-3 href=#__codelineno-2-3></a><span class=k>class</span> <span class=nc>Table</span><span class=p>(</span><span class=n>Component</span><span class=p>(</span><span class=n>Any</span><span class=p>,</span> <span class=n>Any</span><span class=p>,</span> <span class=n>Any</span><span class=p>,</span> <span class=n>EmptyDict</span><span class=p>,</span> <span class=n>Any</span><span class=p>,</span> <span class=n>Any</span><span class=p>))</span>
<a id=__codelineno-2-4 name=__codelineno-2-4 href=#__codelineno-2-4></a> <span class=o>...</span>
</code></pre></div> <p>Going back to the example with NO kwargs, when you then call <a href=../api#django_components.Component.render><code>Component.render()</code></a> or <a href=../api#django_components.Component.render_to_response><code>Component.render_to_response()</code></a>, the <code>kwargs</code> parameter will raise type error if <code>kwargs</code> is anything else than an empty dict.</p> <div class=highlight><pre><span></span><code><a id=__codelineno-3-1 name=__codelineno-3-1 href=#__codelineno-3-1></a><span class=n>Table</span><span class=o>.</span><span class=n>render</span><span class=p>(</span>
<a id=__codelineno-3-2 name=__codelineno-3-2 href=#__codelineno-3-2></a> <span class=n>kwargs</span><span class=p>:</span> <span class=p>{},</span>
<a id=__codelineno-3-3 name=__codelineno-3-3 href=#__codelineno-3-3></a><span class=p>)</span>
</code></pre></div> <p>Omitting <code>kwargs</code> is also fine:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-4-1 name=__codelineno-4-1 href=#__codelineno-4-1></a><span class=n>Table</span><span class=o>.</span><span class=n>render</span><span class=p>()</span>
</code></pre></div> <p>Other values are not allowed. This will raise an error with MyPy:</p> <div class=highlight><pre><span></span><code><a id=__codelineno-5-1 name=__codelineno-5-1 href=#__codelineno-5-1></a><span class=n>Table</span><span class=o>.</span><span class=n>render</span><span class=p>(</span>
<a id=__codelineno-5-2 name=__codelineno-5-2 href=#__codelineno-5-2></a> <span class=n>kwargs</span><span class=p>:</span> <span class=p>{</span>
<a id=__codelineno-5-3 name=__codelineno-5-3 href=#__codelineno-5-3></a> <span class=s2>&quot;one&quot;</span><span class=p>:</span> <span class=mi>2</span><span class=p>,</span>
<a id=__codelineno-5-4 name=__codelineno-5-4 href=#__codelineno-5-4></a> <span class=s2>&quot;three&quot;</span><span class=p>:</span> <span class=mi>4</span><span class=p>,</span>
<a id=__codelineno-5-5 name=__codelineno-5-5 href=#__codelineno-5-5></a> <span class=p>},</span>
<a id=__codelineno-5-6 name=__codelineno-5-6 href=#__codelineno-5-6></a><span class=p>)</span>
</code></pre></div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </div> </article> </div> <script>var tabs=__md_get("__tabs");if(Array.isArray(tabs))e:for(var set of document.querySelectorAll(".tabbed-set")){var labels=set.querySelector(".tabbed-labels");for(var tab of tabs)for(var label of labels.getElementsByTagName("label"))if(label.innerText.trim()===tab){var input=document.getElementById(label.htmlFor);input.checked=!0;continue e}}</script> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8z"/></svg> Back to top </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=Footer> <a href=../../license/ class="md-footer__link md-footer__link--prev" aria-label="Previous: License"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> Previous </span> <div class=md-ellipsis> License </div> </div> </a> <a href=app_settings/ class="md-footer__link md-footer__link--next" aria-label='Next: <code class="doc-symbol doc-symbol-nav doc-symbol-module"></code> app_settings'> <div class=md-footer__title> <span class=md-footer__direction> Next </span> <div class=md-ellipsis> <code class="doc-symbol doc-symbol-nav doc-symbol-module"></code> app_settings </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://github.com/EmilStenstrom/django-components target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8M97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg> </a> <a href=https://pypi.org/project/django-components/ target=_blank rel=noopener title=pypi.org class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M439.8 200.5c-7.7-30.9-22.3-54.2-53.4-54.2h-40.1v47.4c0 36.8-31.2 67.8-66.8 67.8H172.7c-29.2 0-53.4 25-53.4 54.3v101.8c0 29 25.2 46 53.4 54.3 33.8 9.9 66.3 11.7 106.8 0 26.9-7.8 53.4-23.5 53.4-54.3v-40.7H226.2v-13.6h160.2c31.1 0 42.6-21.7 53.4-54.2 11.2-33.5 10.7-65.7 0-108.6M286.2 404c11.1 0 20.1 9.1 20.1 20.3 0 11.3-9 20.4-20.1 20.4-11 0-20.1-9.2-20.1-20.4.1-11.3 9.1-20.3 20.1-20.3M167.8 248.1h106.8c29.7 0 53.4-24.5 53.4-54.3V91.9c0-29-24.4-50.7-53.4-55.6-35.8-5.9-74.7-5.6-106.8.1-45.2 8-53.4 24.7-53.4 55.6v40.7h106.9v13.6h-147c-31.1 0-58.3 18.7-66.8 54.2-9.8 40.7-10.2 66.1 0 108.6 7.6 31.6 25.7 54.2 56.8 54.2H101v-48.8c0-35.3 30.5-66.4 66.8-66.4m-6.7-142.6c-11.1 0-20.1-9.1-20.1-20.3.1-11.3 9-20.4 20.1-20.4 11 0 20.1 9.2 20.1 20.4s-9 20.3-20.1 20.3"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <div class=md-progress data-md-component=progress role=progressbar></div> <script id=__config type=application/json>{"base": "../..", "features": ["content.action.edit", "content.action.view", "content.code.annotate", "content.code.copy", "content.tabs.link", "navigation.expand", "navigation.footer", "navigation.instant", "navigation.instant.progress", "navigation.indexes", "navigation.sections", "navigation.tracking", "navigation.top", "search.highlight", "search.share", "search.suggest", "toc.follow"], "search": "../../assets/javascripts/workers/search.6ce7567c.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}, "version": {"alias": true, "default": ["dev"], "provider": "mike"}}</script> <script src=../../assets/javascripts/bundle.83f73b43.min.js></script> <script src=../../assets/_markdown_exec_pyodide.js></script> <script src=../../js/timeago.min.js></script> <script src=../../js/timeago_mkdocs_material.js></script> </body> </html>