diff --git a/mode/django/django.js b/mode/django/django.js
index 7fae876c16d4cd3dde5a2b4d5f200d01a5865e57..eb8d65914ee0d6e5c8b87235a4f34e3cf525e7bc 100644
--- a/mode/django/django.js
+++ b/mode/django/django.js
@@ -35,11 +35,13 @@
                    "truncatechars_html", "truncatewords", "truncatewords_html",
                    "unordered_list", "upper", "urlencode", "urlize",
                    "urlizetrunc", "wordcount", "wordwrap", "yesno"],
-        operators = ["==", "!=", "<", ">", "<=", ">=", "in", "not", "or", "and"];
+        operators = ["==", "!=", "<", ">", "<=", ">="],
+        wordOperators = ["in", "not", "or", "and"];
 
     keywords = new RegExp("^\\b(" + keywords.join("|") + ")\\b");
     filters = new RegExp("^\\b(" + filters.join("|") + ")\\b");
     operators = new RegExp("^\\b(" + operators.join("|") + ")\\b");
+    wordOperators = new RegExp("^\\b(" + wordOperators.join("|") + ")\\b");
 
     // We have to return "null" instead of null, in order to avoid string
     // styling as the default, when using Django templates inside HTML
@@ -270,6 +272,11 @@
         return "operator";
       }
 
+      // Attempt to match a word operator
+      if (stream.match(wordOperators)) {
+        return "keyword";
+      }
+
       // Attempt to match a keyword
       var keywordMatch = stream.match(keywords);
       if (keywordMatch) {