A reusable, production-ready job posting application (One employer) built with Python, Django, Django REST Framework, and Wagtail CMS, styled with Tailwind CSS and daisyUI. It provides modern theming, optional APIs, and sensible defaults.
Project description
django-w-careers
Overview
A reusable, production-ready job posting application (One employer) built with Python, Django, Django REST Framework, and Wagtail CMS, styled with Tailwind CSS and daisyUI. It provides modern theming, optional APIs, and sensible defaults so you can deploy quickly and grow with confidence.
Key features
- Full CMS: Wagtail-powered editorial interface with pages, media management, search, and governance.
- Modern UI: Utility-first styling with Tailwind CSS and responsive layouts.
- Theming: Out-of-the-box daisyUI themes plus support for custom themes.
- API ready: Optional REST endpoints for headless use and integrations.
- CI/CD: GitHub Actions workflows for automated testing, linting, and deployment.
- Dependencies: Managed by Poetry for reproducible installs.
- Formatting: Black for consistent, automatic code styling.
- Linting: Ruff for fast, comprehensive code quality checks.
- Testing: Django test runner for unit and integration suites.
- Boilerplate included:
.gitignore,pyproject.toml, and other config files to jump-start your project.
Installation
pip install django-w-careers
Configuration
Add installed apps
# project/settings.py
INSTALLED_APPS = [
"careers",
"careers.api", # Optional: REST API
"careers.apps.categories",
"careers.apps.home", # Optional: If you have a Home model ('home.Home')
"careers.apps.indexes",
"careers.apps.jobs",
"careers.apps.tags",
"careers.cms",
"careers.ui",
# Dependencies
"rest_wind", # Optional: REST API
"rest_framework", # Optional: REST API
"wagtail_blocks",
"django_countries",
"django_filters",
"wagtail.contrib.search_promotions",
"wagtail.contrib.forms",
"wagtail.contrib.redirects",
"wagtail.embeds",
"wagtail.sites",
"wagtail.users",
"wagtail.snippets",
"wagtail.documents",
"wagtail.images",
"wagtail.search",
"wagtail.admin",
"wagtail",
"modelcluster",
"taggit",
# ...
]
Run migrations
python manage.py migrate
Update URL configuration
# project/urls.py
from django.urls import include, path
from wagtail import urls as wagtail_urls
from wagtail.admin import urls as wagtailadmin_urls
from wagtail.documents import urls as wagtaildocs_urls
urlpatterns = [
path("", include("careers.ui.urls")),
path("api/", include("careers.api.urls")), # Optional: REST API
path("api/", include("rest_framework.urls")), # Optional: REST API
# ...
path("documents/", include(wagtaildocs_urls)),
path("dashboard/", include(wagtailadmin_urls)),
path("", include(wagtail_urls)), # Always last
]
Theming and templates
All templates in django-w-careers extend careers/base.html. Create and customize this base template to match your brand.
Create the template directory
mkdir -p your_app/templates/careers
Create the base template
touch your_app/templates/careers/base.html
You can extend or override any provided template for full control.
Available blocks and context
-
careers/base.html- Blocks:
theme,toggle_theme,head,title,styles,navbar,branding,navbar_center,navbar_end,content,footer,drawer_branding,drawer_content - Context:
home(site root page)
- Blocks:
-
careers/index.html- Blocks: all from
careers/base.html - Context:
index(jobs index page),jobs(latest postings)
- Blocks: all from
-
careers/category_index.html- Blocks: all from
careers/base.html - Context:
category(Category instance)
- Blocks: all from
-
careers/category.html- Blocks: all from
careers/base.html - Context:
category(CategoryIndex instance)
- Blocks: all from
-
careers/job.html- Blocks: all from
careers/base.html - Context:
job(Job instance),form(application form)
- Blocks: all from
-
careers/job_landing.html- Blocks: all from
careers/job.html - Context:
job(Job instance)
- Blocks: all from
-
careers/job_list.html- Blocks: all from
careers/base.html - Context:
job_list(Job queryset),filter(Filter object)
- Blocks: all from
-
careers/search.html- Blocks: all from
careers/base.html - Context:
search_results(PageQuerySetresults)
- Blocks: all from
Contributing
We welcome contributions from the community. Please review our CONTRIBUTING guide for setup, coding conventions, and workflow. Opening an issue before major changes helps align on scope.
Support
For questions, bug reports, or feature requests, open an issue or start a thread in GitHub Discussions.
License
This project is released under the MIT License. See the LICENSE file for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file django_w_careers-0.1.3.tar.gz.
File metadata
- Download URL: django_w_careers-0.1.3.tar.gz
- Upload date:
- Size: 57.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.2.0 CPython/3.12.3 Linux/6.11.0-1018-azure
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c44f7d04181d26c2d4c19b71f55e34a39d959511892e5c69026406251d3b577c
|
|
| MD5 |
fb61a5d8ccb523b18ce7ae08dc2ae4da
|
|
| BLAKE2b-256 |
3424abbe69ec75d9fc83a83fcac438cc56d03c89b927b6be1e2fcb0facb3ff84
|
File details
Details for the file django_w_careers-0.1.3-py3-none-any.whl.
File metadata
- Download URL: django_w_careers-0.1.3-py3-none-any.whl
- Upload date:
- Size: 84.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/2.2.0 CPython/3.12.3 Linux/6.11.0-1018-azure
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f4569d8a60285dea1bf096c17ca1c93e9c50bb31ad3ccae981692e9bebd8d03e
|
|
| MD5 |
712266e9c91500a85d7d510a073a9807
|
|
| BLAKE2b-256 |
c9129a9ebb551dea850724b616fac7816ed241c6445a6b43a9773be0da366e23
|