diff --git a/devel/Makefile b/devel/Makefile
index 7e9ee1179f559ab17ad8648c5c019db40928d353..3203566a1cf9e5fd831cb1da8acc79df12570563 100644
--- a/devel/Makefile
+++ b/devel/Makefile
@@ -4696,6 +4696,8 @@
     SUBDIR += py-diskcache
     SUBDIR += py-distlib
     SUBDIR += py-distributed
+    SUBDIR += py-dj50-django-rq
+    SUBDIR += py-dj50-strawberry-graphql
     SUBDIR += py-django-rq
     SUBDIR += py-dm-tree
     SUBDIR += py-docformatter
diff --git a/devel/py-dj50-django-rq/Makefile b/devel/py-dj50-django-rq/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..d2a1bf54ebf5c7861735c8126eda14dae8daf870
--- /dev/null
+++ b/devel/py-dj50-django-rq/Makefile
@@ -0,0 +1,34 @@
+PORTNAME=	django-rq
+PORTVERSION=	2.10.2
+CATEGORIES=	devel python
+MASTER_SITES=	PYPI
+PKGNAMEPREFIX=	${PYTHON_PKGNAMEPREFIX}dj50-
+
+MAINTAINER=	kai@FreeBSD.org
+COMMENT=	Provides Django integration for RQ (Redis Queue)
+WWW=		https://github.com/rq/django-rq
+
+LICENSE=	MIT
+LICENSE_FILE=	${WRKSRC}/LICENSE.txt
+
+RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}django50>=3.2:www/py-django50@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}redis>=3:databases/py-redis@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}rq>=1.14:devel/py-rq@${PY_FLAVOR}
+TEST_DEPENDS=	${PYTHON_PKGNAMEPREFIX}dj50-django-redis>0:www/py-dj50-django-redis@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}rq-scheduler>=0:devel/py-rq-scheduler@${PY_FLAVOR} \
+		redis-server:databases/redis
+
+USES=		python:3.10+
+USE_PYTHON=	autoplist concurrent distutils
+
+TEST_ENV=	PYTHONPATH="."
+
+CONFLICTS_INSTALL=	${PYTHON_PKGNAMEPREFIX}*${PORTNAME}
+
+NO_ARCH=	yes
+
+# https://github.com/rq/django-rq/blob/master/Makefile
+do-test:
+	cd ${WRKSRC} && ${SETENV} ${TEST_ENV} ${LOCALBASE}/bin/django-admin test django_rq --settings=django_rq.tests.settings -v2
+
+.include <bsd.port.mk>
diff --git a/devel/py-dj50-django-rq/distinfo b/devel/py-dj50-django-rq/distinfo
new file mode 100644
index 0000000000000000000000000000000000000000..5c169838309e4e6d386d6637734e35b5f2520f88
--- /dev/null
+++ b/devel/py-dj50-django-rq/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1712292732
+SHA256 (django-rq-2.10.2.tar.gz) = d1690b6a409934a0ea23c208ccb00d69477899f8edc61106ce5395c19dcdfb1e
+SIZE (django-rq-2.10.2.tar.gz) = 49744
diff --git a/devel/py-dj50-django-rq/pkg-descr b/devel/py-dj50-django-rq/pkg-descr
new file mode 100644
index 0000000000000000000000000000000000000000..85e24c643a23cd1da0822a9b9c621c60294c995e
--- /dev/null
+++ b/devel/py-dj50-django-rq/pkg-descr
@@ -0,0 +1,3 @@
+Django integration with RQ, a Redis based Python queuing library. Django-RQ is a
+simple app that allows you to configure your queues in django's settings.py and
+easily use them in your project.
diff --git a/devel/py-dj50-strawberry-graphql/Makefile b/devel/py-dj50-strawberry-graphql/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..7c741c9c0e18467c5314aca992284dfb92084245
--- /dev/null
+++ b/devel/py-dj50-strawberry-graphql/Makefile
@@ -0,0 +1,71 @@
+PORTNAME=	strawberry-graphql
+DISTVERSION=	0.235.2
+CATEGORIES=	devel python
+MASTER_SITES=	PYPI
+PKGNAMEPREFIX=	${PYTHON_PKGNAMEPREFIX}dj50-
+DISTNAME=	strawberry_graphql-${DISTVERSION}
+
+MAINTAINER=	kai@FreeBSD.org
+COMMENT=	Library for creating GraphQL APIs
+WWW=		https://github.com/strawberry-graphql/strawberry
+
+LICENSE=	MIT
+LICENSE_FILE=	${WRKSRC}/LICENSE
+
+BUILD_DEPENDS=	${PYTHON_PKGNAMEPREFIX}poetry-core>=0.12.0:devel/py-poetry-core@${PY_FLAVOR}
+RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}python-dateutil>=2.7.0:devel/py-python-dateutil@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}graphql-core>=3.2.0:devel/py-graphql-core@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}typing-extensions>=4.5.0:devel/py-typing-extensions@${PY_FLAVOR}
+
+USES=		python:3.10+
+USE_PYTHON=	autoplist pep517
+
+CONFLICTS_INSTALL=	${PYTHON_PKGNAMEPREFIX}*${PORTNAME}
+
+NO_ARCH=	yes
+
+OPTIONS_DEFINE=		AIOHTTP ASGI CHANNELS CLI DEBUG DEBUG-SERVER DJANGO \
+			FASTAPI FLASK OPENTELEMETRY PYDANTIC
+
+AIOHTTP_DESC=		Basic AIOHTTP integration
+ASGI_DESC=		Basic ASGI integration
+CHANNELS_DESC=		Support for Django Channels
+CLI_DESC=		Support for CLI commands
+DEBUG-SERVER_DESC=	Enable debug server
+DEBUG_DESC=		Generate verbose debug information
+DJANGO_DESC=		Basic Django integration
+FASTAPI_DESC=		Support for FastAPI in conjunction with GraphQLRouter
+FLASK_DESC=		Basic Flask integration
+OPENTELEMETRY_DESC=	Generate Open Telemetry compatible tracing information
+PYDANTIC_DESC=		Support for Pydantic models
+
+AIOHTTP_RUN_DEPENDS=		${PYTHON_PKGNAMEPREFIX}aiohttp>=3.7.4:www/py-aiohttp@${PY_FLAVOR}
+ASGI_RUN_DEPENDS=		${PYTHON_PKGNAMEPREFIX}multipart>=0.0.7:devel/py-multipart@${PY_FLAVOR} \
+				${PYTHON_PKGNAMEPREFIX}starlette>=0.18.0:www/py-starlette@${PY_FLAVOR}
+CHANNELS_RUN_DEPENDS=		${PYTHON_PKGNAMEPREFIX}asgiref>=3.2:www/py-asgiref@${PY_FLAVOR} \
+				${PYTHON_PKGNAMEPREFIX}channels>=3.0.5:www/py-channels@${PY_FLAVOR}
+CLI_RUN_DEPENDS=		${PYTHON_PKGNAMEPREFIX}libcst>=0.4.7:devel/py-libcst@${PY_FLAVOR} \
+				${PYTHON_PKGNAMEPREFIX}pygments>=2.3:textproc/py-pygments@${PY_FLAVOR} \
+				${PYTHON_PKGNAMEPREFIX}rich>=12.0.0:textproc/py-rich@${PY_FLAVOR} \
+				${PYTHON_PKGNAMEPREFIX}typer>=0.7.0:devel/py-typer@${PY_FLAVOR}
+DEBUG-SERVER_RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}libcst>=0.4.7:devel/py-libcst@${PY_FLAVOR} \
+				${PYTHON_PKGNAMEPREFIX}multipart>=0.0.7:devel/py-multipart@${PY_FLAVOR} \
+				${PYTHON_PKGNAMEPREFIX}pygments>=2.3:textproc/py-pygments@${PY_FLAVOR} \
+				${PYTHON_PKGNAMEPREFIX}rich>=12.0.0:textproc/py-rich@${PY_FLAVOR} \
+				${PYTHON_PKGNAMEPREFIX}starlette>=0.18.0:www/py-starlette@${PY_FLAVOR} \
+				${PYTHON_PKGNAMEPREFIX}typer>=0.7.0:devel/py-typer@${PY_FLAVOR} \
+				${PYTHON_PKGNAMEPREFIX}uvicorn>=0.11.6:www/py-uvicorn@${PY_FLAVOR}
+DEBUG_RUN_DEPENDS=		${PYTHON_PKGNAMEPREFIX}libcst>=0.4.7:devel/py-libcst@${PY_FLAVOR} \
+				${PYTHON_PKGNAMEPREFIX}rich>=12.0.0:textproc/py-rich@${PY_FLAVOR}
+DJANGO_RUN_DEPENDS=		${PYTHON_PKGNAMEPREFIX}asgiref>=3.2:www/py-asgiref@${PY_FLAVOR} \
+				${PYTHON_PKGNAMEPREFIX}django50>=3.2:www/py-django50@${PY_FLAVOR} \
+				${PYTHON_PKGNAMEPREFIX}pytest-django>0:devel/py-pytest-django@${PY_FLAVOR}
+FASTAPI_RUN_DEPENDS=		${PYTHON_PKGNAMEPREFIX}fastapi>=0.62.5:www/py-fastapi@${PY_FLAVOR} \
+				${PYTHON_PKGNAMEPREFIX}multipart>=0.0.7:devel/py-multipart@${PY_FLAVOR}
+FLASK_RUN_DEPENDS=		${PYTHON_PKGNAMEPREFIX}flask>=1.1:www/py-flask@${PY_FLAVOR}
+OPENTELEMETRY_RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}opentelemetry-api<2:devel/py-opentelemetry-api@${PY_FLAVOR} \
+				${PYTHON_PKGNAMEPREFIX}opentelemetry-sdk<2:devel/py-opentelemetry-sdk@${PY_FLAVOR}
+# NB: Switch to devel/py-pydantic once www/py-fastapi uses it
+PYDANTIC_RUN_DEPENDS=		${PYTHON_PKGNAMEPREFIX}pydantic2>1.6.1:devel/py-pydantic2@${PY_FLAVOR}
+
+.include <bsd.port.mk>
diff --git a/devel/py-dj50-strawberry-graphql/distinfo b/devel/py-dj50-strawberry-graphql/distinfo
new file mode 100644
index 0000000000000000000000000000000000000000..395fa016fc289b0952659320eb923ccb59048d9d
--- /dev/null
+++ b/devel/py-dj50-strawberry-graphql/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1720616558
+SHA256 (strawberry_graphql-0.235.2.tar.gz) = 5b8abc8ea970eac0ee924edea9b4792defc298231e373467558853b8ff22b27c
+SIZE (strawberry_graphql-0.235.2.tar.gz) = 202145
diff --git a/devel/py-dj50-strawberry-graphql/files/patch-pyproject.toml b/devel/py-dj50-strawberry-graphql/files/patch-pyproject.toml
new file mode 100644
index 0000000000000000000000000000000000000000..b6623c4bd812de6f9f68ca3ae1bd8e5986e75b35
--- /dev/null
+++ b/devel/py-dj50-strawberry-graphql/files/patch-pyproject.toml
@@ -0,0 +1,15 @@
+Use the more lightweight build system "poetry-core".
+
+--- pyproject.toml.orig	2024-03-24 18:49:43 UTC
++++ pyproject.toml
+@@ -30,8 +30,8 @@ include = ["strawberry/py.typed"]
+ "Sponsor on Open Collective" = "https://opencollective.com/strawberry-graphql"
+ 
+ [build-system]
+-requires = ["poetry>=0.12"]
+-build-backend = "poetry.masonry.api"
++requires = ["poetry-core>=0.12"]
++build-backend = "poetry.core.masonry.api"
+ 
+ [tool.poetry.dependencies]
+ python = "^3.8"
diff --git a/devel/py-dj50-strawberry-graphql/pkg-descr b/devel/py-dj50-strawberry-graphql/pkg-descr
new file mode 100644
index 0000000000000000000000000000000000000000..ea25df49f06d9fa0e818331d0ea759b97ed8cfbe
--- /dev/null
+++ b/devel/py-dj50-strawberry-graphql/pkg-descr
@@ -0,0 +1,23 @@
+Strawberry is a developer friendly GraphQL library for Python, designed for
+modern development.
+
+* Type hints: Leverages Python type hints to provide a great developer
+  experience while creating GraphQL Libraries.
+
+* Async Support: Supports async/await out of the box, allowing you to write
+  your resolvers in a non-blocking way.
+
+* Extensible: Has support for schema and field extensions, allowing you to
+  extend the schema with custom logic.
+
+* Generics: Supports generics, allowing you to create reusable types that can
+  be used in multiple places.
+
+* Federation: Supports Federation, allowing you to create a federated GraphQL
+  schema.
+
+* Dataloaders: Comes with support for dataloaders, allowing you to batch
+  multiple queries into a single one.
+
+* Integrations: Has support for multiple integrations, allowing you to use it
+  with your favorite web framework.
diff --git a/www/Makefile b/www/Makefile
index 4ff62a8605aedf830102cb6a92e1b26651970efd..f6cc8124bfe1ce9e79af11b1e6b2b50846594635 100644
--- a/www/Makefile
+++ b/www/Makefile
@@ -1477,6 +1477,24 @@
     SUBDIR += py-cssutils
     SUBDIR += py-daphne
     SUBDIR += py-dj-database-url
+    SUBDIR += py-dj50-django-auth-ldap
+    SUBDIR += py-dj50-django-choices-field
+    SUBDIR += py-dj50-django-cors-headers
+    SUBDIR += py-dj50-django-debug-toolbar
+    SUBDIR += py-dj50-django-filter
+    SUBDIR += py-dj50-django-htmx
+    SUBDIR += py-dj50-django-js-asset
+    SUBDIR += py-dj50-django-mptt
+    SUBDIR += py-dj50-django-prometheus
+    SUBDIR += py-dj50-django-redis
+    SUBDIR += py-dj50-django-rich
+    SUBDIR += py-dj50-django-tables2
+    SUBDIR += py-dj50-django-taggit
+    SUBDIR += py-dj50-django-timezone-field
+    SUBDIR += py-dj50-djangorestframework
+    SUBDIR += py-dj50-drf-spectacular
+    SUBDIR += py-dj50-drf-spectacular-sidecar
+    SUBDIR += py-dj50-strawberry-graphql-django
     SUBDIR += py-django-admin-rangefilter
     SUBDIR += py-django-advanced-filters
     SUBDIR += py-django-allauth
diff --git a/www/py-dj50-django-auth-ldap/Makefile b/www/py-dj50-django-auth-ldap/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..3e904956c1a9f099d4568843d9cb55578fc0cb74
--- /dev/null
+++ b/www/py-dj50-django-auth-ldap/Makefile
@@ -0,0 +1,39 @@
+PORTNAME=	django-auth-ldap
+PORTVERSION=	4.8.0
+CATEGORIES=	www security python
+MASTER_SITES=	PYPI
+PKGNAMEPREFIX=	${PYTHON_PKGNAMEPREFIX}dj50-
+
+MAINTAINER=	kai@FreeBSD.org
+COMMENT=	LDAP integration for django.contrib.auth
+WWW=		https://github.com/django-auth-ldap/django-auth-ldap
+
+LICENSE=	BSD2CLAUSE
+LICENSE_FILE=	${WRKSRC}/LICENSE
+
+BUILD_DEPENDS=	${PY_SETUPTOOLS} \
+		${PYTHON_PKGNAMEPREFIX}setuptools-scm>=3.4:devel/py-setuptools-scm@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}wheel>0:devel/py-wheel@${PY_FLAVOR}
+RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}django50>=3.2:www/py-django50@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}python-ldap>=3.1:net/py-python-ldap@${PY_FLAVOR}
+
+USES=		python:3.10+
+USE_PYTHON=	autoplist concurrent pep517
+
+CONFLICTS_INSTALL=	${PYTHON_PKGNAMEPREFIX}*${PORTNAME}
+
+NO_ARCH=	yes
+PORTDOCS=	*
+OPTIONS_DEFINE=	DOCS
+DOCS_BUILD_DEPENDS=	${PYTHON_PKGNAMEPREFIX}sphinx>=0,1:textproc/py-sphinx@${PY_FLAVOR}
+
+post-build-DOCS-on:
+	${LOCALBASE}/bin/sphinx-build-${PYTHON_VER} -d ${WRKDIR} -b html ${WRKSRC}/docs ${WRKSRC}/build/sphinx/html
+
+post-install-DOCS-on:
+	@${MKDIR} ${STAGEDIR}${DOCSDIR}
+	(cd ${WRKSRC}/build/sphinx/html && \
+		${COPYTREE_SHARE} . ${STAGEDIR}${DOCSDIR} \
+			"! -name .buildinfo -and ! -name objects.inv")
+
+.include <bsd.port.mk>
diff --git a/www/py-dj50-django-auth-ldap/distinfo b/www/py-dj50-django-auth-ldap/distinfo
new file mode 100644
index 0000000000000000000000000000000000000000..d649b74341cb5f00c5ca2f7a62cc08e12d0ab861
--- /dev/null
+++ b/www/py-dj50-django-auth-ldap/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1712323264
+SHA256 (django-auth-ldap-4.8.0.tar.gz) = 604250938ddc9fda619f247c7a59b0b2f06e53a7d3f46a156f28aa30dd71a738
+SIZE (django-auth-ldap-4.8.0.tar.gz) = 53906
diff --git a/www/py-dj50-django-auth-ldap/files/patch-docs_conf.py b/www/py-dj50-django-auth-ldap/files/patch-docs_conf.py
new file mode 100644
index 0000000000000000000000000000000000000000..d41916245ebcda6775fcd03ff555e7ddf7d44592
--- /dev/null
+++ b/www/py-dj50-django-auth-ldap/files/patch-docs_conf.py
@@ -0,0 +1,20 @@
+Avoid the download of various intersphinx inventories during build.  Only two
+intersphinx mappings are used and the documentation can be built/used without
+them.
+
+--- docs/conf.py.orig	2022-06-12 10:26:47 UTC
++++ docs/conf.py
+@@ -188,13 +188,3 @@ texinfo_documents = [
+ # -- Extension configuration -------------------------------------------------
+ 
+ # -- Options for intersphinx extension ---------------------------------------
+-
+-intersphinx_mapping = {
+-    "python": ("https://docs.python.org/3/", None),
+-    "django": (
+-        "https://docs.djangoproject.com/en/stable/",
+-        "https://docs.djangoproject.com/en/stable/_objects/",
+-    ),
+-    "pythonldap": ("https://www.python-ldap.org/en/latest/", None),
+-    "tox": ("https://tox.wiki/en/latest/", None),
+-}
diff --git a/www/py-dj50-django-auth-ldap/pkg-descr b/www/py-dj50-django-auth-ldap/pkg-descr
new file mode 100644
index 0000000000000000000000000000000000000000..390903dba8ac46ee07d3e491f3e42ca26d142754
--- /dev/null
+++ b/www/py-dj50-django-auth-ldap/pkg-descr
@@ -0,0 +1,4 @@
+This is a Django authentication backend that authenticates against an LDAP
+service. Configuration can be as simple as a single distinguished name template,
+but there are many rich configuration options for working with users, groups,
+and permissions.
diff --git a/www/py-dj50-django-choices-field/Makefile b/www/py-dj50-django-choices-field/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..f4deeb90035c2181848e4c5c03d9461ce5de8c4c
--- /dev/null
+++ b/www/py-dj50-django-choices-field/Makefile
@@ -0,0 +1,26 @@
+PORTNAME=	django-choices-field
+DISTVERSION=	2.3.0
+CATEGORIES=	www python
+MASTER_SITES=	PYPI
+PKGNAMEPREFIX=	${PYTHON_PKGNAMEPREFIX}dj50-
+DISTNAME=	django_choices_field-${DISTVERSION}
+
+MAINTAINER=	kai@FreeBSD.org
+COMMENT=	Django field that set/get TextChoices/IntegerChoices enumerations
+WWW=		https://github.com/bellini666/django-choices-field
+
+LICENSE=	MIT
+LICENSE_FILE=	${WRKSRC}/LICENSE
+
+BUILD_DEPENDS=	${PYTHON_PKGNAMEPREFIX}poetry-core>=1.0.0:devel/py-poetry-core@${PY_FLAVOR}
+RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}django50>=3.2:www/py-django50@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}typing-extensions>=4.0.0:devel/py-typing-extensions@${PY_FLAVOR}
+
+USES=		python:3.10+
+USE_PYTHON=	autoplist pep517
+
+CONFLICTS_INSTALL=	${PYTHON_PKGNAMEPREFIX}*${PORTNAME}
+
+NO_ARCH=	yes
+
+.include <bsd.port.mk>
diff --git a/www/py-dj50-django-choices-field/distinfo b/www/py-dj50-django-choices-field/distinfo
new file mode 100644
index 0000000000000000000000000000000000000000..7f61f9ac7ddeed4f9b098e5d1075722cbaed2534
--- /dev/null
+++ b/www/py-dj50-django-choices-field/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1711885476
+SHA256 (django_choices_field-2.3.0.tar.gz) = bb0c85c79737ab98bfb9c0d9ddf98010d612c0585be767890e25fd192c3d1694
+SIZE (django_choices_field-2.3.0.tar.gz) = 6448
diff --git a/www/py-dj50-django-choices-field/pkg-descr b/www/py-dj50-django-choices-field/pkg-descr
new file mode 100644
index 0000000000000000000000000000000000000000..3a855539fca9b92d85a62f5cd81f53dc84b62ed5
--- /dev/null
+++ b/www/py-dj50-django-choices-field/pkg-descr
@@ -0,0 +1,2 @@
+This package provides a Django field that set/get the "TextChoices" and
+"IntegerChoices" enumerations.
diff --git a/www/py-dj50-django-cors-headers/Makefile b/www/py-dj50-django-cors-headers/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..dd5f8e8801e235f1eaa34ceb91252e8a165aa8ed
--- /dev/null
+++ b/www/py-dj50-django-cors-headers/Makefile
@@ -0,0 +1,27 @@
+PORTNAME=	django-cors-headers
+PORTVERSION=	4.4.0
+CATEGORIES=	www python
+MASTER_SITES=	PYPI
+PKGNAMEPREFIX=	${PYTHON_PKGNAMEPREFIX}dj50-
+DISTNAME=	django_cors_headers-${PORTVERSION}
+
+MAINTAINER=	kai@FreeBSD.org
+COMMENT=	Handles server headers required for Cross-Origin Resource Sharing
+WWW=		https://github.com/adamchainz/django-cors-headers
+
+LICENSE=	MIT
+LICENSE_FILE=	${WRKSRC}/LICENSE
+
+BUILD_DEPENDS=	${PY_SETUPTOOLS} \
+		${PYTHON_PKGNAMEPREFIX}wheel>=0:devel/py-wheel@${PY_FLAVOR}
+RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}django50>=3.2:www/py-django50@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}asgiref>=3.6:www/py-asgiref@${PY_FLAVOR}
+
+USES=		python:3.10+
+USE_PYTHON=	autoplist pep517
+
+CONFLICTS_INSTALL=	${PYTHON_PKGNAMEPREFIX}*${PORTNAME}
+
+NO_ARCH=		yes
+
+.include <bsd.port.mk>
diff --git a/www/py-dj50-django-cors-headers/distinfo b/www/py-dj50-django-cors-headers/distinfo
new file mode 100644
index 0000000000000000000000000000000000000000..bcb902d93e77f4a4ae71294954b0a83c8d28ec4e
--- /dev/null
+++ b/www/py-dj50-django-cors-headers/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1719292306
+SHA256 (django_cors_headers-4.4.0.tar.gz) = 92cf4633e22af67a230a1456cb1b7a02bb213d6536d2dcb2a4a24092ea9cebc2
+SIZE (django_cors_headers-4.4.0.tar.gz) = 21151
diff --git a/www/py-dj50-django-cors-headers/pkg-descr b/www/py-dj50-django-cors-headers/pkg-descr
new file mode 100644
index 0000000000000000000000000000000000000000..9ba1bc6bd1a84e01210cd834542f1bc65c32b5ac
--- /dev/null
+++ b/www/py-dj50-django-cors-headers/pkg-descr
@@ -0,0 +1,2 @@
+A Django App that adds CORS (Cross-Origin Resource Sharing) headers to
+responses.
diff --git a/www/py-dj50-django-debug-toolbar/Makefile b/www/py-dj50-django-debug-toolbar/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..99dfbe060d68766f2935d7371e1cdd6d8e1bcb15
--- /dev/null
+++ b/www/py-dj50-django-debug-toolbar/Makefile
@@ -0,0 +1,29 @@
+PORTNAME=	django-debug-toolbar
+PORTVERSION=	4.3.0
+CATEGORIES=	www python
+MASTER_SITES=	PYPI
+PKGNAMEPREFIX=	${PYTHON_PKGNAMEPREFIX}dj50-
+DISTNAME=	django_debug_toolbar-${PORTVERSION}
+
+MAINTAINER=	kai@FreeBSD.org
+COMMENT=	Configurable set of panels to display debug information
+WWW=		https://github.com/jazzband/django-debug-toolbar
+
+LICENSE=	BSD3CLAUSE
+LICENSE_FILE=	${WRKSRC}/LICENSE
+
+BUILD_DEPENDS=	${PYTHON_PKGNAMEPREFIX}hatchling>=0:devel/py-hatchling@${PY_FLAVOR}
+RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}django50>=3.2.4:www/py-django50@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}sqlparse>=0.2.0:databases/py-sqlparse@${PY_FLAVOR}
+
+USES=		python:3.10+
+USE_PYTHON=	autoplist concurrent pep517
+
+CONFLICTS_INSTALL=	${PYTHON_PKGNAMEPREFIX}*${PORTNAME}
+
+NO_ARCH=	yes
+
+# Newer versions of py-django-debug-toolbar have an issue with DNS resolving
+PORTSCOUT=	ignore:1
+
+.include <bsd.port.mk>
diff --git a/www/py-dj50-django-debug-toolbar/distinfo b/www/py-dj50-django-debug-toolbar/distinfo
new file mode 100644
index 0000000000000000000000000000000000000000..bb62a41f44fde0bb17e0ca6cd28cef17dbcf9df5
--- /dev/null
+++ b/www/py-dj50-django-debug-toolbar/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1719292365
+SHA256 (django_debug_toolbar-4.3.0.tar.gz) = 0b0dddee5ea29b9cb678593bc0d7a6d76b21d7799cb68e091a2148341a80f3c4
+SIZE (django_debug_toolbar-4.3.0.tar.gz) = 261173
diff --git a/www/py-dj50-django-debug-toolbar/pkg-descr b/www/py-dj50-django-debug-toolbar/pkg-descr
new file mode 100644
index 0000000000000000000000000000000000000000..e62114e4b61fb174f0291842e11789a1d19f8560
--- /dev/null
+++ b/www/py-dj50-django-debug-toolbar/pkg-descr
@@ -0,0 +1,3 @@
+The Django Debug Toolbar is a configurable set of panels that display various
+debug information about the current request/response and when clicked, display
+more details about the panel's content.
diff --git a/www/py-dj50-django-filter/Makefile b/www/py-dj50-django-filter/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..974dc075902fcb46bae5b8dcf57edb817d236475
--- /dev/null
+++ b/www/py-dj50-django-filter/Makefile
@@ -0,0 +1,24 @@
+PORTNAME=	django-filter
+DISTVERSION=	24.2
+CATEGORIES=	www python
+MASTER_SITES=	PYPI
+PKGNAMEPREFIX=	${PYTHON_PKGNAMEPREFIX}dj50-
+
+MAINTAINER=	kai@FreeBSD.org
+COMMENT=	Dynamic filtering for querysets with Django
+WWW=		https://github.com/carltongibson/django-filter
+
+LICENSE=	BSD3CLAUSE
+LICENSE_FILE=	${WRKSRC}/LICENSE
+
+BUILD_DEPENDS=	${PYTHON_PKGNAMEPREFIX}flit-core>=3.2<4:devel/py-flit-core@${PY_FLAVOR}
+RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}django50>=4.2:www/py-django50@${PY_FLAVOR}
+
+USES=		python:3.10+
+USE_PYTHON=	autoplist pep517
+
+CONFLICTS_INSTALL=	${PYTHON_PKGNAMEPREFIX}*${PORTNAME}
+
+NO_ARCH=		yes
+
+.include <bsd.port.mk>
diff --git a/www/py-dj50-django-filter/distinfo b/www/py-dj50-django-filter/distinfo
new file mode 100644
index 0000000000000000000000000000000000000000..2570d9e357086fe67dcd6ccd169c8d33161ea2c5
--- /dev/null
+++ b/www/py-dj50-django-filter/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1712382215
+SHA256 (django-filter-24.2.tar.gz) = 48e5fc1da3ccd6ca0d5f9bb550973518ce977a4edde9d2a8a154a7f4f0b9f96e
+SIZE (django-filter-24.2.tar.gz) = 142937
diff --git a/www/py-dj50-django-filter/pkg-descr b/www/py-dj50-django-filter/pkg-descr
new file mode 100644
index 0000000000000000000000000000000000000000..089f799caa3e75b463b3245e7240e1d4cb5d1646
--- /dev/null
+++ b/www/py-dj50-django-filter/pkg-descr
@@ -0,0 +1,2 @@
+Django-filter is a reusable Django application allowing users to declaratively
+add dynamic QuerySet filtering from URL parameters.
diff --git a/www/py-dj50-django-htmx/Makefile b/www/py-dj50-django-htmx/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..5e8cd08c35cc25d0b55391c4bb5e1d498fb87fe4
--- /dev/null
+++ b/www/py-dj50-django-htmx/Makefile
@@ -0,0 +1,27 @@
+PORTNAME=	django-htmx
+DISTVERSION=	1.18.0
+CATEGORIES=	www python
+MASTER_SITES=	PYPI
+PKGNAMEPREFIX=	${PYTHON_PKGNAMEPREFIX}dj50-
+DISTNAME=	django_htmx-${DISTVERSION}
+
+MAINTAINER=	kai@FreeBSD.org
+COMMENT=	Extensions for using Django with htmx
+WWW=		https://github.com/adamchainz/django-htmx
+
+LICENSE=	MIT
+LICENSE_FILE=	${WRKSRC}/LICENSE
+
+BUILD_DEPENDS=	${PY_SETUPTOOLS} \
+		${PYTHON_PKGNAMEPREFIX}wheel>0:devel/py-wheel@${PY_FLAVOR}
+RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}django50>=3.2:www/py-django50@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}asgiref>=3.6:www/py-asgiref@${PY_FLAVOR}
+
+USES=		python:3.10+
+USE_PYTHON=	autoplist pep517
+
+CONFLICTS_INSTALL=	${PYTHON_PKGNAMEPREFIX}*${PORTNAME}
+
+NO_ARCH=	yes
+
+.include <bsd.port.mk>
diff --git a/www/py-dj50-django-htmx/distinfo b/www/py-dj50-django-htmx/distinfo
new file mode 100644
index 0000000000000000000000000000000000000000..8b2a823f742be6b94bb84694f7cec3ae56e2d6d4
--- /dev/null
+++ b/www/py-dj50-django-htmx/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1719292408
+SHA256 (django_htmx-1.18.0.tar.gz) = db8a0cc15bcd0f7ae929bcb9108d9e6be228843092aca7956d977c31c4d95aae
+SIZE (django_htmx-1.18.0.tar.gz) = 9717
diff --git a/www/py-dj50-django-htmx/pkg-descr b/www/py-dj50-django-htmx/pkg-descr
new file mode 100644
index 0000000000000000000000000000000000000000..9b84019de4a7727e204eb1660d12ea77242b14f9
--- /dev/null
+++ b/www/py-dj50-django-htmx/pkg-descr
@@ -0,0 +1,3 @@
+This package offers extensions for using Django with htmx, a library that
+allows one to access modern browser features directly from HTML, rather than
+using JavaScript (see https://htmx.org/).
diff --git a/www/py-dj50-django-js-asset/Makefile b/www/py-dj50-django-js-asset/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..3f71dbdfad5d3f8ef39d9e9d3a5a4746a3adaac5
--- /dev/null
+++ b/www/py-dj50-django-js-asset/Makefile
@@ -0,0 +1,25 @@
+PORTNAME=	django-js-asset
+DISTVERSION=	2.2.0
+CATEGORIES=	www python
+MASTER_SITES=	PYPI
+PKGNAMEPREFIX=	${PYTHON_PKGNAMEPREFIX}dj50-
+DISTNAME=	django_js_asset-${DISTVERSION}
+
+MAINTAINER=	kai@FreeBSD.org
+COMMENT=	Insert script tags with additional attributes for django.forms.Media
+WWW=		https://github.com/matthiask/django-js-asset
+
+LICENSE=	BSD3CLAUSE
+LICENSE_FILE=	${WRKSRC}/LICENSE
+
+BUILD_DEPENDS=	${PYTHON_PKGNAMEPREFIX}hatchling>0:devel/py-hatchling@${PY_FLAVOR}
+RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}django50>=3.2:www/py-django50@${PY_FLAVOR}
+
+USES=		python:3.10+
+USE_PYTHON=	autoplist pep517
+
+CONFLICTS_INSTALL=	${PYTHON_PKGNAMEPREFIX}*${PORTNAME}
+
+NO_ARCH=		yes
+
+.include <bsd.port.mk>
diff --git a/www/py-dj50-django-js-asset/distinfo b/www/py-dj50-django-js-asset/distinfo
new file mode 100644
index 0000000000000000000000000000000000000000..177df25ec846d2f5801504705f8a0e3dce16ad3e
--- /dev/null
+++ b/www/py-dj50-django-js-asset/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1702633024
+SHA256 (django_js_asset-2.2.0.tar.gz) = 0c57a82cae2317e83951d956110ce847f58ff0cdc24e314dbc18b35033917e94
+SIZE (django_js_asset-2.2.0.tar.gz) = 7904
diff --git a/www/py-dj50-django-js-asset/pkg-descr b/www/py-dj50-django-js-asset/pkg-descr
new file mode 100644
index 0000000000000000000000000000000000000000..99b04e1534c9c01d290daa26e697f4373691fc22
--- /dev/null
+++ b/www/py-dj50-django-js-asset/pkg-descr
@@ -0,0 +1,2 @@
+Insert script tags with additional attributes (such as "id" and "data" for
+CSP-compatible data injection) for the django.forms.Media package.
diff --git a/www/py-dj50-django-mptt/Makefile b/www/py-dj50-django-mptt/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..499320b4735fd9ebaf4d0964cb1a3462b15c6685
--- /dev/null
+++ b/www/py-dj50-django-mptt/Makefile
@@ -0,0 +1,26 @@
+PORTNAME=	django-mptt
+PORTVERSION=	0.16.0
+CATEGORIES=	www python
+MASTER_SITES=	PYPI
+PKGNAMEPREFIX=	${PYTHON_PKGNAMEPREFIX}dj50-
+DISTNAME=	django_mptt-${PORTVERSION}
+
+MAINTAINER=	kai@FreeBSD.org
+COMMENT=	Utilities for implementing Modified Preorder Tree Traversal in Django
+WWW=		https://github.com/django-mptt/django-mptt
+
+LICENSE=	MIT
+LICENSE_FILE=	${WRKSRC}/LICENSE
+
+BUILD_DEPENDS=	${PYTHON_PKGNAMEPREFIX}hatchling>0:devel/py-hatchling@${PY_FLAVOR}
+RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}django50>=3.2:www/py-django50@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj50-django-js-asset>0:www/py-dj50-django-js-asset@${PY_FLAVOR}
+
+USES=		python:3.10+
+USE_PYTHON=	autoplist pep517
+
+CONFLICTS_INSTALL=	${PYTHON_PKGNAMEPREFIX}*${PORTNAME}
+
+NO_ARCH=		yes
+
+.include <bsd.port.mk>
diff --git a/www/py-dj50-django-mptt/distinfo b/www/py-dj50-django-mptt/distinfo
new file mode 100644
index 0000000000000000000000000000000000000000..736c7dc40fa666247fa348289ece7eb98b6abfd6
--- /dev/null
+++ b/www/py-dj50-django-mptt/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1712382472
+SHA256 (django_mptt-0.16.0.tar.gz) = 56c9606bf0b329b5f5afd55dd8bfd073612ea1d5999b10903b09de62bee84c8e
+SIZE (django_mptt-0.16.0.tar.gz) = 69886
diff --git a/www/py-dj50-django-mptt/pkg-descr b/www/py-dj50-django-mptt/pkg-descr
new file mode 100644
index 0000000000000000000000000000000000000000..bad56cabf15150b8c4d45a56a71d94a2eebbaf9d
--- /dev/null
+++ b/www/py-dj50-django-mptt/pkg-descr
@@ -0,0 +1,2 @@
+Utilities for implementing Modified Preorder Tree Traversal with your Django
+Models and working with trees of Model instances.
diff --git a/www/py-dj50-django-prometheus/Makefile b/www/py-dj50-django-prometheus/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..e011be6d8d23709cf5d20fec0d6fdec693c77001
--- /dev/null
+++ b/www/py-dj50-django-prometheus/Makefile
@@ -0,0 +1,37 @@
+PORTNAME=	django-prometheus
+PORTVERSION=	2.3.1
+CATEGORIES=	www python
+MASTER_SITES=	PYPI
+PKGNAMEPREFIX=	${PYTHON_PKGNAMEPREFIX}dj50-
+
+MAINTAINER=	kai@FreeBSD.org
+COMMENT=	Export Django monitoring metrics for Prometheus.io
+WWW=		https://github.com/korfuri/django-prometheus
+
+LICENSE=	APACHE20
+
+BUILD_DEPENDS=	${PYTHON_PKGNAMEPREFIX}pytest-runner>0:devel/py-pytest-runner@${PY_FLAVOR}
+RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}django50>=3.2:www/py-django50@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}prometheus-client>=0.7:net-mgmt/py-prometheus-client@${PY_FLAVOR}
+
+USES=		python:3.10+
+USE_PYTHON=	autoplist distutils pytest
+
+TEST_ENV=	PYTHONPATH=${STAGEDIR}${PYTHONPREFIX_SITELIBDIR}
+
+CONFLICTS_INSTALL=	${PYTHON_PKGNAMEPREFIX}*${PORTNAME}
+
+NO_ARCH=		yes
+
+OPTIONS_GROUP=		DATABASE CACHE
+OPTIONS_GROUP_CACHE=	MEMCACHED REDIS
+OPTIONS_GROUP_DATABASE=	MYSQL PGSQL
+
+MEMCACHED_DESC=		Memcached distributed memory caching support
+
+MEMCACHED_RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}python-memcached>=0:databases/py-python-memcached@${PY_FLAVOR}
+MYSQL_RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}mysqlclient>=0:databases/py-mysqlclient@${PY_FLAVOR}
+PGSQL_RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}psycopg2>=0:databases/py-psycopg2@${PY_FLAVOR}
+REDIS_RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}dj50-django-redis>=4.8:www/py-dj50-django-redis@${PY_FLAVOR}
+
+.include <bsd.port.mk>
diff --git a/www/py-dj50-django-prometheus/distinfo b/www/py-dj50-django-prometheus/distinfo
new file mode 100644
index 0000000000000000000000000000000000000000..4f11977cb57e907f3ff1aad39368e7367ae6c323
--- /dev/null
+++ b/www/py-dj50-django-prometheus/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1683262385
+SHA256 (django-prometheus-2.3.1.tar.gz) = f9c8b6c780c9419ea01043c63a437d79db2c33353451347894408184ad9c3e1e
+SIZE (django-prometheus-2.3.1.tar.gz) = 24718
diff --git a/www/py-dj50-django-prometheus/pkg-descr b/www/py-dj50-django-prometheus/pkg-descr
new file mode 100644
index 0000000000000000000000000000000000000000..0962e7b87336834f81f56963de296b3254874f48
--- /dev/null
+++ b/www/py-dj50-django-prometheus/pkg-descr
@@ -0,0 +1,14 @@
+This library exports Django monitoring metrics for Prometheus.io.
+
+It provides support to monitor the following databases types:
+
+* SQLite (via Django)
+* PostgreSQL
+* MySQL
+
+In addition, caches can also be monitored:
+
+* memcached
+* Redis
+
+It's even possible to export metrics of Django models and migrations.
diff --git a/www/py-dj50-django-redis/Makefile b/www/py-dj50-django-redis/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..a745ce1bb9421c700e1254ca7f7b0a3c799a6d21
--- /dev/null
+++ b/www/py-dj50-django-redis/Makefile
@@ -0,0 +1,33 @@
+PORTNAME=	django-redis
+PORTVERSION=	5.4.0
+CATEGORIES=	www databases python
+MASTER_SITES=	PYPI
+PKGNAMEPREFIX=	${PYTHON_PKGNAMEPREFIX}dj50-
+
+MAINTAINER=	kai@FreeBSD.org
+COMMENT=	Full featured Redis cache/session backend for Django
+WWW=		https://github.com/jazzband/django-redis
+
+LICENSE=	BSD3CLAUSE
+LICENSE_FILE=	${WRKSRC}/LICENSE
+
+RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}django50>=3.2:www/py-django50@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}redis>=3:databases/py-redis@${PY_FLAVOR}
+TEST_DEPENDS=	${PYTHON_PKGNAMEPREFIX}msgpack>=0:devel/py-msgpack@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}pytest-django>0:devel/py-pytest-django@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}pytest-mock>0:devel/py-pytest-mock@${PY_FLAVOR} \
+		redis-server:databases/redis
+
+USES=		python:3.10+
+USE_PYTHON=	autoplist concurrent distutils pytest
+
+TEST_ENV=	DJANGO_SETTINGS_MODULE=settings.sqlite \
+		PYTHONPATH=${STAGEDIR}${PYTHONPREFIX_SITELIBDIR}
+
+CONFLICTS_INSTALL=	${PYTHON_PKGNAMEPREFIX}*${PORTNAME}
+
+NO_ARCH=	yes
+
+TEST_WRKSRC=	${WRKSRC}/tests
+
+.include <bsd.port.mk>
diff --git a/www/py-dj50-django-redis/distinfo b/www/py-dj50-django-redis/distinfo
new file mode 100644
index 0000000000000000000000000000000000000000..ef02bb27e20da87ea61829f8a1e1d2911d91a075
--- /dev/null
+++ b/www/py-dj50-django-redis/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1698348853
+SHA256 (django-redis-5.4.0.tar.gz) = 6a02abaa34b0fea8bf9b707d2c363ab6adc7409950b2db93602e6cb292818c42
+SIZE (django-redis-5.4.0.tar.gz) = 52567
diff --git a/www/py-dj50-django-redis/pkg-descr b/www/py-dj50-django-redis/pkg-descr
new file mode 100644
index 0000000000000000000000000000000000000000..ab566f948f784991df2cb7e00f7ec65b7dd3f463
--- /dev/null
+++ b/www/py-dj50-django-redis/pkg-descr
@@ -0,0 +1,15 @@
+Django-redis is a BSD Licensed, full featured Redis cache/session
+backend for Django.
+
+Why use django-redis?
+
+ * Modular client system (pluggable clients).
+ * Master-Slave support in the default client.
+ * Used in production in several projects as cache and session storage.
+ * Supports infinite timeouts.
+ * Python 3 support in same code base.
+ * Facilities for raw access to Redis client/connection pool.
+ * Highly configurable (can emulate memcached exception behavior, for
+   example).
+ * Unix sockets supported by default.
+ * Pluggable parsers.
diff --git a/www/py-dj50-django-rich/Makefile b/www/py-dj50-django-rich/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..a5bf0654cdf53c06c6ef15724850b6ea69412840
--- /dev/null
+++ b/www/py-dj50-django-rich/Makefile
@@ -0,0 +1,27 @@
+PORTNAME=	django-rich
+PORTVERSION=	1.9.0
+CATEGORIES=	www python
+MASTER_SITES=	PYPI
+PKGNAMEPREFIX=	${PYTHON_PKGNAMEPREFIX}dj50-
+DISTNAME=	django_rich-${PORTVERSION}
+
+MAINTAINER=	kai@FreeBSD.org
+COMMENT=	Extensions for using Rich with Django
+WWW=		https://github.com/adamchainz/django-rich
+
+LICENSE=	MIT
+LICENSE_FILE=	${WRKSRC}/LICENSE
+
+BUILD_DEPENDS=	${PY_SETUPTOOLS} \
+		${PYTHON_PKGNAMEPREFIX}wheel>=0:devel/py-wheel@${PY_FLAVOR}
+RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}django50>=3.2:www/py-django50@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}rich>=10.0.0:textproc/py-rich@${PY_FLAVOR}
+
+USES=		python:3.10+
+USE_PYTHON=	autoplist pep517
+
+CONFLICTS_INSTALL=	${PYTHON_PKGNAMEPREFIX}*${PORTNAME}
+
+NO_ARCH=		yes
+
+.include <bsd.port.mk>
diff --git a/www/py-dj50-django-rich/distinfo b/www/py-dj50-django-rich/distinfo
new file mode 100644
index 0000000000000000000000000000000000000000..a11239e0ca48da2e9207987c97f55cb1a66c25da
--- /dev/null
+++ b/www/py-dj50-django-rich/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1719292487
+SHA256 (django_rich-1.9.0.tar.gz) = 1f8970ac28df5f181a03222559b5d2cf462ba1408a582e7bddbf1956bc4ee643
+SIZE (django_rich-1.9.0.tar.gz) = 59031
diff --git a/www/py-dj50-django-rich/pkg-descr b/www/py-dj50-django-rich/pkg-descr
new file mode 100644
index 0000000000000000000000000000000000000000..694881e2c95886ca69b84cd0bdccd89e086eff90
--- /dev/null
+++ b/www/py-dj50-django-rich/pkg-descr
@@ -0,0 +1,11 @@
+This package provides Extensions for using Rich with the Django framework.
+
+These extensions consist of the following subclasses:
+
+* django_rich.management.RichCommand:
+  Subclass of Django's BaseCommand class that sets its self.console to a
+  Rich Console.
+
+* django_rich.test.RichRunner:
+  Subclass of Django's DiscoverRunner with colourized outputs and nice
+  traceback rendering.
diff --git a/www/py-dj50-django-tables2/Makefile b/www/py-dj50-django-tables2/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..115fe7e13ee9a17e5cffe115f5211db6f1a221dd
--- /dev/null
+++ b/www/py-dj50-django-tables2/Makefile
@@ -0,0 +1,28 @@
+PORTNAME=	django-tables2
+DISTVERSION=	2.7.0
+CATEGORIES=	www python
+MASTER_SITES=	PYPI
+PKGNAMEPREFIX=	${PYTHON_PKGNAMEPREFIX}dj50-
+
+MAINTAINER=	kai@FreeBSD.org
+COMMENT=	Table/data-grid framework for Django
+WWW=		https://github.com/jieter/django-tables2
+
+LICENSE=	BSD2CLAUSE
+LICENSE_FILE=	${WRKSRC}/LICENSE
+
+RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}django50>=3.2:www/py-django50@${PY_FLAVOR}
+
+USES=		python:3.10+
+USE_PYTHON=	distutils autoplist
+
+CONFLICTS_INSTALL=	${PYTHON_PKGNAMEPREFIX}*${PORTNAME}
+
+NO_ARCH=		yes
+
+OPTIONS_DEFINE=		TABLIB
+
+TABLIB_DESC=		Enable support for exporting table datasets
+TABLIB_RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}tablib>=0:textproc/py-tablib@${PY_FLAVOR}
+
+.include <bsd.port.mk>
diff --git a/www/py-dj50-django-tables2/distinfo b/www/py-dj50-django-tables2/distinfo
new file mode 100644
index 0000000000000000000000000000000000000000..594898b9c461a57ebc8bcd6f3582a99c62420d64
--- /dev/null
+++ b/www/py-dj50-django-tables2/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1702731808
+SHA256 (django-tables2-2.7.0.tar.gz) = 4113fcc575eb438a12e83a4d4ea01452e4800d970e8bdd0e4122ac171af1900d
+SIZE (django-tables2-2.7.0.tar.gz) = 79583
diff --git a/www/py-dj50-django-tables2/pkg-descr b/www/py-dj50-django-tables2/pkg-descr
new file mode 100644
index 0000000000000000000000000000000000000000..5b09aff2a2f204081945570063969aef2f46c752
--- /dev/null
+++ b/www/py-dj50-django-tables2/pkg-descr
@@ -0,0 +1,3 @@
+django-tables2 simplifies the task of turning sets of data into HTML tables.
+It has native support for pagination and sorting, does for HTML tables what
+django.forms does for HTML forms.
diff --git a/www/py-dj50-django-taggit/Makefile b/www/py-dj50-django-taggit/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..fe431f8ccf871f9ec4da442cd82462d043fba869
--- /dev/null
+++ b/www/py-dj50-django-taggit/Makefile
@@ -0,0 +1,27 @@
+PORTNAME=	django-taggit
+PORTVERSION=	5.0.1
+CATEGORIES=	www python
+MASTER_SITES=	PYPI
+PKGNAMEPREFIX=	${PYTHON_PKGNAMEPREFIX}dj50-
+
+MAINTAINER=	kai@FreeBSD.org
+COMMENT=	Reusable Django application for simple tagging
+WWW=		https://github.com/jazzband/django-taggit
+
+LICENSE=	BSD3CLAUSE
+LICENSE_FILE=	${WRKSRC}/LICENSE
+
+RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}django50>=4.1:www/py-django50@${PY_FLAVOR}
+TEST_DEPENDS=	${PYTHON_PKGNAMEPREFIX}dj50-djangorestframework>0:www/py-dj50-djangorestframework@${PY_FLAVOR}
+
+USES=		python:3.10+
+USE_PYTHON=	autoplist distutils
+
+CONFLICTS_INSTALL=	${PYTHON_PKGNAMEPREFIX}*${PORTNAME}
+
+NO_ARCH=		yes
+
+do-test:
+	@cd ${WRKSRC} && ${SETENV} ${TEST_ENV} ${PYTHON_CMD} -m django test --settings=tests.settings -v3
+
+.include <bsd.port.mk>
diff --git a/www/py-dj50-django-taggit/distinfo b/www/py-dj50-django-taggit/distinfo
new file mode 100644
index 0000000000000000000000000000000000000000..6d333def1cd8443f6ff0284ad83c8900d9202ccb
--- /dev/null
+++ b/www/py-dj50-django-taggit/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1701934904
+SHA256 (django-taggit-5.0.1.tar.gz) = edcd7db1e0f35c304e082a2f631ddac2e16ef5296029524eb792af7430cab4cc
+SIZE (django-taggit-5.0.1.tar.gz) = 60372
diff --git a/www/py-dj50-django-taggit/pkg-descr b/www/py-dj50-django-taggit/pkg-descr
new file mode 100644
index 0000000000000000000000000000000000000000..be15b201b3ee0a78b3ecc8ce22150efe89e6f792
--- /dev/null
+++ b/www/py-dj50-django-taggit/pkg-descr
@@ -0,0 +1 @@
+django-taggit a simpler approach to tagging with Django.
diff --git a/www/py-dj50-django-timezone-field/Makefile b/www/py-dj50-django-timezone-field/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..1f44cf751b20a45a081ecb5eaa2d114088d89efd
--- /dev/null
+++ b/www/py-dj50-django-timezone-field/Makefile
@@ -0,0 +1,25 @@
+PORTNAME=	django-timezone-field
+DISTVERSION=	7.0
+CATEGORIES=	www python
+MASTER_SITES=	PYPI
+PKGNAMEPREFIX=	${PYTHON_PKGNAMEPREFIX}dj50-
+DISTNAME=	django_timezone_field-${DISTVERSION}
+
+MAINTAINER=	kai@FreeBSD.org
+COMMENT=	Provides database and form fields for pytz timezone objects for Django
+WWW=		https://github.com/mfogel/django-timezone-field
+
+LICENSE=	BSD2CLAUSE
+LICENSE_FILE=	${WRKSRC}/LICENSE.txt
+
+BUILD_DEPENDS=	${PYTHON_PKGNAMEPREFIX}poetry-core>=1.0.0:devel/py-poetry-core@${PY_FLAVOR}
+RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}django50>=3.2:www/py-django50@${PY_FLAVOR}
+
+USES=		python:3.10+
+USE_PYTHON=	autoplist pep517
+
+CONFLICTS_INSTALL=	${PYTHON_PKGNAMEPREFIX}*${PORTNAME}
+
+NO_ARCH=		yes
+
+.include <bsd.port.mk>
diff --git a/www/py-dj50-django-timezone-field/distinfo b/www/py-dj50-django-timezone-field/distinfo
new file mode 100644
index 0000000000000000000000000000000000000000..dd77488cde4f147fe2f29a8cae03fafd09eeafd2
--- /dev/null
+++ b/www/py-dj50-django-timezone-field/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1720617168
+SHA256 (django_timezone_field-7.0.tar.gz) = aa6f4965838484317b7f08d22c0d91a53d64e7bbbd34264468ae83d4023898a7
+SIZE (django_timezone_field-7.0.tar.gz) = 13683
diff --git a/www/py-dj50-django-timezone-field/pkg-descr b/www/py-dj50-django-timezone-field/pkg-descr
new file mode 100644
index 0000000000000000000000000000000000000000..98a3675d4d8d60a8ce4840ca81e638891e1037e9
--- /dev/null
+++ b/www/py-dj50-django-timezone-field/pkg-descr
@@ -0,0 +1,2 @@
+Provides database, form, and REST framework fields for "zoneinfo" and "pytz"
+timezone objects for Django.
diff --git a/www/py-dj50-djangorestframework/Makefile b/www/py-dj50-djangorestframework/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..6a5da241853e98f12cfbbad2bb4f10007175f52b
--- /dev/null
+++ b/www/py-dj50-djangorestframework/Makefile
@@ -0,0 +1,23 @@
+PORTNAME=	djangorestframework
+PORTVERSION=	3.15.2
+CATEGORIES=	www python
+MASTER_SITES=	PYPI
+PKGNAMEPREFIX=	${PYTHON_PKGNAMEPREFIX}dj50-
+
+MAINTAINER=	kai@FreeBSD.org
+COMMENT=	Django REST framework
+WWW=		https://www.django-rest-framework.org/
+
+LICENSE=	BSD2CLAUSE
+LICENSE_FILE=	${WRKSRC}/LICENSE.md
+
+RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}django50>=3.0:www/py-django50@${PY_FLAVOR}
+
+USES=		python:3.10+
+USE_PYTHON=	distutils autoplist
+
+CONFLICTS_INSTALL=	${PYTHON_PKGNAMEPREFIX}*${PORTNAME}
+
+NO_ARCH=		yes
+
+.include <bsd.port.mk>
diff --git a/www/py-dj50-djangorestframework/distinfo b/www/py-dj50-djangorestframework/distinfo
new file mode 100644
index 0000000000000000000000000000000000000000..fffbdb4562ac331510dc3bf9090a9d596ed6189a
--- /dev/null
+++ b/www/py-dj50-djangorestframework/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1719292736
+SHA256 (djangorestframework-3.15.2.tar.gz) = 36fe88cd2d6c6bec23dca9804bab2ba5517a8bb9d8f47ebc68981b56840107ad
+SIZE (djangorestframework-3.15.2.tar.gz) = 1067420
diff --git a/www/py-dj50-djangorestframework/pkg-descr b/www/py-dj50-djangorestframework/pkg-descr
new file mode 100644
index 0000000000000000000000000000000000000000..37e2ffa2b94a82a5e188fd524e80e4c58ebedec4
--- /dev/null
+++ b/www/py-dj50-djangorestframework/pkg-descr
@@ -0,0 +1,2 @@
+Django REST framework is a powerful and flexible toolkit that makes
+it easy to build Web APIs.
diff --git a/www/py-dj50-drf-spectacular-sidecar/Makefile b/www/py-dj50-drf-spectacular-sidecar/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..8c8f8d9d2280af8652e4cc3a33e52c6e2b797712
--- /dev/null
+++ b/www/py-dj50-drf-spectacular-sidecar/Makefile
@@ -0,0 +1,24 @@
+PORTNAME=	drf-spectacular-sidecar
+DISTVERSION=	2024.7.1
+CATEGORIES=	www python
+MASTER_SITES=	PYPI
+PKGNAMEPREFIX=	${PYTHON_PKGNAMEPREFIX}dj50-
+DISTNAME=	drf_spectacular_sidecar-${DISTVERSION}
+
+MAINTAINER=	kai@FreeBSD.org
+COMMENT=	Serve self-contained Swagger UI/Redoc distribution builds with Django
+WWW=		https://github.com/tfranzel/drf-spectacular
+
+LICENSE=	BSD3CLAUSE
+LICENSE_FILE=	${WRKSRC}/LICENSE
+
+RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}django50>=2.2:www/py-django50@${PY_FLAVOR}
+
+USES=		python:3.10+
+USE_PYTHON=	autoplist distutils
+
+CONFLICTS_INSTALL=	${PYTHON_PKGNAMEPREFIX}*${PORTNAME}
+
+NO_ARCH=		yes
+
+.include <bsd.port.mk>
diff --git a/www/py-dj50-drf-spectacular-sidecar/distinfo b/www/py-dj50-drf-spectacular-sidecar/distinfo
new file mode 100644
index 0000000000000000000000000000000000000000..4c8d7702591ce11e3d222e7208597d7102b16cce
--- /dev/null
+++ b/www/py-dj50-drf-spectacular-sidecar/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1720616350
+SHA256 (drf_spectacular_sidecar-2024.7.1.tar.gz) = beb992d6ece806a2d422ad626983e2472c0a5550de9647a7ed6764716a5abdfe
+SIZE (drf_spectacular_sidecar-2024.7.1.tar.gz) = 2393097
diff --git a/www/py-dj50-drf-spectacular-sidecar/pkg-descr b/www/py-dj50-drf-spectacular-sidecar/pkg-descr
new file mode 100644
index 0000000000000000000000000000000000000000..34144682bfdc3fb9b8716471ef4dfd7f67c0f670
--- /dev/null
+++ b/www/py-dj50-drf-spectacular-sidecar/pkg-descr
@@ -0,0 +1,5 @@
+Serve self-contained distribution builds of Swagger UI and Redoc with Django
+either via runserver or collectstatic.
+
+This Django app is an optional addition to drf-spectacular, but does not depend
+on it. It may also be used independently.
diff --git a/www/py-dj50-drf-spectacular/Makefile b/www/py-dj50-drf-spectacular/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..aaf0607d3fa54379b1bd1a63a08c0641bfb5499d
--- /dev/null
+++ b/www/py-dj50-drf-spectacular/Makefile
@@ -0,0 +1,34 @@
+PORTNAME=	drf-spectacular
+DISTVERSION=	0.27.2
+CATEGORIES=	www python
+MASTER_SITES=	PYPI
+PKGNAMEPREFIX=	${PYTHON_PKGNAMEPREFIX}dj50-
+
+MAINTAINER=	kai@FreeBSD.org
+COMMENT=	Sane/flexible OpenAPI 3 schema generation for Django REST framework
+WWW=		https://github.com/tfranzel/drf-spectacular
+
+LICENSE=	BSD3CLAUSE
+LICENSE_FILE=	${WRKSRC}/LICENSE
+
+RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}django50>=2.2:www/py-django50@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj50-djangorestframework>=3.10.3:www/py-dj50-djangorestframework@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}inflection>=0.3.1:devel/py-inflection@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}jsonschema>=2.6.0:devel/py-jsonschema@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}uritemplate>=2.0.0:net/py-uritemplate@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}pyyaml>=5.1:devel/py-pyyaml@${PY_FLAVOR}
+
+USES=		python:3.10+
+USE_PYTHON=	autoplist distutils
+
+CONFLICTS_INSTALL=	${PYTHON_PKGNAMEPREFIX}*${PORTNAME}
+
+NO_ARCH=		yes
+
+OPTIONS_DEFINE=		SIDECAR
+OPTIONS_DEFAULT=	SIDECAR
+
+SIDECAR_DESC=	Enable self-contained Swagger/Redoc UI installation
+SIDECAR_RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}dj50-drf-spectacular-sidecar>0:www/py-dj50-drf-spectacular-sidecar@${PY_FLAVOR}
+
+.include <bsd.port.mk>
diff --git a/www/py-dj50-drf-spectacular/distinfo b/www/py-dj50-drf-spectacular/distinfo
new file mode 100644
index 0000000000000000000000000000000000000000..fa78cde000b16fe7684c9a3e20c65933df972635
--- /dev/null
+++ b/www/py-dj50-drf-spectacular/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1712292804
+SHA256 (drf-spectacular-0.27.2.tar.gz) = a199492f2163c4101055075ebdbb037d59c6e0030692fc83a1a8c0fc65929981
+SIZE (drf-spectacular-0.27.2.tar.gz) = 235131
diff --git a/www/py-dj50-drf-spectacular/pkg-descr b/www/py-dj50-drf-spectacular/pkg-descr
new file mode 100644
index 0000000000000000000000000000000000000000..7f053d6244dc3320051e1cfdb062752ab134e8ab
--- /dev/null
+++ b/www/py-dj50-drf-spectacular/pkg-descr
@@ -0,0 +1,24 @@
+This project has 3 goals:
+
+* Extract as much schema information from DRF as possible.
+* Provide flexibility to make the schema usable in the real world (not only
+  toy examples).
+* Generate a schema that works well with the most popular client generators.
+
+The code is a heavily modified fork of the DRF OpenAPI generator, which is/was
+lacking all of the below listed features:
+
+* Serializers modelled as components. (arbitrary nesting + recursion supported)
+* @extend_schema decorator for customization of APIView, Viewsets,
+  function-based views, and @action
+* Authentication support (DRF natives included, easily extendable)
+* Custom serializer class support (easily extendable)
+* SerializerMethodField() type via type hinting or @extend_schema_field
+* i18n support, Tags extraction, Description extraction from docstrings
+* Request/response/parameter examples, Callback operations
+* Vendor specification extensions (x-*) in info, operations, parameters,
+  components, and security schemes
+* Sane fallbacks and sane operation_id naming (based on path)
+* Schema serving with SpectacularAPIView (Redoc and Swagger-UI views are
+  also available)
+* Optional input/output serializer component split
diff --git a/www/py-dj50-strawberry-graphql-django/Makefile b/www/py-dj50-strawberry-graphql-django/Makefile
new file mode 100644
index 0000000000000000000000000000000000000000..8b3c62ac4ac4c9ba15db1f332eb1251075e7ac13
--- /dev/null
+++ b/www/py-dj50-strawberry-graphql-django/Makefile
@@ -0,0 +1,37 @@
+PORTNAME=	strawberry-graphql-django
+DISTVERSION=	0.46.1
+CATEGORIES=	www python
+MASTER_SITES=	PYPI
+PKGNAMEPREFIX=	${PYTHON_PKGNAMEPREFIX}dj50-
+DISTNAME=	strawberry_graphql_django-${DISTVERSION}
+
+MAINTAINER=	kai@FreeBSD.org
+COMMENT=	Strawberry GraphQL Django extension
+WWW=		https://github.com/strawberry-graphql/strawberry-django
+
+LICENSE=	MIT
+LICENSE_FILE=	${WRKSRC}/LICENSE
+
+BUILD_DEPENDS=	${PY_SETUPTOOLS} \
+		${PYTHON_PKGNAMEPREFIX}poetry-core>=1.0.0:devel/py-poetry-core@${PY_FLAVOR}
+RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}django50>=3.2:www/py-django50@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}asgiref>=3.8:www/py-asgiref@${PY_FLAVOR} \
+		${PYTHON_PKGNAMEPREFIX}dj50-strawberry-graphql>=0.235.1:devel/py-dj50-strawberry-graphql@${PY_FLAVOR}
+
+USES=		python:3.10+
+USE_PYTHON=	autoplist pep517
+
+CONFLICTS_INSTALL=	${PYTHON_PKGNAMEPREFIX}*${PORTNAME}
+
+NO_ARCH=	yes
+
+OPTIONS_DEFINE=		DEBUG-TOOLBAR ENUM
+OPTIONS_DEFAULT=	DEBUG-TOOLBAR ENUM
+
+DEBUG-TOOLBAR_DESC=	Debug support
+ENUM_DESC=		Integration for Django's TextChoices/IntegerChoices enumerations
+
+DEBUG-TOOLBAR_RUN_DEPENDS=	${PYTHON_PKGNAMEPREFIX}dj50-django-debug-toolbar>=3.4:www/py-dj50-django-debug-toolbar@${PY_FLAVOR}
+ENUM_RUN_DEPENDS=		${PYTHON_PKGNAMEPREFIX}dj50-django-choices-field>=2.2.2:www/py-dj50-django-choices-field@${PY_FLAVOR}
+
+.include <bsd.port.mk>
diff --git a/www/py-dj50-strawberry-graphql-django/distinfo b/www/py-dj50-strawberry-graphql-django/distinfo
new file mode 100644
index 0000000000000000000000000000000000000000..6da71e134d456d97564c5c2a46260b202b1dd23c
--- /dev/null
+++ b/www/py-dj50-strawberry-graphql-django/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1720616210
+SHA256 (strawberry_graphql_django-0.46.1.tar.gz) = 598f0a1d58497311364c448140d57c050ae9516648ad3745143c712c5f77f4e4
+SIZE (strawberry_graphql_django-0.46.1.tar.gz) = 72781
diff --git a/www/py-dj50-strawberry-graphql-django/pkg-descr b/www/py-dj50-strawberry-graphql-django/pkg-descr
new file mode 100644
index 0000000000000000000000000000000000000000..bea2083c6410868c15650f003240a2ca55217d82
--- /dev/null
+++ b/www/py-dj50-strawberry-graphql-django/pkg-descr
@@ -0,0 +1,15 @@
+This package provides powerful tools to generate GraphQL types, queries,
+mutations and resolvers from Django models.
+
+Supported Features:
+
+* GraphQL type generation from models
+* Filtering, pagination and ordering
+* Basic create, retrieve, update and delete (CRUD) types and mutations
+* Basic Django auth support, current user query, login and logout mutations
+* Django sync and async views
+* Permission extension using django's permissioning system
+* Relay support with automatic resolvers generation
+* Query optimization to improve performance and avoid common pitfalls (e.g n+1)
+* Debug Toolbar integration with graphiql to display metrics like SQL queries
+* Unit test integration