joshuadavidthomas/django-language-server

A language server for the Django web framework

django-language-server

PyPI PyPI - Python Version Django Version

A language server for the Django web framework.

[!CAUTION] This project is in early stages. ~~All~~ Most features are incomplete and missing.

Features

  • [x] Completions - Template tag and filter autocompletion with snippets Completions
  • [x] Diagnostics - Real-time error checking and validation Diagnostics
  • [ ] Go to definition - Jump to template, block, or variable definitions
    • [x] Template navigation for {% extends %} and {% include %}
    • [x] Exact template-name highlighting in editors that support definition links
    • [ ] Block and variable definitions
  • [ ] Find references - See where templates, blocks, and variables are used
    • [x] Template references for {% extends %} and {% include %}
    • [ ] Block and variable references
  • [x] Document links - Click through resolved template references and template libraries
    • [x] Template names in {% extends %} and {% include %}
    • [x] Template libraries in {% load %}
  • [x] Folding ranges - Fold Django template regions Folding ranges
  • [x] Hover - View documentation for Django template tags, filters, libraries, and template references Hover tag Hover filter Hover template
  • [x] Code actions - Quick fixes for unloaded template libraries and mismatched closing block names
  • [x] Formatting - Opt-in whole-document Django template formatting through djangofmt
  • [ ] Rename - Refactor names across files
  • [x] Document symbols - Outline view of template structure
  • [ ] Workspace symbols - Search across all project templates
  • [ ] Signature help - Parameter hints while typing

Getting Started

Set up your editor's LSP client to run the server:

  • VS Code - Install the extension from the marketplace
  • Neovim - Configure with vim.lsp.config()
  • Sublime Text - Set up with LSP package
  • Zed - Install the extension

See all client configurations.

Most editors can use uvx --from django-language-server djls serve to run the server on-demand without installing it. Alternatively, install it globally first:

uv tool install django-language-server
# or: pipx install django-language-server

See the Installation guide for more options including pip, standalone binaries, and building from source.

Once configured, open any Django template file in your project to get:

  • Template tag and filter completions with snippets
  • Real-time syntax validation and diagnostics
  • Hover documentation for template tags, filters, libraries, and template references
  • Navigation to template definitions and references, including exact template-name highlighting for goto in supported editors
  • Clickable links for {% extends %}, {% include %}, and {% load %} names
  • Quick fixes for unloaded template tags/filters and mismatched {% endblock %} names
  • Folding for Django template regions
  • Outline symbols for template structure
  • Opt-in whole-document formatting through djangofmt

Documentation

Visit djls.joshthomas.dev for full documentation including installation guides, configuration options, and editor setup instructions.

Contributing

See the contributor guide for development setup, testing, snapshots, and code-quality workflows.

License

django-language-server is licensed under the Apache License, Version 2.0. See the LICENSE file for more information.


django-language-server is not associated with the Django Software Foundation.

Django is a registered trademark of the Django Software Foundation.

Stars
22
100.00% more than last month
Forks
0
Open Issues
4