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.1.tar.gz (58.7 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.1-py3-none-any.whl (83.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: django_w_careers-1.0.1.tar.gz
  • Upload date:
  • Size: 58.7 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.1.tar.gz
Algorithm Hash digest
SHA256 24c6d57567e67c60ed4116d36897057ae70ab65f73f38c37bffccd9136ab563a
MD5 9f7b6e39371e7091f0ba995a1c69ae6b
BLAKE2b-256 f9c6cea604860c0d18de1d3a1666912feb6f38593839c9fee1f6fe6521df6601

See more details on using hashes here.

File details

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

File metadata

  • Download URL: django_w_careers-1.0.1-py3-none-any.whl
  • Upload date:
  • Size: 83.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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 95b0ac8643ce25b16613822ded76f08bef3212d398c997e585ed90c6dd9ca4e8
MD5 e8e441b752b89ff904ddc4331af23274
BLAKE2b-256 2256ac41c92838206614d995302ab393b4ac76ef9b449191292470e10d36ab53

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