Skip to main content

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

CI CD Code Style: Black Code Linting: Ruff Docker Image Docker Publish PyPI - Version PyPI - Python Version PyPI - Downloads PyPI - License

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)
  • careers/index.html

    • Blocks: all from careers/base.html
    • Context: index (jobs index page), jobs (latest postings)
  • careers/category_index.html

    • Blocks: all from careers/base.html
    • Context: category (Category instance)
  • careers/category.html

    • Blocks: all from careers/base.html
    • Context: category (CategoryIndex instance)
  • careers/job.html

    • Blocks: all from careers/base.html
    • Context: job (Job instance), form (application form)
  • careers/job_landing.html

    • Blocks: all from careers/job.html
    • Context: job (Job instance)
  • careers/job_list.html

    • Blocks: all from careers/base.html
    • Context: job_list (Job queryset), filter (Filter object)
  • careers/search.html

    • Blocks: all from careers/base.html
    • Context: search_results (PageQuerySet results)

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django_w_careers-1.0.3.tar.gz (61.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

django_w_careers-1.0.3-py3-none-any.whl (86.6 kB view details)

Uploaded Python 3

File details

Details for the file django_w_careers-1.0.3.tar.gz.

File metadata

  • Download URL: django_w_careers-1.0.3.tar.gz
  • Upload date:
  • Size: 61.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.2.1 CPython/3.12.3 Linux/6.11.0-1018-azure

File hashes

Hashes for django_w_careers-1.0.3.tar.gz
Algorithm Hash digest
SHA256 cd20ed86443551ce44e4d0ae48f5d28ffa2bb7b55cf4859465d90c7f9b0b06eb
MD5 3639340aef2e5bfe51135bd23e914e91
BLAKE2b-256 ddea6721ac7e084eef175beb164d7e4e4a99fbb8f80ff1c9c1f4d17e68c8f4ab

See more details on using hashes here.

File details

Details for the file django_w_careers-1.0.3-py3-none-any.whl.

File metadata

  • Download URL: django_w_careers-1.0.3-py3-none-any.whl
  • Upload date:
  • Size: 86.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.2.1 CPython/3.12.3 Linux/6.11.0-1018-azure

File hashes

Hashes for django_w_careers-1.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 6f8ada25aaada83d0a73d7b9b02d1599d012d951c91e124a71d536a372036d14
MD5 8184d034781c17e58acbe8a910902439
BLAKE2b-256 447e1dfae30902e85a034acf2d4a05fc125cdf82b78154d2810e16db4c622e84

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page