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.
Metadata
Release files for django-w-careers 1.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| django_w_careers-1.1.0.tar.gz | 71.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| django_w_careers-1.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 180.4 kB
Release files / django_w_careers-1.1.0.tar.gz
| Download URL | django_w_careers-1.1.0.tar.gz |
|---|---|
| Size | 71.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b819e49a26e4dd178d0699fa2bc9058ccd6bfeab6860392bb47bbc4f43fe644c
|
|
BLAKE2b-256 checksum How to use checksums |
7c60ad184d8ac4935f4941992065bedf32c0b81c49a94b90b0510935223b89c6
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/2.2.1 CPython/3.12.3 Linux/6.11.0-1018-azure
|
Release files / django_w_careers-1.1.0-py3-none-any.whl
| Download URL | django_w_careers-1.1.0-py3-none-any.whl |
|---|---|
| Size | 108.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
3a37ff8727f17acb4c929dfc64c6192ea6cca2de4ddeac314bd87a6fc6564b2b
|
|
BLAKE2b-256 checksum How to use checksums |
bbdad90a466a22670fca8c917856c569ac82473ab48e3b1eb361a7a1e4608635
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/2.2.1 CPython/3.12.3 Linux/6.11.0-1018-azure
|