django-bootstrap5 23.4__tar.gz → 24.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- django_bootstrap5-24.2/.editorconfig +23 -0
- django_bootstrap5-24.2/.readthedocs.yaml +19 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/CHANGELOG.md +15 -0
- django_bootstrap5-24.2/MANIFEST.in +17 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/Makefile +8 -5
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/PKG-INFO +3 -4
- django_bootstrap5-24.2/docs/changelog.rst +2 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/docs/conf.py +1 -1
- django_bootstrap5-24.2/docs/contributing.rst +2 -0
- django_bootstrap5-24.2/docs/migrate.rst +2 -0
- django_bootstrap5-24.2/docs/requirements.txt +3 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/docs/settings.rst +4 -1
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/example/settings.py +7 -1
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/pyproject.toml +12 -11
- django_bootstrap5-24.2/requirements-dev.txt +8 -0
- django_bootstrap5-24.2/requirements-test.txt +5 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/src/django_bootstrap5/core.py +5 -4
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/src/django_bootstrap5/renderers.py +4 -2
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/src/django_bootstrap5/templates/django_bootstrap5/bootstrap5.html +6 -16
- django_bootstrap5-24.2/src/django_bootstrap5/templates/django_bootstrap5/widgets/radio_select_button_group.html +16 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/src/django_bootstrap5/templatetags/django_bootstrap5.py +18 -4
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/src/django_bootstrap5.egg-info/PKG-INFO +3 -4
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/src/django_bootstrap5.egg-info/SOURCES.txt +4 -5
- django_bootstrap5-24.2/src/django_bootstrap5.egg-info/requires.txt +1 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/tests/test_bootstrap_css_and_js_tags.py +10 -3
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/tests/test_bootstrap_field_datetime.py +15 -15
- django_bootstrap5-24.2/tests/test_bootstrap_field_radio_select_button_group.py +107 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/tests/test_templates.py +13 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/tox.ini +4 -8
- django-bootstrap5-23.4/.github/dependabot.yml +0 -17
- django-bootstrap5-23.4/.github/workflows/dependabot-auto-approve-and-merge.yml +0 -35
- django-bootstrap5-23.4/.github/workflows/test.yml +0 -101
- django-bootstrap5-23.4/.gitignore +0 -65
- django-bootstrap5-23.4/.readthedocs.yml +0 -11
- django-bootstrap5-23.4/docs/changelog.rst +0 -1
- django-bootstrap5-23.4/docs/contributing.rst +0 -1
- django-bootstrap5-23.4/docs/migrate.rst +0 -1
- django-bootstrap5-23.4/docs/requirements.txt +0 -3
- django-bootstrap5-23.4/requirements-dev.txt +0 -6
- django-bootstrap5-23.4/requirements-test.txt +0 -5
- django-bootstrap5-23.4/src/django_bootstrap5/templates/django_bootstrap5/widgets/radio_select_button_group.html +0 -8
- django-bootstrap5-23.4/src/django_bootstrap5.egg-info/requires.txt +0 -1
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/AUTHORS +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/CONTRIBUTING.md +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/LICENSE +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/MIGRATE.md +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/README.md +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/docs/example_template.rst +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/docs/forms.rst +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/docs/index.rst +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/docs/installation.rst +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/docs/quickstart.rst +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/docs/templates.rst +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/docs/templatetags.rst +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/docs/widgets.rst +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/example/__init__.py +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/example/app/__init__.py +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/example/app/forms.py +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/example/app/views.py +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/example/manage.py +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/example/templates/app/base.html +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/example/templates/app/bootstrap.html +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/example/templates/app/form.html +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/example/templates/app/form_by_field.html +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/example/templates/app/form_horizontal.html +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/example/templates/app/form_inline.html +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/example/templates/app/form_with_files.html +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/example/templates/app/formset.html +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/example/templates/app/home.html +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/example/templates/app/misc.html +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/example/templates/app/pagination.html +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/example/urls.py +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/manage.py +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/setup.cfg +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/src/django_bootstrap5/__about__.py +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/src/django_bootstrap5/__init__.py +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/src/django_bootstrap5/components.py +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/src/django_bootstrap5/css.py +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/src/django_bootstrap5/forms.py +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/src/django_bootstrap5/html.py +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/src/django_bootstrap5/size.py +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/src/django_bootstrap5/templates/django_bootstrap5/field_errors.html +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/src/django_bootstrap5/templates/django_bootstrap5/field_help_text.html +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/src/django_bootstrap5/templates/django_bootstrap5/form_errors.html +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/src/django_bootstrap5/templates/django_bootstrap5/messages.html +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/src/django_bootstrap5/templates/django_bootstrap5/pagination.html +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/src/django_bootstrap5/templates/django_bootstrap5/widgets/clearable_file_input.html +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/src/django_bootstrap5/templates/django_bootstrap5/widgets/radio_select.html +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/src/django_bootstrap5/templatetags/__init__.py +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/src/django_bootstrap5/text.py +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/src/django_bootstrap5/utils.py +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/src/django_bootstrap5/widgets.py +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/src/django_bootstrap5.egg-info/dependency_links.txt +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/src/django_bootstrap5.egg-info/top_level.txt +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/tests/__init__.py +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/tests/app/__init__.py +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/tests/app/settings.py +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/tests/app/urls.py +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/tests/base.py +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/tests/image.py +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/tests/test_bootstrap_alert.py +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/tests/test_bootstrap_button.py +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/tests/test_bootstrap_field.py +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/tests/test_bootstrap_field_input_checkbox.py +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/tests/test_bootstrap_field_input_color.py +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/tests/test_bootstrap_field_input_file.py +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/tests/test_bootstrap_field_input_range.py +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/tests/test_bootstrap_field_input_text.py +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/tests/test_bootstrap_field_parameters.py +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/tests/test_bootstrap_field_radio_select.py +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/tests/test_bootstrap_field_select.py +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/tests/test_bootstrap_field_textarea.py +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/tests/test_bootstrap_form.py +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/tests/test_bootstrap_formset.py +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/tests/test_bootstrap_label.py +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/tests/test_bootstrap_messages.py +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/tests/test_bootstrap_pagination.py +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/tests/test_components.py +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/tests/test_css.py +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/tests/test_html.py +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/tests/test_settings.py +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/tests/test_size.py +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/tests/test_text.py +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/tests/test_urls.py +0 -0
- {django-bootstrap5-23.4 → django_bootstrap5-24.2}/tests/test_version.py +0 -0
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
# https://editorconfig.org/
|
|
2
|
+
|
|
3
|
+
root = true
|
|
4
|
+
|
|
5
|
+
[*]
|
|
6
|
+
indent_style = space
|
|
7
|
+
indent_size = 4
|
|
8
|
+
insert_final_newline = true
|
|
9
|
+
trim_trailing_whitespace = true
|
|
10
|
+
end_of_line = lf
|
|
11
|
+
charset = utf-8
|
|
12
|
+
|
|
13
|
+
[*.py]
|
|
14
|
+
max_line_length = 88
|
|
15
|
+
|
|
16
|
+
[*.toml]
|
|
17
|
+
indent_size = 2
|
|
18
|
+
|
|
19
|
+
[docs/**.rst]
|
|
20
|
+
max_line_length = 79
|
|
21
|
+
|
|
22
|
+
[*.{yaml,yml}]
|
|
23
|
+
indent_size = 2
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# .readthedocs.yaml
|
|
2
|
+
# Read the Docs configuration file
|
|
3
|
+
# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
|
|
4
|
+
|
|
5
|
+
version: 2
|
|
6
|
+
|
|
7
|
+
build:
|
|
8
|
+
os: ubuntu-22.04
|
|
9
|
+
tools:
|
|
10
|
+
python: "3.11"
|
|
11
|
+
|
|
12
|
+
sphinx:
|
|
13
|
+
configuration: docs/conf.py
|
|
14
|
+
|
|
15
|
+
python:
|
|
16
|
+
install:
|
|
17
|
+
- requirements: docs/requirements.txt
|
|
18
|
+
- method: pip
|
|
19
|
+
path: .
|
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 24.2 (2024-04-23)
|
|
4
|
+
|
|
5
|
+
- Add .editorconfig (#598).
|
|
6
|
+
- Remove support for Django 4.1 (EOL) (#597).
|
|
7
|
+
- Add support for color mode (#593).
|
|
8
|
+
- Change bootstrap_setting from filter to tag (#595).
|
|
9
|
+
- Remove support for Python 3.7 (EOL) (#588).
|
|
10
|
+
- Remove support for Django 3.2 (EOL) (#583).
|
|
11
|
+
- Update Bootstrap to 5.3.3 (#584).
|
|
12
|
+
- Fix Read the Docs (#585, #587).
|
|
13
|
+
|
|
14
|
+
## 24.1 (2024-04-12)
|
|
15
|
+
|
|
16
|
+
- Fix RadioSelectButtonGroup rendering and add 'disabled' attribute to radio button group template (#447).
|
|
17
|
+
|
|
3
18
|
## 23.4 (2023-12-28)
|
|
4
19
|
|
|
5
20
|
- Use ruff instead of black for formatting (#536).
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
include LICENSE
|
|
2
|
+
include MANIFEST.in
|
|
3
|
+
include .editorconfig
|
|
4
|
+
include *.yaml
|
|
5
|
+
include pyproject.toml
|
|
6
|
+
include *.md
|
|
7
|
+
include *.py
|
|
8
|
+
include *.txt
|
|
9
|
+
include Makefile
|
|
10
|
+
include tox.ini
|
|
11
|
+
include docs/*.rst docs/*.txt docs/*.py docs/Makefile
|
|
12
|
+
graft src
|
|
13
|
+
graft tests
|
|
14
|
+
graft example
|
|
15
|
+
prune docs/_build
|
|
16
|
+
exclude example/db.sqlite3
|
|
17
|
+
global-exclude *.py[cod]
|
|
@@ -12,11 +12,11 @@ tests:
|
|
|
12
12
|
.PHONY: reformat
|
|
13
13
|
reformat:
|
|
14
14
|
ruff format .
|
|
15
|
-
ruff --fix
|
|
15
|
+
ruff check . --fix
|
|
16
16
|
|
|
17
17
|
.PHONY: lint
|
|
18
18
|
lint:
|
|
19
|
-
ruff .
|
|
19
|
+
ruff check .
|
|
20
20
|
|
|
21
21
|
.PHONY: docs
|
|
22
22
|
docs: clean
|
|
@@ -45,12 +45,15 @@ else
|
|
|
45
45
|
endif
|
|
46
46
|
|
|
47
47
|
.PHONY: build
|
|
48
|
-
build:
|
|
48
|
+
build:
|
|
49
49
|
python -m build
|
|
50
|
+
twine check dist/*
|
|
51
|
+
check-manifest
|
|
52
|
+
pyroma .
|
|
53
|
+
check-wheel-contents dist
|
|
50
54
|
|
|
51
55
|
.PHONY: publish
|
|
52
|
-
publish: porcelain branch build
|
|
53
|
-
twine check dist/*
|
|
56
|
+
publish: porcelain branch docs build
|
|
54
57
|
twine upload dist/*
|
|
55
58
|
git tag -a v${VERSION} -m "Release ${VERSION}"
|
|
56
59
|
git push origin --tags
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: django-bootstrap5
|
|
3
|
-
Version:
|
|
3
|
+
Version: 24.2
|
|
4
4
|
Summary: Bootstrap 5 for Django
|
|
5
5
|
Author-email: Dylan Verheul <dylan@dyve.net>
|
|
6
6
|
License: BSD 3-Clause License
|
|
@@ -37,11 +37,10 @@ Project-URL: Documentation, https://django-bootstrap5.readthedocs.io/
|
|
|
37
37
|
Project-URL: Homepage, https://github.com/zostera/django-bootstrap5
|
|
38
38
|
Project-URL: Issues, https://github.com/zostera/django-bootstrap5/issues
|
|
39
39
|
Project-URL: Source, https://github.com/zostera/django-bootstrap5
|
|
40
|
+
Keywords: django,bootstrap,bootstrap5
|
|
40
41
|
Classifier: Development Status :: 5 - Production/Stable
|
|
41
42
|
Classifier: Environment :: Web Environment
|
|
42
43
|
Classifier: Framework :: Django
|
|
43
|
-
Classifier: Framework :: Django :: 3.2
|
|
44
|
-
Classifier: Framework :: Django :: 4.1
|
|
45
44
|
Classifier: Framework :: Django :: 4.2
|
|
46
45
|
Classifier: Framework :: Django :: 5.0
|
|
47
46
|
Classifier: Intended Audience :: Developers
|
|
@@ -59,7 +58,7 @@ Requires-Python: >=3.8
|
|
|
59
58
|
Description-Content-Type: text/markdown
|
|
60
59
|
License-File: LICENSE
|
|
61
60
|
License-File: AUTHORS
|
|
62
|
-
Requires-Dist: Django>=
|
|
61
|
+
Requires-Dist: Django>=4.2
|
|
63
62
|
|
|
64
63
|
# django-bootstrap5
|
|
65
64
|
|
|
@@ -16,7 +16,7 @@ The ``BOOTSTRAP5`` dict variable contains these settings and defaults:
|
|
|
16
16
|
|
|
17
17
|
# The complete URL to the Bootstrap CSS file.
|
|
18
18
|
# Note that a URL can be either a string
|
|
19
|
-
# ("https://
|
|
19
|
+
# ("https://cdn.jsdelivr.net/npm/bootstrap@5.2.0/dist/css/bootstrap.min.css"),
|
|
20
20
|
# or a dict with keys `url`, `integrity` and `crossorigin` like the default value below.
|
|
21
21
|
"css_url": {
|
|
22
22
|
"url": "https://cdn.jsdelivr.net/npm/bootstrap@5.2.0/dist/css/bootstrap.min.css",
|
|
@@ -34,6 +34,9 @@ The ``BOOTSTRAP5`` dict variable contains these settings and defaults:
|
|
|
34
34
|
# The complete URL to the Bootstrap CSS theme file (None means no theme).
|
|
35
35
|
"theme_url": None,
|
|
36
36
|
|
|
37
|
+
# Color mode (None means do not set color mode).
|
|
38
|
+
"color_mode": None,
|
|
39
|
+
|
|
37
40
|
# Put JavaScript in the HEAD section of the HTML document (only relevant if you use bootstrap5.html).
|
|
38
41
|
'javascript_in_head': False,
|
|
39
42
|
|
|
@@ -141,7 +141,13 @@ LOGGING = {
|
|
|
141
141
|
"class": "django.utils.log.AdminEmailHandler",
|
|
142
142
|
}
|
|
143
143
|
},
|
|
144
|
-
"loggers": {
|
|
144
|
+
"loggers": {
|
|
145
|
+
"django.request": {
|
|
146
|
+
"handlers": ["mail_admins"],
|
|
147
|
+
"level": "ERROR",
|
|
148
|
+
"propagate": True,
|
|
149
|
+
}
|
|
150
|
+
},
|
|
145
151
|
}
|
|
146
152
|
|
|
147
153
|
# Settings for django-bootstrap5
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[build-system]
|
|
2
2
|
build-backend = "setuptools.build_meta"
|
|
3
|
-
requires = ["setuptools>=64"
|
|
3
|
+
requires = ["setuptools>=64"]
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
authors = [
|
|
@@ -10,8 +10,6 @@ classifiers = [
|
|
|
10
10
|
"Development Status :: 5 - Production/Stable",
|
|
11
11
|
"Environment :: Web Environment",
|
|
12
12
|
"Framework :: Django",
|
|
13
|
-
"Framework :: Django :: 3.2",
|
|
14
|
-
"Framework :: Django :: 4.1",
|
|
15
13
|
"Framework :: Django :: 4.2",
|
|
16
14
|
"Framework :: Django :: 5.0",
|
|
17
15
|
"Intended Audience :: Developers",
|
|
@@ -26,13 +24,14 @@ classifiers = [
|
|
|
26
24
|
"Topic :: Software Development :: Libraries",
|
|
27
25
|
"Topic :: Utilities",
|
|
28
26
|
]
|
|
29
|
-
dependencies = ["Django>=
|
|
27
|
+
dependencies = ["Django>=4.2"]
|
|
30
28
|
description = "Bootstrap 5 for Django"
|
|
29
|
+
keywords = ["django", "bootstrap", "bootstrap5"]
|
|
31
30
|
license = {file = "LICENSE"}
|
|
32
31
|
name = "django-bootstrap5"
|
|
33
32
|
readme = "README.md"
|
|
34
33
|
requires-python = ">=3.8"
|
|
35
|
-
version = "
|
|
34
|
+
version = "24.2"
|
|
36
35
|
|
|
37
36
|
[project.urls]
|
|
38
37
|
Changelog = "https://github.com/zostera/django-bootstrap5/blob/main/CHANGELOG.md"
|
|
@@ -43,6 +42,11 @@ Source = "https://github.com/zostera/django-bootstrap5"
|
|
|
43
42
|
|
|
44
43
|
[tool.ruff]
|
|
45
44
|
fix = false
|
|
45
|
+
line-length = 120
|
|
46
|
+
src = ["src"]
|
|
47
|
+
target-version = "py38"
|
|
48
|
+
|
|
49
|
+
[tool.ruff.lint]
|
|
46
50
|
fixable = [
|
|
47
51
|
"I001", # isort (sorting)
|
|
48
52
|
"F", # flake8
|
|
@@ -55,7 +59,6 @@ ignore = [
|
|
|
55
59
|
"D212", # D212: Multi-line docstring summary should start at the first line
|
|
56
60
|
"D301", # D301: Use r”“” if any backslashes in a docstring (unclear how else to handle backslashes in docstrings)
|
|
57
61
|
]
|
|
58
|
-
line-length = 120
|
|
59
62
|
select = [
|
|
60
63
|
"D", # pydocstyle
|
|
61
64
|
"E", # pycodestyle
|
|
@@ -63,14 +66,12 @@ select = [
|
|
|
63
66
|
"I", # isort
|
|
64
67
|
"UP", # pyupgrade
|
|
65
68
|
]
|
|
66
|
-
src = ["src"]
|
|
67
|
-
target-version = "py38"
|
|
68
69
|
unfixable = [
|
|
69
70
|
"F8", # names in flake8, such as defined but unused variables
|
|
70
71
|
]
|
|
71
72
|
|
|
72
|
-
[tool.ruff.isort]
|
|
73
|
-
known-first-party = ["
|
|
73
|
+
[tool.ruff.lint.isort]
|
|
74
|
+
known-first-party = ["django_bootstrap5", "app"]
|
|
74
75
|
known-third-party = ["django"]
|
|
75
76
|
|
|
76
77
|
[tool.coverage.run]
|
|
@@ -78,7 +79,7 @@ branch = true
|
|
|
78
79
|
source = ["src", "tests"]
|
|
79
80
|
|
|
80
81
|
[tool.coverage.paths]
|
|
81
|
-
package = ["src/
|
|
82
|
+
package = ["src/django_bootstrap5", "*/django_bootstrap5/src/django_bootstrap5"]
|
|
82
83
|
|
|
83
84
|
[tool.coverage.report]
|
|
84
85
|
show_missing = true
|
|
@@ -5,16 +5,17 @@ from django.conf import settings
|
|
|
5
5
|
BOOTSTRAP5 = {"foo": "bar"}
|
|
6
6
|
BOOTSTRAP5_DEFAULTS = {
|
|
7
7
|
"css_url": {
|
|
8
|
-
"url": "https://cdn.jsdelivr.net/npm/bootstrap@5.
|
|
9
|
-
"integrity": "sha384-
|
|
8
|
+
"url": "https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css",
|
|
9
|
+
"integrity": "sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH",
|
|
10
10
|
"crossorigin": "anonymous",
|
|
11
11
|
},
|
|
12
12
|
"javascript_url": {
|
|
13
|
-
"url": "https://cdn.jsdelivr.net/npm/bootstrap@5.
|
|
14
|
-
"integrity": "sha384-
|
|
13
|
+
"url": "https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js",
|
|
14
|
+
"integrity": "sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz",
|
|
15
15
|
"crossorigin": "anonymous",
|
|
16
16
|
},
|
|
17
17
|
"theme_url": None,
|
|
18
|
+
"color_mode": None,
|
|
18
19
|
"javascript_in_head": False,
|
|
19
20
|
"wrapper_class": "mb-3",
|
|
20
21
|
"inline_wrapper_class": "",
|
|
@@ -19,7 +19,7 @@ from .forms import render_field, render_form, render_label
|
|
|
19
19
|
from .size import DEFAULT_SIZE, SIZE_MD, get_size_class, parse_size
|
|
20
20
|
from .text import text_value
|
|
21
21
|
from .utils import render_template_file
|
|
22
|
-
from .widgets import ReadOnlyPasswordHashWidget, is_widget_with_placeholder
|
|
22
|
+
from .widgets import RadioSelectButtonGroup, ReadOnlyPasswordHashWidget, is_widget_with_placeholder
|
|
23
23
|
|
|
24
24
|
|
|
25
25
|
class BaseRenderer:
|
|
@@ -347,7 +347,9 @@ class FieldRenderer(BaseRenderer):
|
|
|
347
347
|
for widget in widgets:
|
|
348
348
|
self.add_widget_class_attrs(widget)
|
|
349
349
|
self.add_placeholder_attrs(widget)
|
|
350
|
-
if isinstance(widget, (RadioSelect, CheckboxSelectMultiple))
|
|
350
|
+
if isinstance(widget, (RadioSelect, CheckboxSelectMultiple)) and not isinstance(
|
|
351
|
+
widget, RadioSelectButtonGroup
|
|
352
|
+
):
|
|
351
353
|
widget.template_name = "django_bootstrap5/widgets/radio_select.html"
|
|
352
354
|
elif isinstance(widget, ClearableFileInput):
|
|
353
355
|
widget.template_name = "django_bootstrap5/widgets/clearable_file_input.html"
|
|
@@ -2,41 +2,31 @@
|
|
|
2
2
|
{% load django_bootstrap5 %}
|
|
3
3
|
{% load i18n %}
|
|
4
4
|
{% get_current_language as LANGUAGE_CODE %}
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
{% bootstrap_setting "color_mode" as COLOR_MODE %}
|
|
6
|
+
{% bootstrap_setting "javascript_in_head" as BOOTSTRAP_JAVASCRIPT_IN_HEAD %}
|
|
7
|
+
<html lang="{{ LANGUAGE_CODE|default:'en_us' }}"{% if COLOR_MODE %} data-bs-theme="{{ COLOR_MODE }}"{% endif %}>
|
|
7
8
|
<head>
|
|
8
|
-
|
|
9
9
|
<!-- Required meta tags -->
|
|
10
10
|
<meta charset="utf-8">
|
|
11
11
|
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
|
12
|
-
|
|
13
12
|
<!-- Page title -->
|
|
14
13
|
<title>{% block bootstrap5_title %}django-bootstrap5 template title{% endblock %}</title>
|
|
15
|
-
|
|
16
14
|
<!-- Bootstrap CSS -->
|
|
17
15
|
{% bootstrap_css %}
|
|
18
|
-
|
|
19
16
|
<!-- Bootstrap JavaScript if it is in head -->
|
|
20
|
-
{% if
|
|
21
|
-
{% bootstrap_javascript %}
|
|
22
|
-
{% endif %}
|
|
23
|
-
|
|
24
|
-
{% block bootstrap5_extra_head %}{% endblock %}
|
|
17
|
+
{% if BOOTSTRAP_JAVASCRIPT_IN_HEAD %}{% bootstrap_javascript %}{% endif %}
|
|
25
18
|
|
|
19
|
+
{% block bootstrap5_extra_head %}{% endblock %}
|
|
26
20
|
</head>
|
|
27
21
|
|
|
28
22
|
<body>
|
|
29
23
|
{% block bootstrap5_before_content %}{% endblock %}
|
|
30
24
|
{% block bootstrap5_content %} CONTENT {% endblock %}
|
|
31
25
|
{% block bootstrap5_after_content %}{% endblock %}
|
|
32
|
-
|
|
33
26
|
<!-- Bootstrap JavaScript if it is in body -->
|
|
34
|
-
{% if not
|
|
35
|
-
{% bootstrap_javascript %}
|
|
36
|
-
{% endif %}
|
|
27
|
+
{% if not BOOTSTRAP_JAVASCRIPT_IN_HEAD %}{% bootstrap_javascript %}{% endif %}
|
|
37
28
|
|
|
38
29
|
{% block bootstrap5_extra_script %}{% endblock %}
|
|
39
|
-
|
|
40
30
|
</body>
|
|
41
31
|
|
|
42
32
|
</html>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<div{% if widget.attrs.id %} id="{{ widget.attrs.id }}"{% endif %} class="btn-group" role="group">
|
|
2
|
+
{% for group, options, index in widget.optgroups %}
|
|
3
|
+
{% for option in options %}
|
|
4
|
+
<input type="{{ option.type }}"
|
|
5
|
+
class="{{ widget.attrs.class|add:' btn-check' }}"
|
|
6
|
+
autocomplete="off"
|
|
7
|
+
name="{{ option.name }}"
|
|
8
|
+
id="{{ option.attrs.id }}"
|
|
9
|
+
{% if option.value != None %} value="{{ option.value|stringformat:'s' }}"
|
|
10
|
+
{% if option.attrs.checked %} checked="checked"{% endif %}{% endif %}
|
|
11
|
+
{% if widget.attrs.disabled %} disabled{% endif %}
|
|
12
|
+
{% if widget.required %} required{% endif %}>
|
|
13
|
+
<label class="btn btn-outline-primary" for="{{ option.attrs.id }}">{{ option.label }}</label>
|
|
14
|
+
{% endfor %}
|
|
15
|
+
{% endfor %}
|
|
16
|
+
</div>
|
|
@@ -10,7 +10,14 @@ from django.utils.safestring import mark_safe
|
|
|
10
10
|
from ..components import render_alert, render_button
|
|
11
11
|
from ..core import css_url, get_bootstrap_setting, javascript_url, theme_url
|
|
12
12
|
from ..css import _css_class_list, merge_css_classes
|
|
13
|
-
from ..forms import
|
|
13
|
+
from ..forms import (
|
|
14
|
+
render_field,
|
|
15
|
+
render_form,
|
|
16
|
+
render_form_errors,
|
|
17
|
+
render_formset,
|
|
18
|
+
render_formset_errors,
|
|
19
|
+
render_label,
|
|
20
|
+
)
|
|
14
21
|
from ..html import render_link_tag, render_script_tag
|
|
15
22
|
from ..size import get_size_class
|
|
16
23
|
from ..utils import render_template_file, url_replace_param
|
|
@@ -26,12 +33,12 @@ MESSAGE_ALERT_TYPES = {
|
|
|
26
33
|
register = template.Library()
|
|
27
34
|
|
|
28
35
|
|
|
29
|
-
@register.
|
|
36
|
+
@register.simple_tag
|
|
30
37
|
def bootstrap_setting(value):
|
|
31
38
|
"""
|
|
32
39
|
Return django-bootstrap5 setting for use in in a template.
|
|
33
40
|
|
|
34
|
-
Please consider this
|
|
41
|
+
Please consider this tag private, do not use it in your own templates.
|
|
35
42
|
"""
|
|
36
43
|
return get_bootstrap_setting(value)
|
|
37
44
|
|
|
@@ -775,7 +782,14 @@ def get_pagination_context(
|
|
|
775
782
|
if extra:
|
|
776
783
|
params.update(parse_qs(extra))
|
|
777
784
|
url = urlunparse(
|
|
778
|
-
[
|
|
785
|
+
[
|
|
786
|
+
parts.scheme,
|
|
787
|
+
parts.netloc,
|
|
788
|
+
parts.path,
|
|
789
|
+
parts.params,
|
|
790
|
+
urlencode(params, doseq=True),
|
|
791
|
+
parts.fragment,
|
|
792
|
+
]
|
|
779
793
|
)
|
|
780
794
|
|
|
781
795
|
pagination_css_classes = ["pagination"]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: django-bootstrap5
|
|
3
|
-
Version:
|
|
3
|
+
Version: 24.2
|
|
4
4
|
Summary: Bootstrap 5 for Django
|
|
5
5
|
Author-email: Dylan Verheul <dylan@dyve.net>
|
|
6
6
|
License: BSD 3-Clause License
|
|
@@ -37,11 +37,10 @@ Project-URL: Documentation, https://django-bootstrap5.readthedocs.io/
|
|
|
37
37
|
Project-URL: Homepage, https://github.com/zostera/django-bootstrap5
|
|
38
38
|
Project-URL: Issues, https://github.com/zostera/django-bootstrap5/issues
|
|
39
39
|
Project-URL: Source, https://github.com/zostera/django-bootstrap5
|
|
40
|
+
Keywords: django,bootstrap,bootstrap5
|
|
40
41
|
Classifier: Development Status :: 5 - Production/Stable
|
|
41
42
|
Classifier: Environment :: Web Environment
|
|
42
43
|
Classifier: Framework :: Django
|
|
43
|
-
Classifier: Framework :: Django :: 3.2
|
|
44
|
-
Classifier: Framework :: Django :: 4.1
|
|
45
44
|
Classifier: Framework :: Django :: 4.2
|
|
46
45
|
Classifier: Framework :: Django :: 5.0
|
|
47
46
|
Classifier: Intended Audience :: Developers
|
|
@@ -59,7 +58,7 @@ Requires-Python: >=3.8
|
|
|
59
58
|
Description-Content-Type: text/markdown
|
|
60
59
|
License-File: LICENSE
|
|
61
60
|
License-File: AUTHORS
|
|
62
|
-
Requires-Dist: Django>=
|
|
61
|
+
Requires-Dist: Django>=4.2
|
|
63
62
|
|
|
64
63
|
# django-bootstrap5
|
|
65
64
|
|
{django-bootstrap5-23.4 → django_bootstrap5-24.2}/src/django_bootstrap5.egg-info/SOURCES.txt
RENAMED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
.
|
|
2
|
-
.readthedocs.
|
|
1
|
+
.editorconfig
|
|
2
|
+
.readthedocs.yaml
|
|
3
3
|
AUTHORS
|
|
4
4
|
CHANGELOG.md
|
|
5
5
|
CONTRIBUTING.md
|
|
6
6
|
LICENSE
|
|
7
|
+
MANIFEST.in
|
|
7
8
|
MIGRATE.md
|
|
8
9
|
Makefile
|
|
9
10
|
README.md
|
|
@@ -12,9 +13,6 @@ pyproject.toml
|
|
|
12
13
|
requirements-dev.txt
|
|
13
14
|
requirements-test.txt
|
|
14
15
|
tox.ini
|
|
15
|
-
.github/dependabot.yml
|
|
16
|
-
.github/workflows/dependabot-auto-approve-and-merge.yml
|
|
17
|
-
.github/workflows/test.yml
|
|
18
16
|
docs/changelog.rst
|
|
19
17
|
docs/conf.py
|
|
20
18
|
docs/contributing.rst
|
|
@@ -90,6 +88,7 @@ tests/test_bootstrap_field_input_range.py
|
|
|
90
88
|
tests/test_bootstrap_field_input_text.py
|
|
91
89
|
tests/test_bootstrap_field_parameters.py
|
|
92
90
|
tests/test_bootstrap_field_radio_select.py
|
|
91
|
+
tests/test_bootstrap_field_radio_select_button_group.py
|
|
93
92
|
tests/test_bootstrap_field_select.py
|
|
94
93
|
tests/test_bootstrap_field_textarea.py
|
|
95
94
|
tests/test_bootstrap_form.py
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
Django>=4.2
|
|
@@ -41,8 +41,15 @@ class MediaTestCase(BootstrapTestCase):
|
|
|
41
41
|
self.expected_bootstrap_css + '<link rel="stylesheet" href="//example.com/theme.css">',
|
|
42
42
|
)
|
|
43
43
|
|
|
44
|
-
def
|
|
45
|
-
self.assertEqual(self.render('{{ "required_css_class"|bootstrap_setting }}'), "django_bootstrap5-req")
|
|
44
|
+
def test_bootstrap_setting_tag(self):
|
|
46
45
|
self.assertEqual(
|
|
47
|
-
self.render('{%
|
|
46
|
+
self.render('{% bootstrap_setting "required_css_class" %}'),
|
|
47
|
+
"django_bootstrap5-req",
|
|
48
|
+
)
|
|
49
|
+
self.assertEqual(
|
|
50
|
+
self.render(
|
|
51
|
+
'{% bootstrap_setting "javascript_in_head" as BOOTSTRAP_JAVASCRIPT_IN_HEAD %}'
|
|
52
|
+
+ "{% if BOOTSTRAP_JAVASCRIPT_IN_HEAD %}head{% else %}body{% endif %}"
|
|
53
|
+
),
|
|
54
|
+
"head",
|
|
48
55
|
)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
from django import forms
|
|
2
2
|
from django.contrib.admin.widgets import AdminSplitDateTime
|
|
3
3
|
|
|
4
|
-
from tests.base import
|
|
4
|
+
from tests.base import BootstrapTestCase
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
class DateTimeTestForm(forms.Form):
|
|
@@ -9,17 +9,11 @@ class DateTimeTestForm(forms.Form):
|
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
class DateTimeTestCase(BootstrapTestCase):
|
|
12
|
-
def fix_django41(self, html):
|
|
13
|
-
"""Return expected HTML fixed for Django 4.1 if necessary."""
|
|
14
|
-
if DJANGO_VERSION >= "4.1":
|
|
15
|
-
html = html.replace(' for="id_test_0"', "")
|
|
16
|
-
return html
|
|
17
|
-
|
|
18
12
|
def test_input_type_admin_split_date_time(self):
|
|
19
13
|
"""Test field with AdminSplitDateTime widget."""
|
|
20
14
|
expected_html = (
|
|
21
15
|
'<div class="django_bootstrap5-req mb-3">'
|
|
22
|
-
'<label class="form-label"
|
|
16
|
+
'<label class="form-label">Test</label>'
|
|
23
17
|
'<p class="datetime">'
|
|
24
18
|
"Date: "
|
|
25
19
|
'<input type="text" name="test_0" class="form-control vDateField" size="10"'
|
|
@@ -33,14 +27,14 @@ class DateTimeTestCase(BootstrapTestCase):
|
|
|
33
27
|
)
|
|
34
28
|
self.assertHTMLEqual(
|
|
35
29
|
self.render("{% bootstrap_field form.test %}", context={"form": DateTimeTestForm()}),
|
|
36
|
-
|
|
30
|
+
expected_html,
|
|
37
31
|
)
|
|
38
32
|
|
|
39
33
|
def test_input_type_admin_split_date_time_horizontal(self):
|
|
40
34
|
"""Test field with AdminSplitDateTime widget with layout horizontal."""
|
|
41
35
|
expected_html = (
|
|
42
36
|
'<div class="django_bootstrap5-req row mb-3">'
|
|
43
|
-
'<label class="col-form-label col-sm-2"
|
|
37
|
+
'<label class="col-form-label col-sm-2">Test</label>'
|
|
44
38
|
'<div class="col-sm-10">'
|
|
45
39
|
'<p class="datetime">'
|
|
46
40
|
"Date: "
|
|
@@ -55,15 +49,18 @@ class DateTimeTestCase(BootstrapTestCase):
|
|
|
55
49
|
"</div>"
|
|
56
50
|
)
|
|
57
51
|
self.assertHTMLEqual(
|
|
58
|
-
self.render(
|
|
59
|
-
|
|
52
|
+
self.render(
|
|
53
|
+
'{% bootstrap_field form.test layout="horizontal" %}',
|
|
54
|
+
context={"form": DateTimeTestForm()},
|
|
55
|
+
),
|
|
56
|
+
expected_html,
|
|
60
57
|
)
|
|
61
58
|
|
|
62
59
|
def test_input_type_admin_split_date_time_floating(self):
|
|
63
60
|
"""Test field with AdminSplitDateTime widget with layout floating."""
|
|
64
61
|
expected_html = (
|
|
65
62
|
'<div class="django_bootstrap5-req mb-3">'
|
|
66
|
-
'<label class="form-label"
|
|
63
|
+
'<label class="form-label">Test</label>'
|
|
67
64
|
'<p class="datetime">'
|
|
68
65
|
"Date: "
|
|
69
66
|
'<input type="text" name="test_0" class="form-control vDateField" size="10"'
|
|
@@ -76,6 +73,9 @@ class DateTimeTestCase(BootstrapTestCase):
|
|
|
76
73
|
"</div>"
|
|
77
74
|
)
|
|
78
75
|
self.assertHTMLEqual(
|
|
79
|
-
self.render(
|
|
80
|
-
|
|
76
|
+
self.render(
|
|
77
|
+
'{% bootstrap_field form.test layout="floating" %}',
|
|
78
|
+
context={"form": DateTimeTestForm()},
|
|
79
|
+
),
|
|
80
|
+
expected_html,
|
|
81
81
|
)
|