Rapidly generate Django apps, models, views, URLs, and templates with a single command.
DJ Maker is a powerful code generation tool that accelerates Django development by automatically creating complete CRUD applications, API endpoints, and boilerplate code. Say goodbye to repetitive tasks and hello to productive development! ⚡
- Full CRUD Apps: Generate complete Django applications with models, views, URLs, and templates
- Multiple View Types: Support for function-based views, class-based views, and DRF API views
- Smart Templates: Beautiful, responsive HTML templates with Bootstrap styling
- Advanced URL Patterns: Nested URLs, namespacing, and API versioning support
- Rich CLI Interface: Beautiful, colored terminal output powered by Rich
- Interactive Prompts: Guided setup with intelligent defaults
- Preview Mode: See what will be generated before creating files
- Type Safety: Full type annotations and mypy support
- API-First Development: Generate Django REST Framework endpoints automatically
- Custom Namespacing: Support for API versioning and modular architectures
- Template Customization: Jinja2-powered templates with extensibility
- Project Integration: Seamlessly integrates with existing Django projects
pip install dj-maker
# Create a new Django project with best practices
dj init myblog
# Navigate to your project
cd myblog
# Create a complete blog app with CRUD operations
dj generate blog Post --view-type=class
# Generate an API-first app with DRF integration
dj generate api articles Article --view-type=api --namespace=v1
# Create function-based views for maximum control
dj generate shop Product --view-type=function
# Create a new Django app with URLs and tests
dj init-app users
# Create app with specific URL template
dj init-app api --url-template=api --include-tests
Generate a complete blog application with class-based views:
dj generate blog Post --view-type=class
Generated structure:
blog/
├── __init__.py
├── admin.py # Admin interface with list_display, filters
├── apps.py
├── models.py # Post model with common fields (title, description, timestamps)
├── views.py # Complete CRUD class-based views
├── urls.py # RESTful URL patterns
├── templates/blog/ # Bootstrap-styled templates
│ ├── base.html
│ ├── post_list.html
│ ├── post_detail.html
│ ├── post_form.html
│ └── post_confirm_delete.html
└── migrations/
Create a REST API with Django REST Framework:
dj generate api products Product --view-type=api --namespace=v1
Features:
- ViewSets and Serializers
- Router-based URL configuration
- API versioning support
- Both API and web views
Generate nested URL structures:
dj generate articles Article --view-type=advanced
Generated URLs:
urlpatterns = [
path('', views.ArticleListView.as_view(), name='article-list'),
path('create/', views.ArticleCreateView.as_view(), name='article-create'),
path('<int:pk>/', include([
path('', views.ArticleDetailView.as_view(), name='article-detail'),
path('edit/', views.ArticleUpdateView.as_view(), name='article-update'),
path('delete/', views.ArticleDeleteView.as_view(), name='article-delete'),
])),
path('search/', views.ArticleSearchView.as_view(), name='article-search'),
path('export/', views.ArticleExportView.as_view(), name='article-export'),
]
Create versioned APIs for scalable applications:
# Generate v1 API
dj generate api users User --namespace=api_v1 --view-type=api
# Generate v2 API (in separate app)
dj generate api_v2 users User --namespace=api_v2 --view-type=api
URL Structure:
/api/v1/users/ # api_v1:user-list
/api/v1/users/1/ # api_v1:user-detail
/api/v2/users/ # api_v2:user-list
/api/v2/users/1/ # api_v2:user-detail
Django CLI creates beautiful, responsive templates using Bootstrap 5:
<!-- Responsive table with search, pagination, and actions -->
<div class="container">
<div class="d-flex justify-content-between align-items-center mb-4">
<h1>Posts</h1>
<a href="{% url 'blog:post-create' %}" class="btn btn-primary">
<i class="fas fa-plus"></i> New Post
</a>
</div>
<!-- ... responsive table with Bootstrap styling ... -->
</div>
<!-- Modern form with validation and UX enhancements -->
<form method="post" class="needs-validation" novalidate>
{% csrf_token %}
{{ form }}
<div class="mt-3">
<button type="submit" class="btn btn-primary">Save</button>
<a href="{% url 'blog:post-list' %}" class="btn btn-secondary">Cancel</a>
</div>
</form>
dj init <project_name> # Create new Django project
dj init-app <app_name> # Initialize new app
dj generate <app> <model> [options]
Options:
--view-type [function|class|api|advanced] View type (default: class)
--namespace TEXT URL namespace for versioning
--dry-run Preview files without creating
--no-templates Skip HTML template generation
--help Show help message
dj urls create <app_name> # Create urls.py for an app
dj urls list # List apps and their URL status
dj urls check <app_name> # Check specific app's URLs
dj list-models [app_name] # List models in project/app
dj --version # Show version information
dj --help # Show all available commands
- Install dj-maker in your project environment
- Generate new apps directly in your existing project
- Update main URLs manually or let dj suggest the integration:
# Add to your main urls.py
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('blog/', include('blog.urls')), # Generated app
path('api/v1/', include('api.urls')), # Generated API
]
Django CLI works with your existing Django settings. For API apps, ensure you have DRF configured:
# settings.py
INSTALLED_APPS = [
# ... your apps
'rest_framework',
'blog', # Generated app
]
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 20
}
- 🎯 92% Test Coverage across all modules
- ✅ 128 Comprehensive Tests covering all functionality
- 🔒 Type Safety with full mypy support
- 🚀 Production Ready with comprehensive error handling
- 📚 Well Documented with extensive examples
- URLs Generator: 100% - Perfect coverage
- Models Generator: 99% - Near perfect
- Views Generator: 92% - Excellent
- Templates Generator: 89% - Very good
- Main CLI: 89% - Excellent
- Core Package: 100% - Perfect
We welcome contributions! Here's how to get started:
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature
- Run tests:
pytest tests/ --cov=src/
- Submit a pull request
git clone https://github.com/giacomo/dj-maker.git
cd dj-maker
python -m venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
pip install -e ".[dev]"
pytest
- Python: 3.10+
- Django: 4.2, 5.1, 5.2
- Dependencies: Automatically managed via pip
- Template Customization: Custom template directories
- Model Field Inference: Smart field type detection
- Migration Generation: Automatic migration creation
- Testing Generation: Auto-generate test cases
- Docker Integration: Container-ready project setup
- GraphQL Support: Generate GraphQL schemas
- Bug Reports: GitHub Issues
- Feature Requests: GitHub Discussions
- Documentation: Wiki
This project is licensed under the MIT License - see the LICENSE file for details.
- Django community for the amazing framework
- Typer for the excellent CLI framework
- Rich for beautiful terminal output
- Jinja2 for powerful templating
Made with ❤️ by Giacomo