diff --git a/docs/Makefile b/docs/Makefile
index 21b8a9cbe9..f2502be3a7 100644
--- a/docs/Makefile
+++ b/docs/Makefile
@@ -37,6 +37,8 @@ help:
@echo " changes to make an overview of all changed/added/deprecated items"
@echo " linkcheck to check all external links for integrity"
@echo " doctest to run all doctests embedded in the documentation (if enabled)"
+ @echo " spelling to check for typos in documentation"
+
clean:
-rm -rf $(BUILDDIR)/*
@@ -143,3 +145,9 @@ doctest:
$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
@echo "Testing of doctests in the sources finished, look at the " \
"results in $(BUILDDIR)/doctest/output.txt."
+
+spelling:
+ $(SPHINXBUILD) -b spelling $(ALLSPHINXOPTS) $(BUILDDIR)/spelling
+ @echo
+ @echo "Check finished. Wrong words can be found in " \
+ "$(BUILDDIR)/spelling/output.txt."
diff --git a/docs/conf.py b/docs/conf.py
index ff919a6265..f10354f244 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -33,6 +33,17 @@ needs_sphinx = '1.0'
# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
extensions = ["djangodocs", "sphinx.ext.intersphinx"]
+# Spelling check needs an additional module that is not installed by default.
+# Add it only if spelling check is requested so docs can be generated without it.
+if 'spelling' in sys.argv:
+ extensions.append("sphinxcontrib.spelling")
+
+# Spelling language.
+spelling_lang = 'en_US'
+
+# Location of word list.
+spelling_word_list_filename = 'spelling_wordlist'
+
# Add any paths that contain templates here, relative to this directory.
# templates_path = []
diff --git a/docs/internals/contributing/writing-documentation.txt b/docs/internals/contributing/writing-documentation.txt
index 94a9ae3cb4..2ceef3d05d 100644
--- a/docs/internals/contributing/writing-documentation.txt
+++ b/docs/internals/contributing/writing-documentation.txt
@@ -348,3 +348,27 @@ look better:
(that's a tilde) to get just the "last bit" of that path. So
``:class:`~django.contrib.contenttypes.models.ContentType``` will just
display a link with the title "ContentType".
+
+Spelling check
+--------------
+
+Before you commit your docs, it's a good idea to run the spelling checker.
+You'll need to install a couple packages first:
+
+* `pyenchant `_ (which requires
+ `enchant `_)
+
+* `sphinxcontrib-spelling
+ `_
+
+Then from the ``docs`` directory, run ``make spelling``. Wrong words (if any)
+along with the file and line number where they occur will be saved to
+``_build/spelling/output.txt``.
+
+If you encounter false-positives (error output that actually is correct), do
+one of the following:
+
+* Surround inline code or brand/technology names with grave accents (`).
+* Find synonyms that the spell checker recognizes.
+* If, and only if, you are sure the word you are using is correct - add it
+ to ``docs/spelling_wordlist`` (please keep the list in alphabetical order).
diff --git a/docs/spelling_wordlist b/docs/spelling_wordlist
new file mode 100644
index 0000000000..03502242e2
--- /dev/null
+++ b/docs/spelling_wordlist
@@ -0,0 +1,727 @@
+Aalto
+accessor
+Aceh
+addslashes
+admin
+admindocs
+admins
+aggregator
+Ai
+Alchin
+amet
+Anssi
+apnumber
+Apolloner
+app
+appname
+apps
+architected
+arg
+args
+assistive
+attr
+auth
+autoclobber
+autocommit
+autoconf
+autodetect
+autodetectable
+autodetection
+autodetector
+autodiscovery
+autoescape
+autoescaping
+autogenerated
+autoincrement
+autoreload
+Aymeric
+backend
+backends
+backport
+backported
+backports
+backtraces
+basename
+bbcontains
+bboverlaps
+Bcc
+BCC'ed
+bcrypt
+Bcrypt
+beatles
+Beaven
+Berners
+Biggs
+Bjørn
+blocktrans
+blog
+Boersma
+boilerplatish
+Bokmål
+bolded
+bookmarklets
+Bookmarklets
+bpython
+Bronn
+bugfix
+bugfixes
+bugfixing
+builtin
+builtins
+Byteorder
+bytestring
+bytestrings
+cacheable
+cachetable
+callables
+camelcase
+camelCase
+capfirst
+changelist
+Changelist
+changepassword
+changeset
+charset
+checkbox
+checkboxes
+checkin
+Checkin
+clearable
+clearsessions
+clickable
+clickjacking
+cms
+codebase
+codec
+collectstatic
+commenter
+commenters
+committer
+committers
+compilemessages
+concat
+conf
+config
+contactdata
+ContentType
+contenttypes
+contrib
+coveredby
+Córdoba
+createcachetable
+createdb
+createsuperuser
+criticals
+cron
+crontab
+crossref
+csrf
+csrfmiddlewaretoken
+css
+csv
+Ctrl
+customizability
+daemonizing
+Danga
+Darussalam
+dat
+databrowse
+Databrowse
+datatype
+datetimes
+dbshell
+de
+deconstruct
+deconstructing
+deepcopy
+deserialization
+deserialize
+deserialized
+deserializer
+deserializing
+Deserializing
+dev
+dict
+dictConfig
+dicts
+dictsort
+dictsortreversed
+diff
+diffsettings
+dirmod
+distro
+divisibleby
+django
+djangojs
+djangonaut
+djangoproject
+dm
+docstring
+docstrings
+doctests
+doctype
+documentational
+dos
+DoS
+downloadable
+Dreamhost
+Dreamweaver
+drilldown
+dropdown
+drupal
+dumpdata
+Dunck
+dwithin
+editability
+Endian
+endswith
+Enero
+escapejs
+esque
+Ess
+Etag
+ETag
+ETags
+exe
+extendible
+fabfile
+fabfiles
+Facebook
+fallback
+fallbacks
+faq
+fastcgi
+FastCGI
+fcgid
+fieldset
+fieldsets
+filesizeformat
+filesystem
+filesystems
+findstatic
+firstof
+flatpage
+Flatpage
+flatpages
+Flatpages
+floatformat
+flup
+followup
+fooapp
+formfield
+formset
+formsets
+formtools
+freenode
+Friedl
+Frysian
+fu
+gdal
+geo
+geoip
+geolibs
+geolocalized
+geolocation
+geoquerysets
+geospatial
+Geospatial
+Gettext
+GiB
+gid
+gis
+github
+globalization
+google
+Googol
+Graz
+Greenhill
+grey
+gte
+gunicorn
+Gunicorn
+gz
+GZip
+hackish
+handheld
+hardcode
+hardcoded
+hardcoding
+hashable
+hashers
+headerlist
+Hoerner
+Holovaty
+Homebrew
+honeypot
+Honza
+hostname
+hostnames
+howto
+html
+http
+https
+hyperlinks
+icontains
+Idan
+ie
+iendswith
+ies
+iexact
+ifchanged
+ifequal
+ifnotequal
+iframe
+inbox
+Incompliance
+indices
+ing
+ini
+init
+inline
+inlines
+inspectdb
+intcomma
+internet
+intranet
+intword
+ip
+ipsum
+Ipsum
+IPv
+IPython
+irc
+iregex
+iriencode
+ise
+isnull
+iso
+istartswith
+iterable
+iterables
+itunes
+iTunes
+ize
+Jannis
+javascript
+jQuery
+JServ
+Julien
+jython
+Kääriäinen
+keyservers
+KiB
+kilometre
+Kocherhans
+Koziarski
+Král
+kwarg
+kwargs
+Kyngesburye
+latin
+lawrence
+Lawrence
+lexer
+lhs
+lifecycle
+lifecycles
+lighttpd
+linebreaks
+linebreaksbr
+linenumbers
+linestring
+Livni
+ljust
+loaddata
+localdomain
+localflavor
+localflavors
+localhost
+localizable
+localtime
+lorem
+lt
+lte
+Magee
+makemessages
+makemigrations
+Mapnik
+MBR
+memcache
+memcached
+mentorship
+mercator
+metaclass
+metaclasses
+metadata
+metre
+MiB
+micrometre
+middleware
+middlewares
+migrationname
+millimetre
+Minification
+Mispelon
+mixin
+mixins
+modelforms
+modelformset
+modwsgi
+monkeypatched
+Montréal
+multijoins
+multiline
+multipart
+multipolygon
+multithreaded
+multithreading
+Mumbai
+myapp
+myproject
+mysite
+mysql
+naïve
+namespace
+namespaced
+Namespaced
+namespaces
+namespacing
+Nanggroe
+naturalday
+naturaltime
+nd
+needsinfo
+neuroscientist
+newforms
+nginx
+nonspatial
+nullable
+OAuth
+offline
+OGC
+OGR
+ogrinspect
+oldforms
+online
+orderable
+O'Reilly
+org
+Orléans
+orm
+outbox
+Outdim
+outfile
+paginator
+Palau
+params
+parens
+pdf
+perl
+permalink
+pessimization
+Peucker
+pgAdmin
+php
+pickleable
+picosecond
+PIL
+pingback
+pingbacks
+Pinney
+plaintext
+plugin
+plugins
+po
+podcast
+popup
+postgis
+postgres
+Postgres
+postgresql
+pq
+pre
+preconfigured
+prefetch
+prefetched
+prefetching
+prefork
+preforked
+prepend
+prepended
+prepending
+prepopulate
+prepopulated
+prepopulates
+preprocess
+programmatically
+projectname
+proxied
+proxying
+pseudocode
+psycopg
+Puthraya
+py
+pyformat
+Pygments
+pysqlite
+pythonic
+Pythonista
+pytz
+qs
+Québec
+queryset
+querysets
+Querysets
+querystring
+Quickstart
+quoteless
+Radziej
+rc
+rebase
+rebased
+rebasing
+recomputation
+refactor
+refactored
+refactorings
+refactors
+referer
+regex
+regexes
+reimplement
+reindex
+removetags
+repo
+reprojection
+reraise
+reST
+reStructuredText
+reupload
+Reusability
+revalidate
+rhs
+rjust
+roadmap
+Roald
+rss
+runfcgi
+runnning
+runserver
+safeseq
+Sandvik
+savepoint
+savepoints
+Schaub
+screencast
+screencasts
+screenshot
+screenshots
+sdist
+semimajor
+semiminor
+serializable
+serializer
+serializers
+sessionid
+setuptools
+sha
+shapefile
+shapefiles
+sharding
+sid
+simultaneously
+sitemap
+sitemaps
+sitewide
+slashdot
+sliceable
+slippy
+slugify
+solaris
+Solr
+spaceless
+spam
+spammers
+spatialite
+Springmeyer
+sql
+sqlall
+sqlclear
+sqlcustom
+sqldropindexes
+sqlflush
+sqlindexes
+sqlmigrate
+sqlsequencereset
+ssi
+stacktrace
+startapp
+startproject
+startswith
+stateful
+staticfile
+staticfiles
+stderr
+stdlib
+stdout
+stringformat
+striptags
+Stufft
+stylesheet
+stylesheets
+subclass
+subclassed
+subclassing
+subdir
+subdomain
+subdomains
+sublanguage
+subminor
+subpackage
+subpackages
+subqueries
+subquery
+subselect
+subtemplate
+subtemplates
+subviews
+subwidgets
+symlink
+symlinking
+symlinks
+syncdb
+sysadmin
+systemwide
+tablespace
+tablespaces
+tagline
+Tamlyn
+tarball
+tarballs
+Tastypie
+teardown
+templatability
+templatetag
+templating
+testcase
+testserver
+textarea
+Thejaswi
+timedelta
+timeframe
+timeline
+timelines
+timesaving
+timesince
+timestamp
+timeuntil
+titlecase
+tmp
+toolbar
+toolset
+trac
+Transifex
+Tredinnick
+triager
+triagers
+truncatechars
+truncatewords
+tv
+txt
+tz
+ubuntu
+Ubuntuusers
+ul
+umask
+unapply
+unapplying
+uncheck
+unclaim
+uncopyable
+unescape
+unescaped
+ungrouped
+unhandled
+unharmful
+unicode
+uninstall
+uninstalling
+uninstalls
+uniterated
+unittest
+unittests
+unlocalize
+unmigrated
+unparseable
+unpickle
+unpickled
+unpythonic
+unregistration
+unrendered
+Unreviewed
+unsanitized
+unsets
+untar
+url
+urlencode
+urlize
+urlizetrunc
+urljoins
+urllib
+urlpatterns
+urls
+useable
+username
+usernames
+utc
+UTF
+util
+utils
+uwsgi
+uWSGI
+validator
+validators
+validsite
+VARCHAR
+variadic
+vendored
+vendorname
+versioned
+versioning
+vertices
+virtualenv
+virtualized
+Votizen
+webapps
+webdesign
+webkit
+WebKit
+Weblog
+webpages
+webserver
+webservers
+whatsnext
+whitelist
+whitelisted
+whitespaces
+whizbang
+widthratio
+wiki
+wikipedia
+wildcard
+wildcards
+Willison
+Wittams
+wontfix
+wordcount
+wordwrap
+workflow
+worksforme
+wsgi
+www
+xe
+xgettext
+xref
+xxxxx
+yesno
+Zope