- π Complete documentation: https://dj-angles.adamghill.com/
- π¦ Package: https://pypi.org/project/dj-angles/
- Use HTML-like elements in Django templates, e.g.
<dj-some-partial />instead of{% include 'some-partial.html' %} - Can be sprinkled in as needed to enhance existing Django functionality
- Since it looks like HTML, syntax highlighting mostly "just works"
- Wraps components in a custom HTML element for easier debugging and targeted CSS styling
- Support for the Shadow DOM to encapsulate component styles
- Error boundaries to catch and display template errors
- Lightweight way to submit forms via AJAX and swap in the resulting HTML
- Support for Django 6.0 template partials
- django-compressor
- django-components
- django-viewcomponent
- django-bird
- django-template-partials
call: call functions in a templatemodel: call a model in a templatetemplate: lightweight inline templateview: render a view in a template
dateformat: use Pythonstrftimeformat for formatting dates as a string
<!-- base.html --> <dj-block name="content"> <!-- {% block content %} --> </dj-block> <!-- {% endblock content %} --><!-- template-tags.html --> <dj-extends parent="base.html" /> <!-- {% extends "base.html" %} --> <dj-block name="content"> <!-- {% block content %} --> <!-- components --> <dj-some-partial /> <!-- {% include "test-partial.html" %} --> <dj-include template="test-partial.html" /> <!-- {% include "test-partial.html" %} --> <dj-verbatim> <!-- {% verbatim %} --> This is verbatim: {% include %} </dj-verbatim> <!-- {% endverbatim %} --> <dj-comment> <!-- {% comment %} --> this is a comment </dj-comment> <!-- {% endcomment %} --> <dj-autoescape-on> <!-- {% autoescape-on %} --> This is escaped </dj-autoescape-on> <!-- {% endautoescape %} --> <dj-autoescape-off> <!-- {% autoescape off %} --> This is not escaped </dj-autoescape-off> <!-- {% endautoescape %} --> <dj-csrf /> <!-- {% csrf_token %} --> <dj-debug /> <!-- {% debug %} --> </dj-block> <!-- {% endblock content %} --><!-- static-helpers.html --> <dj-image src="img/django.jpg" /> <!-- <img src="{% static 'img/django.jpg' %}" /> --> <dj-css href="css/styles.css" /> <!-- <link href="{% static 'css/styles.css' %}" rel="stylesheet" /> --><!-- call-code-from-template.html --> <dj-call code="slugify('Hello Goodbye')" as="variable_name" /> <!-- {% call slugify("Hello Goodbye") as variable_name %} --> <dj-model code="Book.objects.filter(id=1)" as="book" /> <!-- {% model Book.objects.filter(id=1) as book %} --> <dj-view name="some-view" /> <!-- {% view "some-view" %} --><!-- django-compressor.html --> <dj-compress css> <!-- {% compress css %} --> <style>.critical { color: red; }</style> </dj-compress> <!-- {% endcompress %} --><!-- third-party-component-libraries.html --> <!-- django-components --> <dj-component name="button">Click me</dj-component> <!-- {% component "button" %}Click me{% endcomponent %} --> <!-- django-viewcomponent --> <dj-viewcomponent name="button">Click me</dj-viewcomponent> <!-- {% viewcomponent "button" %}Click me{% endviewcomponent %} --> <!-- django-bird --> <dj-bird template="button" class="btn">Click me</dj-bird> <!-- {% bird "button" class="btn" %}Click me{% endbird %} --> <!-- django-template-partials --> <dj-partial name="sidebar"> <!-- {% partialdef sidebar %} --> <p>Sidebar content</p> </dj-partial> <!-- {% endpartialdef %} --> <dj-partial name="sidebar" /> <!-- {% partial sidebar %} --><!-- inline-expressions.html --> {{ request.user.username or request.user.email }} <!-- {% if request.user.username %}{{ request.user.username }}{% else %}{{ request.user.email }}{% endif %} --> {{ request.user.username if request.user.is_authenticated else "Unknown" }} <!-- {% if request.user.is_authenticated %}{{ request.user.username }}{% else %}Unknown{% endif %} --><!-- error-boundaries.html --> <dj-block name="content" error-boundary> <dj-include template="missing-template.html" /> </dj-block> <dj-error-boundary> <dj-include template="missing-template.html" /> </dj-error-boundary><!-- ajax-form-submission.html --> <dj-form action="/submit" method="POST" swap="outerHTML" ajax csrf> <!-- <ajax-form><form action="/submit" method="POST">{% csrf_token %} --> <button type="submit">Submit</button> </dj-form><!-- </form></ajax-form> --><!-- conditional-attributes.html --> <div dj-if="True"> <!-- {% if True %}<div> --> If </div> <div dj-elif="False"> <!-- {% elif False %}<div> --> Elif </div> <div dj-else> <!-- {% else %}<div> --> Else </div> <!-- </div>{% endif %} -->To learn how to install and use dj-angles see the complete documentation at https://dj-angles.adamghill.com/.
Emmanuelle Delescolle π» | Jarkko Saltiola π |