Skip to content
htmldjango filetype omnicomplete - completes template tags/filters/variables
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.

Vim htmldjango autocomplete


I have a YCM version of this plugin that is still seeing some updates.

Join the chat at

An omnicomplete tailored to django templates "tags/variables/filters/templates"

Repo: git://


( Note the screenshot is from the youcompleteme rewrite found here


1. Filters

    {{ somevar|a<c-x><c-o>}} should complete 'add' , 'addslashes'

2. Tags

    {% cy<c-x><x-o> %} should complete 'cycle'

3. Load statements

    It also should grab any libs you have {% load tag_lib %} in the file.
    Although it needs them in INSTALLED_APPS.

    {% load <c-x><c-o> %} will complete libraries (eg. 'cache', 'humanize')

4. template filenames

    {% extends '<c-x><c-o>' %} will list base.html ... etc

5. url complete

    {% url <c-x><c-o> %} should complete views and named urls

6. super block complete

    eg {% block c<c-x><c-o> %} to complete 'content' or something defined
    in an extended template.

7. static files complete

    eg {% static "r<c-x><c-o>" %}

    <script src="{% static "<c-x><c-o>" %}" /> - completes js files in static
    <style src="{% static "<c-x><c-o>" %}" /> - completes css files in static
    <img src="{% static "<c-x><c-o>" %}" /> - completes img files in static

8. optional variable name completion (placeholder)

    {{ s<c-x><x-o> }}

    will complete any maps defined in the python htmldjango_opts['variable']
    dict list. See below for info.

Where possible info panels show the functions __doc__. Most of the
internal ones are decent.




1. I like pathogen/Vundle clone into ~/.vim/bundle directory.

    Alternately just stick the vim file in your ~/.vim/autoload/ dir.

2. in .vimrc set the omnifunc Eg.

    au FileType htmldjango set omnifunc=htmldjangocomplete#CompleteDjango

3. Optional: At the moment you need to force a html flavour for htmlcompletion

    in .vimrc

    let g:htmldjangocomplete_html_flavour = 'html401s'

    :verbose function htmlcomplete#CheckDoctype for DocType details

        'html401t' 'xhtml10s' 'html32' 'html40t' 'html40f' 'html40s'
        'html401t' 'html401f' 'html401s' 'xhtml10t' 'xhtml10f' 'xhtml10s'

        'html5' if you have html5.vim

4. matchpair notes

    This plugin uses matchpair and needs to be inside a closed django tag. 
    This is fine if you are using snipmate. Also you might want auto
    closing maps such as follows.

    au FileType htmldjango inoremap {% {% %}<left><left><left>
    au FileType htmldjango inoremap {{ {{ }}<left><left><left>


django needs to be in sys.path along with DJANGO_SETTINGS_MODULE in your

To test...

:python import django

should not result in an error

:python from django.conf import settings; print settings.INSTALLED_APPS
:python from django.conf import settings; print settings.TEMPLATE_DIRS

should show the apps template dirs you need

I've only tested this on a mac with vim 7.3 and django 1.4
You can’t perform that action at this time.