Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Syntastic + Django

I just started developing on Django, and then I thought using the Syntastic syntax checker on it would be a good idea.

The problem is that it complains about some things being wrong when, in fact, they aren't.

Examples:

  1. For

    from django.core.urlresolvers import reverse
    

    I get:

    error| [F0401] Unable to import 'django.core.urlresolvers'
    
  2. For

    amount = self.sale_set.filter(date__year=year).aggregate(sum=Sum('amount'))["sum"]
    

    I get (where self is an Album)

    error| [E1101, Album.get_sales_total] Instance of 'Album' has no 'sale_set' member
    

This code runs perfectly even with these "errors", but how can I make Syntastic behave correctly?

like image 782
Falassion Avatar asked Aug 22 '12 13:08

Falassion


2 Answers

piggybacking on @supervacuo's answer:

there is a way to get this working for syntastic and it's rather straightforward, if not easy to figure out for someone unfamiliar with syntastic options (like, say, me):

in your .vimrc, add this line:

let g:syntastic_python_pylint_args = "--load-plugins pylint_django"

of course, this does require pylint-django be installed in your environment

like image 184
nthall Avatar answered Oct 20 '22 07:10

nthall


Both of these messages come from pylint — you can see fuller explanations with pylint --help-msg=$ID, or on http://pylint-messages.wikidot.com/.

You can disable the checks with e.g. from django.core.urlresolvers import reverse # pylint: disable=F0401, but that gets tiresome pretty quickly.

There's a pylint plugin for Django which will definitely fix your E1101 (and I hope the F0401 too). Maybe have a go at installing the plugin and configuring Syntastic to use it?

like image 20
supervacuo Avatar answered Oct 20 '22 05:10

supervacuo