Version: 0.1.1
A simple but flexible layout tool for composing and transforming data for structured template components.
Inspired by crispy-forms Layout, but without the forms.
django-nifty-layout is free software distributed under the MIT License.
-
Install the
django-nifty-layoutpackage from PyPI$ pip install django-nifty-layout
-
Go grab a drink, you are all done!
layout.py
from django.utils.formats import date_format
from nifty_layout.components import (
DictCompositeNode as Dct,
FieldNode as Fld,
Seq,
)
# ----- Safe Date Formatter ----- #
date_formatter = lambda val: None if val is None else date_format(val, SHORT_DATE_FORMAT)
layout = Dct(
dict(
overview=Seq(
"title",
Fld("date", formatter=date_formatter),
report_type",
"location",
labeller="Overview",
),
contacts=Seq(
Dct(dict(
name="contact_name",
contact_methods=Seq("contact_email"),
), labeller="Primary Contact"
),
Dct(dict(
name="reported_by_name",
contact_methods=Seq("reported_by_phone_num", "reported_by_email"),
), labeller="Reported By"
),
labeller="Contacts",
),
...
)
)
views.py
def report_view(request, pk):
...
obj = Report.objects.get(pk=pk)
...
return render(request, "template.html", dict(report=layout.bind(obj)))
template.html
...
<div class="report>
<h2>report.overview.label</h2>
{% for node in report.overview %}
<div class="row">
<div class="col label">{{ node.label }}</div>
<div class="col value">{{ node.value|default:"" }}</div>
{% endfor %}
</div>
{% endfor %}
<div class="row">
{% for contact in report.contacts %}
<div class="col">
{% include "contact_card.html" %}
</div>
{% endfor %}
</div>
...
</div>
pip install -e git+https://github.com/powderflask/django-nifty-layout.git#egg=django-nifty-layoutinv demo.install** coming soon **python demo_app/manage.py runserver
See demo_app/README
This project would be impossible to maintain without the help of our generous contributors
Without django and the django dev team, the universe would have fewer rainbows and ponies.
This package was originally created with cookiecutter
and the cookiecutter-powder-pypackage project template.
Install invoke, pip-tools, tox for all the CLI goodness
pip install invoke pip-tools toxInitialise the development environment using the invoke task
inv tox.venvOr create it with tox directly
tox d -e dev .venvOr build and install the dev requirements with pip
inv deps.compile-dev
pip install -r requirements_dev.txtpytestor
tox ror run tox environments in parallel using
tox p$ isort
$ black
$ flake8- Semantic Versioning
$ bumpver show
- invoke
$ invoke -l
- GitHub Actions (see .github/workflows)
- GitHub Webhooks (see settings/hooks)