Improvements to the handling of Django related files in Vim, some of which are
based on Steve Losh's htmldjango
scripts.
Why?
Django support in Vim sucks.
What Sucks? | Sucks? |
---|---|
Hard-coded htmldjango filetype for any .html file |
Yes |
HTML indentation | Yes |
QuerySet completions |
Yes |
settings.py variable completions |
Yes |
Template tag and filter completions | Yes |
Template file completion for {% include %} and {% extends %} |
Yes |
Template file completion for rendering functions | Yes |
To help you understand the difference this plugin makes, I used science:
As you can see, one line goes up. However, the other line doesn't go up that much. It doesn't get any clearer than that.
Improvements
A summary of improvements to Django development in Vim.
General
- Django is detected by searching parent directories for clues that indicate the current file is within a Django project.
b:is_django
is set in any file that's within a Django project. This could be useful for your personal scripts.b:is_django_settings
is set if the file issettings.py
or if the file is in the same directory assettings.py
. (b:is_django
will still be set)- Optionally append
.django
to thefiletype
for files found within a Django project. - If a Django project's
manage.py
script is found, completions will include your settings and templatetags found inINSTALLED_APPS
. g:django_filetypes
takes a list of glob patterns to append thedjango
filetype to matching files. e.g.*.xml
will have the filetypexml.django
if the file is found in a Django project.
Python
- Completions for Django settings when
b:is_django_settings
is present. - Completions for
settings.
whenb:is_django
is present in a.py
file. - Completions for template files when using
render()
,get_template()
,render_to_string()
,render_to_response()
, ortemplate_name =
. - QuerySets could be lurking anywhere. That's why QuerySet completions will be included for basically anything after a period.
- If you are using
Ultisnips
, Django snippets are enabled andUltiSnips#FileTypeChanged()
is called to ensure that:UltiSnipsEdit
opensdjango.snippets
by default instead ofpython.snippets
.
HTML
- The filetype is set to
htmldjango
when editing HTML files. - Basic completions for template tags and filters.
- Completions for template files when using
{% extends %}
or{% include %}
. - Django tags are indented correctly, including custom tags.
matchit
configuration for Django tags, including custom tags. Additionally, the cursor is placed at the beginning of the tag name.- Tag and variable blocks are highlighted within script tags, style tags, and HTML attributes.
- If you are using Ultisnips, HTML snippets are enabled and
UltiSnips#FileTypeChanged()
is called to ensure that:UltiSnipsEdit
openshtmldjango.snippets
by default instead ofhtml.snippets
.