12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806 |
- ========
- Settings
- ========
- .. contents::
- :local:
- :depth: 1
- .. warning::
- Be careful when you override settings, especially when the default value
- is a non-empty list or dictionary, such as :setting:`STATICFILES_FINDERS`.
- Make sure you keep the components required by the features of Django you
- wish to use.
- Core Settings
- =============
- Here's a list of settings available in Django core and their default values.
- Settings provided by contrib apps are listed below, followed by a topical index
- of the core settings. For introductory material, see the :doc:`settings topic
- guide </topics/settings>`.
- .. setting:: ABSOLUTE_URL_OVERRIDES
- ``ABSOLUTE_URL_OVERRIDES``
- --------------------------
- Default: ``{}`` (Empty dictionary)
- A dictionary mapping ``"app_label.model_name"`` strings to functions that take
- a model object and return its URL. This is a way of inserting or overriding
- ``get_absolute_url()`` methods on a per-installation basis. Example::
- ABSOLUTE_URL_OVERRIDES = {
- "blogs.blog": lambda o: "/blogs/%s/" % o.slug,
- "news.story": lambda o: "/stories/%s/%s/" % (o.pub_year, o.slug),
- }
- The model name used in this setting should be all lowercase, regardless of the
- case of the actual model class name.
- .. setting:: ADMINS
- ``ADMINS``
- ----------
- Default: ``[]`` (Empty list)
- A list of all the people who get code error notifications. When
- :setting:`DEBUG=False <DEBUG>` and :class:`~django.utils.log.AdminEmailHandler`
- is configured in :setting:`LOGGING` (done by default), Django emails these
- people the details of exceptions raised in the request/response cycle.
- Each item in the list should be a tuple of (Full name, email address). Example::
- [("John", "john@example.com"), ("Mary", "mary@example.com")]
- .. setting:: ALLOWED_HOSTS
- ``ALLOWED_HOSTS``
- -----------------
- Default: ``[]`` (Empty list)
- A list of strings representing the host/domain names that this Django site can
- serve. This is a security measure to prevent :ref:`HTTP Host header attacks
- <host-headers-virtual-hosting>`, which are possible even under many
- seemingly-safe web server configurations.
- Values in this list can be fully qualified names (e.g. ``'www.example.com'``),
- in which case they will be matched against the request's ``Host`` header
- exactly (case-insensitive, not including port). A value beginning with a period
- can be used as a subdomain wildcard: ``'.example.com'`` will match
- ``example.com``, ``www.example.com``, and any other subdomain of
- ``example.com``. A value of ``'*'`` will match anything; in this case you are
- responsible to provide your own validation of the ``Host`` header (perhaps in a
- middleware; if so this middleware must be listed first in
- :setting:`MIDDLEWARE`).
- Django also allows the `fully qualified domain name (FQDN)`_ of any entries.
- Some browsers include a trailing dot in the ``Host`` header which Django
- strips when performing host validation.
- .. _`fully qualified domain name (FQDN)`: https://en.wikipedia.org/wiki/Fully_qualified_domain_name
- If the ``Host`` header (or ``X-Forwarded-Host`` if
- :setting:`USE_X_FORWARDED_HOST` is enabled) does not match any value in this
- list, the :meth:`django.http.HttpRequest.get_host()` method will raise
- :exc:`~django.core.exceptions.SuspiciousOperation`.
- When :setting:`DEBUG` is ``True`` and ``ALLOWED_HOSTS`` is empty, the host
- is validated against ``['.localhost', '127.0.0.1', '[::1]']``.
- ``ALLOWED_HOSTS`` is also :ref:`checked when running tests
- <topics-testing-advanced-multiple-hosts>`.
- This validation only applies via :meth:`~django.http.HttpRequest.get_host()`;
- if your code accesses the ``Host`` header directly from ``request.META`` you
- are bypassing this security protection.
- .. setting:: APPEND_SLASH
- ``APPEND_SLASH``
- ----------------
- Default: ``True``
- When set to ``True``, if the request URL does not match any of the patterns
- in the URLconf and it doesn't end in a slash, an HTTP redirect is issued to the
- same URL with a slash appended. Note that the redirect may cause any data
- submitted in a POST request to be lost.
- The :setting:`APPEND_SLASH` setting is only used if
- :class:`~django.middleware.common.CommonMiddleware` is installed
- (see :doc:`/topics/http/middleware`). See also :setting:`PREPEND_WWW`.
- .. setting:: CACHES
- ``CACHES``
- ----------
- Default::
- {
- "default": {
- "BACKEND": "django.core.cache.backends.locmem.LocMemCache",
- }
- }
- A dictionary containing the settings for all caches to be used with
- Django. It is a nested dictionary whose contents maps cache aliases
- to a dictionary containing the options for an individual cache.
- The :setting:`CACHES` setting must configure a ``default`` cache;
- any number of additional caches may also be specified. If you
- are using a cache backend other than the local memory cache, or
- you need to define multiple caches, other options will be required.
- The following cache options are available.
- .. setting:: CACHES-BACKEND
- ``BACKEND``
- ~~~~~~~~~~~
- Default: ``''`` (Empty string)
- The cache backend to use. The built-in cache backends are:
- * ``'django.core.cache.backends.db.DatabaseCache'``
- * ``'django.core.cache.backends.dummy.DummyCache'``
- * ``'django.core.cache.backends.filebased.FileBasedCache'``
- * ``'django.core.cache.backends.locmem.LocMemCache'``
- * ``'django.core.cache.backends.memcached.PyMemcacheCache'``
- * ``'django.core.cache.backends.memcached.PyLibMCCache'``
- * ``'django.core.cache.backends.redis.RedisCache'``
- You can use a cache backend that doesn't ship with Django by setting
- :setting:`BACKEND <CACHES-BACKEND>` to a fully-qualified path of a cache
- backend class (i.e. ``mypackage.backends.whatever.WhateverCache``).
- .. setting:: CACHES-KEY_FUNCTION
- ``KEY_FUNCTION``
- ~~~~~~~~~~~~~~~~
- A string containing a dotted path to a function (or any callable) that defines how to
- compose a prefix, version and key into a final cache key. The default
- implementation is equivalent to the function::
- def make_key(key, key_prefix, version):
- return ":".join([key_prefix, str(version), key])
- You may use any key function you want, as long as it has the same
- argument signature.
- See the :ref:`cache documentation <cache_key_transformation>` for more
- information.
- .. setting:: CACHES-KEY_PREFIX
- ``KEY_PREFIX``
- ~~~~~~~~~~~~~~
- Default: ``''`` (Empty string)
- A string that will be automatically included (prepended by default) to
- all cache keys used by the Django server.
- See the :ref:`cache documentation <cache_key_prefixing>` for more information.
- .. setting:: CACHES-LOCATION
- ``LOCATION``
- ~~~~~~~~~~~~
- Default: ``''`` (Empty string)
- The location of the cache to use. This might be the directory for a
- file system cache, a host and port for a memcache server, or an identifying
- name for a local memory cache. e.g.::
- CACHES = {
- "default": {
- "BACKEND": "django.core.cache.backends.filebased.FileBasedCache",
- "LOCATION": "/var/tmp/django_cache",
- }
- }
- .. setting:: CACHES-OPTIONS
- ``OPTIONS``
- ~~~~~~~~~~~
- Default: ``None``
- Extra parameters to pass to the cache backend. Available parameters
- vary depending on your cache backend.
- Some information on available parameters can be found in the
- :ref:`cache arguments <cache_arguments>` documentation. For more information,
- consult your backend module's own documentation.
- .. setting:: CACHES-TIMEOUT
- ``TIMEOUT``
- ~~~~~~~~~~~
- Default: ``300``
- The number of seconds before a cache entry is considered stale. If the value of
- this setting is ``None``, cache entries will not expire. A value of ``0``
- causes keys to immediately expire (effectively "don't cache").
- .. setting:: CACHES-VERSION
- ``VERSION``
- ~~~~~~~~~~~
- Default: ``1``
- The default version number for cache keys generated by the Django server.
- See the :ref:`cache documentation <cache_versioning>` for more information.
- .. setting:: CACHE_MIDDLEWARE_ALIAS
- ``CACHE_MIDDLEWARE_ALIAS``
- --------------------------
- Default: ``'default'``
- The cache connection to use for the :ref:`cache middleware
- <the-per-site-cache>`.
- .. setting:: CACHE_MIDDLEWARE_KEY_PREFIX
- ``CACHE_MIDDLEWARE_KEY_PREFIX``
- -------------------------------
- Default: ``''`` (Empty string)
- A string which will be prefixed to the cache keys generated by the :ref:`cache
- middleware <the-per-site-cache>`. This prefix is combined with the
- :setting:`KEY_PREFIX <CACHES-KEY_PREFIX>` setting; it does not replace it.
- See :doc:`/topics/cache`.
- .. setting:: CACHE_MIDDLEWARE_SECONDS
- ``CACHE_MIDDLEWARE_SECONDS``
- ----------------------------
- Default: ``600``
- The default integer number of seconds to cache a page for the
- :ref:`cache middleware <the-per-site-cache>`.
- See :doc:`/topics/cache`.
- .. _settings-csrf:
- .. setting:: CSRF_COOKIE_AGE
- ``CSRF_COOKIE_AGE``
- -------------------
- Default: ``31449600`` (approximately 1 year, in seconds)
- The age of CSRF cookies, in seconds.
- The reason for setting a long-lived expiration time is to avoid problems in
- the case of a user closing a browser or bookmarking a page and then loading
- that page from a browser cache. Without persistent cookies, the form submission
- would fail in this case.
- Some browsers (specifically Internet Explorer) can disallow the use of
- persistent cookies or can have the indexes to the cookie jar corrupted on disk,
- thereby causing CSRF protection checks to (sometimes intermittently) fail.
- Change this setting to ``None`` to use session-based CSRF cookies, which
- keep the cookies in-memory instead of on persistent storage.
- .. setting:: CSRF_COOKIE_DOMAIN
- ``CSRF_COOKIE_DOMAIN``
- ----------------------
- Default: ``None``
- The domain to be used when setting the CSRF cookie. This can be useful for
- easily allowing cross-subdomain requests to be excluded from the normal cross
- site request forgery protection. It should be set to a string such as
- ``".example.com"`` to allow a POST request from a form on one subdomain to be
- accepted by a view served from another subdomain.
- Please note that the presence of this setting does not imply that Django's CSRF
- protection is safe from cross-subdomain attacks by default - please see the
- :ref:`CSRF limitations <csrf-limitations>` section.
- .. setting:: CSRF_COOKIE_HTTPONLY
- ``CSRF_COOKIE_HTTPONLY``
- ------------------------
- Default: ``False``
- Whether to use ``HttpOnly`` flag on the CSRF cookie. If this is set to
- ``True``, client-side JavaScript will not be able to access the CSRF cookie.
- Designating the CSRF cookie as ``HttpOnly`` doesn't offer any practical
- protection because CSRF is only to protect against cross-domain attacks. If an
- attacker can read the cookie via JavaScript, they're already on the same domain
- as far as the browser knows, so they can do anything they like anyway. (XSS is
- a much bigger hole than CSRF.)
- Although the setting offers little practical benefit, it's sometimes required
- by security auditors.
- If you enable this and need to send the value of the CSRF token with an AJAX
- request, your JavaScript must pull the value :ref:`from a hidden CSRF token
- form input <acquiring-csrf-token-from-html>` instead of :ref:`from the cookie
- <acquiring-csrf-token-from-cookie>`.
- See :setting:`SESSION_COOKIE_HTTPONLY` for details on ``HttpOnly``.
- .. setting:: CSRF_COOKIE_NAME
- ``CSRF_COOKIE_NAME``
- --------------------
- Default: ``'csrftoken'``
- The name of the cookie to use for the CSRF authentication token. This can be
- whatever you want (as long as it's different from the other cookie names in
- your application). See :doc:`/ref/csrf`.
- .. setting:: CSRF_COOKIE_PATH
- ``CSRF_COOKIE_PATH``
- --------------------
- Default: ``'/'``
- The path set on the CSRF cookie. This should either match the URL path of your
- Django installation or be a parent of that path.
- This is useful if you have multiple Django instances running under the same
- hostname. They can use different cookie paths, and each instance will only see
- its own CSRF cookie.
- .. setting:: CSRF_COOKIE_SAMESITE
- ``CSRF_COOKIE_SAMESITE``
- ------------------------
- Default: ``'Lax'``
- The value of the `SameSite`_ flag on the CSRF cookie. This flag prevents the
- cookie from being sent in cross-site requests.
- See :setting:`SESSION_COOKIE_SAMESITE` for details about ``SameSite``.
- .. setting:: CSRF_COOKIE_SECURE
- ``CSRF_COOKIE_SECURE``
- ----------------------
- Default: ``False``
- Whether to use a secure cookie for the CSRF cookie. If this is set to ``True``,
- the cookie will be marked as "secure", which means browsers may ensure that the
- cookie is only sent with an HTTPS connection.
- .. setting:: CSRF_USE_SESSIONS
- ``CSRF_USE_SESSIONS``
- ---------------------
- Default: ``False``
- Whether to store the CSRF token in the user's session instead of in a cookie.
- It requires the use of :mod:`django.contrib.sessions`.
- Storing the CSRF token in a cookie (Django's default) is safe, but storing it
- in the session is common practice in other web frameworks and therefore
- sometimes demanded by security auditors.
- Since the :ref:`default error views <error-views>` require the CSRF token,
- :class:`~django.contrib.sessions.middleware.SessionMiddleware` must appear in
- :setting:`MIDDLEWARE` before any middleware that may raise an exception to
- trigger an error view (such as :exc:`~django.core.exceptions.PermissionDenied`)
- if you're using ``CSRF_USE_SESSIONS``. See :ref:`middleware-ordering`.
- .. setting:: CSRF_FAILURE_VIEW
- ``CSRF_FAILURE_VIEW``
- ---------------------
- Default: ``'django.views.csrf.csrf_failure'``
- A dotted path to the view function to be used when an incoming request is
- rejected by the :doc:`CSRF protection </ref/csrf>`. The function should have
- this signature::
- def csrf_failure(request, reason=""): ...
- where ``reason`` is a short message (intended for developers or logging, not
- for end users) indicating the reason the request was rejected. It should return
- an :class:`~django.http.HttpResponseForbidden`.
- ``django.views.csrf.csrf_failure()`` accepts an additional ``template_name``
- parameter that defaults to ``'403_csrf.html'``. If a template with that name
- exists, it will be used to render the page.
- .. setting:: CSRF_HEADER_NAME
- ``CSRF_HEADER_NAME``
- --------------------
- Default: ``'HTTP_X_CSRFTOKEN'``
- The name of the request header used for CSRF authentication.
- As with other HTTP headers in ``request.META``, the header name received from
- the server is normalized by converting all characters to uppercase, replacing
- any hyphens with underscores, and adding an ``'HTTP_'`` prefix to the name.
- For example, if your client sends a ``'X-XSRF-TOKEN'`` header, the setting
- should be ``'HTTP_X_XSRF_TOKEN'``.
- .. setting:: CSRF_TRUSTED_ORIGINS
- ``CSRF_TRUSTED_ORIGINS``
- ------------------------
- Default: ``[]`` (Empty list)
- A list of trusted origins for unsafe requests (e.g. ``POST``).
- For requests that include the ``Origin`` header, Django's CSRF protection
- requires that header match the origin present in the ``Host`` header.
- For a :meth:`secure <django.http.HttpRequest.is_secure>` unsafe
- request that doesn't include the ``Origin`` header, the request must have a
- ``Referer`` header that matches the origin present in the ``Host`` header.
- These checks prevent, for example, a ``POST`` request from
- ``subdomain.example.com`` from succeeding against ``api.example.com``. If you
- need cross-origin unsafe requests, continuing the example, add
- ``'https://subdomain.example.com'`` to this list (and/or ``http://...`` if
- requests originate from an insecure page).
- The setting also supports subdomains, so you could add
- ``'https://*.example.com'``, for example, to allow access from all subdomains
- of ``example.com``.
- .. setting:: DATABASES
- ``DATABASES``
- -------------
- Default: ``{}`` (Empty dictionary)
- A dictionary containing the settings for all databases to be used with
- Django. It is a nested dictionary whose contents map a database alias
- to a dictionary containing the options for an individual database.
- The :setting:`DATABASES` setting must configure a ``default`` database;
- any number of additional databases may also be specified.
- The simplest possible settings file is for a single-database setup using
- SQLite. This can be configured using the following::
- DATABASES = {
- "default": {
- "ENGINE": "django.db.backends.sqlite3",
- "NAME": "mydatabase",
- }
- }
- When connecting to other database backends, such as MariaDB, MySQL, Oracle, or
- PostgreSQL, additional connection parameters will be required. See
- the :setting:`ENGINE <DATABASE-ENGINE>` setting below on how to specify
- other database types. This example is for PostgreSQL::
- DATABASES = {
- "default": {
- "ENGINE": "django.db.backends.postgresql",
- "NAME": "mydatabase",
- "USER": "mydatabaseuser",
- "PASSWORD": "mypassword",
- "HOST": "127.0.0.1",
- "PORT": "5432",
- }
- }
- The following inner options that may be required for more complex
- configurations are available:
- .. setting:: DATABASE-ATOMIC_REQUESTS
- ``ATOMIC_REQUESTS``
- ~~~~~~~~~~~~~~~~~~~
- Default: ``False``
- Set this to ``True`` to wrap each view in a transaction on this database. See
- :ref:`tying-transactions-to-http-requests`.
- .. setting:: DATABASE-AUTOCOMMIT
- ``AUTOCOMMIT``
- ~~~~~~~~~~~~~~
- Default: ``True``
- Set this to ``False`` if you want to :ref:`disable Django's transaction
- management <deactivate-transaction-management>` and implement your own.
- .. setting:: DATABASE-ENGINE
- ``ENGINE``
- ~~~~~~~~~~
- Default: ``''`` (Empty string)
- The database backend to use. The built-in database backends are:
- * ``'django.db.backends.postgresql'``
- * ``'django.db.backends.mysql'``
- * ``'django.db.backends.sqlite3'``
- * ``'django.db.backends.oracle'``
- You can use a database backend that doesn't ship with Django by setting
- ``ENGINE`` to a fully-qualified path (i.e. ``mypackage.backends.whatever``).
- .. setting:: HOST
- ``HOST``
- ~~~~~~~~
- Default: ``''`` (Empty string)
- Which host to use when connecting to the database. An empty string means
- localhost. Not used with SQLite.
- If this value starts with a forward slash (``'/'``) and you're using MySQL,
- MySQL will connect via a Unix socket to the specified socket. For example::
- "HOST": "/var/run/mysql"
- If you're using MySQL and this value *doesn't* start with a forward slash, then
- this value is assumed to be the host.
- If you're using PostgreSQL, by default (empty :setting:`HOST`), the connection
- to the database is done through UNIX domain sockets ('local' lines in
- ``pg_hba.conf``). If your UNIX domain socket is not in the standard location,
- use the same value of ``unix_socket_directory`` from ``postgresql.conf``.
- If you want to connect through TCP sockets, set :setting:`HOST` to 'localhost'
- or '127.0.0.1' ('host' lines in ``pg_hba.conf``).
- On Windows, you should always define :setting:`HOST`, as UNIX domain sockets
- are not available.
- .. setting:: NAME
- ``NAME``
- ~~~~~~~~
- Default: ``''`` (Empty string)
- The name of the database to use. For SQLite, it's the full path to the database
- file. When specifying the path, always use forward slashes, even on Windows
- (e.g. ``C:/homes/user/mysite/sqlite3.db``).
- .. setting:: CONN_MAX_AGE
- ``CONN_MAX_AGE``
- ~~~~~~~~~~~~~~~~
- Default: ``0``
- The lifetime of a database connection, as an integer of seconds. Use ``0`` to
- close database connections at the end of each request — Django's historical
- behavior — and ``None`` for unlimited :ref:`persistent database connections
- <persistent-database-connections>`.
- .. setting:: CONN_HEALTH_CHECKS
- ``CONN_HEALTH_CHECKS``
- ~~~~~~~~~~~~~~~~~~~~~~
- Default: ``False``
- If set to ``True``, existing :ref:`persistent database connections
- <persistent-database-connections>` will be health checked before they are
- reused in each request performing database access. If the health check fails,
- the connection will be reestablished without failing the request when the
- connection is no longer usable but the database server is ready to accept and
- serve new connections (e.g. after database server restart closing existing
- connections).
- .. setting:: OPTIONS
- ``OPTIONS``
- ~~~~~~~~~~~
- Default: ``{}`` (Empty dictionary)
- Extra parameters to use when connecting to the database. Available parameters
- vary depending on your database backend.
- Some information on available parameters can be found in the
- :doc:`Database Backends </ref/databases>` documentation. For more information,
- consult your backend module's own documentation.
- .. setting:: PASSWORD
- ``PASSWORD``
- ~~~~~~~~~~~~
- Default: ``''`` (Empty string)
- The password to use when connecting to the database. Not used with SQLite.
- .. setting:: PORT
- ``PORT``
- ~~~~~~~~
- Default: ``''`` (Empty string)
- The port to use when connecting to the database. An empty string means the
- default port. Not used with SQLite.
- .. setting:: DATABASE-TIME_ZONE
- ``TIME_ZONE``
- ~~~~~~~~~~~~~
- Default: ``None``
- A string representing the time zone for this database connection or ``None``.
- This inner option of the :setting:`DATABASES` setting accepts the same values
- as the general :setting:`TIME_ZONE` setting.
- When :setting:`USE_TZ` is ``True``, reading datetimes from the database
- returns aware datetimes with the timezone set to this option's value if not
- ``None``, or to UTC otherwise.
- When :setting:`USE_TZ` is ``False``, it is an error to set this option.
- * If the database backend doesn't support time zones (e.g. SQLite, MySQL,
- Oracle), Django reads and writes datetimes in local time according to this
- option if it is set and in UTC if it isn't.
- Changing the connection time zone changes how datetimes are read from and
- written to the database.
- * If Django manages the database and you don't have a strong reason to do
- otherwise, you should leave this option unset. It's best to store datetimes
- in UTC because it avoids ambiguous or nonexistent datetimes during daylight
- saving time changes. Also, receiving datetimes in UTC keeps datetime
- arithmetic simple — there's no need to consider potential offset changes
- over a DST transition.
- * If you're connecting to a third-party database that stores datetimes in a
- local time rather than UTC, then you must set this option to the
- appropriate time zone. Likewise, if Django manages the database but
- third-party systems connect to the same database and expect to find
- datetimes in local time, then you must set this option.
- * If the database backend supports time zones (e.g., PostgreSQL), then the
- database connection's time zone is set to this value.
- Although setting the ``TIME_ZONE`` option is very rarely needed, there are
- situations where it becomes necessary. Specifically, it's recommended to
- match the general :setting:`TIME_ZONE` setting when dealing with raw queries
- involving date/time functions like PostgreSQL's ``date_trunc()`` or
- ``generate_series()``, especially when generating time-based series that
- transition daylight savings.
- This value can be changed at any time, the database will handle the
- conversion of datetimes to the configured time zone.
- However, this has a downside: receiving all datetimes in local time makes
- datetime arithmetic more tricky — you must account for possible offset
- changes over DST transitions.
- Consider converting to local time explicitly with ``AT TIME ZONE`` in raw SQL
- queries instead of setting the ``TIME_ZONE`` option.
- .. setting:: DATABASE-DISABLE_SERVER_SIDE_CURSORS
- ``DISABLE_SERVER_SIDE_CURSORS``
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Default: ``False``
- Set this to ``True`` if you want to disable the use of server-side cursors with
- :meth:`.QuerySet.iterator`. :ref:`transaction-pooling-server-side-cursors`
- describes the use case.
- This is a PostgreSQL-specific setting.
- .. setting:: USER
- ``USER``
- ~~~~~~~~
- Default: ``''`` (Empty string)
- The username to use when connecting to the database. Not used with SQLite.
- .. setting:: DATABASE-TEST
- ``TEST``
- ~~~~~~~~
- Default: ``{}`` (Empty dictionary)
- A dictionary of settings for test databases; for more details about the
- creation and use of test databases, see :ref:`the-test-database`.
- Here's an example with a test database configuration::
- DATABASES = {
- "default": {
- "ENGINE": "django.db.backends.postgresql",
- "USER": "mydatabaseuser",
- "NAME": "mydatabase",
- "TEST": {
- "NAME": "mytestdatabase",
- },
- },
- }
- The following keys in the ``TEST`` dictionary are available:
- .. setting:: TEST_CHARSET
- ``CHARSET``
- ^^^^^^^^^^^
- Default: ``None``
- The character set encoding used to create the test database. The value of this
- string is passed directly through to the database, so its format is
- backend-specific.
- Supported by the PostgreSQL_ (``postgresql``) and MySQL_ (``mysql``) backends.
- .. _PostgreSQL: https://www.postgresql.org/docs/current/multibyte.html
- .. _MySQL: https://dev.mysql.com/doc/refman/en/charset-charsets.html
- .. setting:: TEST_COLLATION
- ``COLLATION``
- ^^^^^^^^^^^^^
- Default: ``None``
- The collation order to use when creating the test database. This value is
- passed directly to the backend, so its format is backend-specific.
- Only supported for the ``mysql`` backend (see the `MySQL manual`_ for details).
- .. _MySQL manual: MySQL_
- .. setting:: TEST_DEPENDENCIES
- ``DEPENDENCIES``
- ^^^^^^^^^^^^^^^^
- Default: ``['default']``, for all databases other than ``default``,
- which has no dependencies.
- The creation-order dependencies of the database. See the documentation
- on :ref:`controlling the creation order of test databases
- <topics-testing-creation-dependencies>` for details.
- .. setting:: TEST_MIGRATE
- ``MIGRATE``
- ^^^^^^^^^^^
- Default: ``True``
- When set to ``False``, migrations won't run when creating the test database.
- This is similar to setting ``None`` as a value in :setting:`MIGRATION_MODULES`,
- but for all apps.
- .. setting:: TEST_MIRROR
- ``MIRROR``
- ^^^^^^^^^^
- Default: ``None``
- The alias of the database that this database should mirror during
- testing. It depends on transactions and therefore must be used within
- :class:`~django.test.TransactionTestCase` instead of
- :class:`~django.test.TestCase`.
- This setting exists to allow for testing of primary/replica
- (referred to as master/slave by some databases)
- configurations of multiple databases. See the documentation on
- :ref:`testing primary/replica configurations
- <topics-testing-primaryreplica>` for details.
- .. setting:: TEST_NAME
- ``NAME``
- ^^^^^^^^
- Default: ``None``
- The name of database to use when running the test suite.
- If the default value (``None``) is used with the SQLite database engine, the
- tests will use a memory resident database. For all other database engines the
- test database will use the name ``'test_' + DATABASE_NAME``.
- See :ref:`the-test-database`.
- .. setting:: TEST_TEMPLATE
- ``TEMPLATE``
- ^^^^^^^^^^^^
- This is a PostgreSQL-specific setting.
- The name of a `template`_ (e.g. ``'template0'``) from which to create the test
- database.
- .. _template: https://www.postgresql.org/docs/current/sql-createdatabase.html
- .. setting:: TEST_CREATE
- ``CREATE_DB``
- ^^^^^^^^^^^^^
- Default: ``True``
- This is an Oracle-specific setting.
- If it is set to ``False``, the test tablespaces won't be automatically created
- at the beginning of the tests or dropped at the end.
- .. setting:: TEST_USER_CREATE
- ``CREATE_USER``
- ^^^^^^^^^^^^^^^
- Default: ``True``
- This is an Oracle-specific setting.
- If it is set to ``False``, the test user won't be automatically created at the
- beginning of the tests and dropped at the end.
- .. setting:: TEST_USER
- ``USER``
- ^^^^^^^^
- Default: ``None``
- This is an Oracle-specific setting.
- The username to use when connecting to the Oracle database that will be used
- when running tests. If not provided, Django will use ``'test_' + USER``.
- .. setting:: TEST_PASSWD
- ``PASSWORD``
- ^^^^^^^^^^^^
- Default: ``None``
- This is an Oracle-specific setting.
- The password to use when connecting to the Oracle database that will be used
- when running tests. If not provided, Django will generate a random password.
- .. setting:: TEST_ORACLE_MANAGED_FILES
- ``ORACLE_MANAGED_FILES``
- ^^^^^^^^^^^^^^^^^^^^^^^^
- Default: ``False``
- This is an Oracle-specific setting.
- If set to ``True``, Oracle Managed Files (OMF) tablespaces will be used.
- :setting:`DATAFILE` and :setting:`DATAFILE_TMP` will be ignored.
- .. setting:: TEST_TBLSPACE
- ``TBLSPACE``
- ^^^^^^^^^^^^
- Default: ``None``
- This is an Oracle-specific setting.
- The name of the tablespace that will be used when running tests. If not
- provided, Django will use ``'test_' + USER``.
- .. setting:: TEST_TBLSPACE_TMP
- ``TBLSPACE_TMP``
- ^^^^^^^^^^^^^^^^
- Default: ``None``
- This is an Oracle-specific setting.
- The name of the temporary tablespace that will be used when running tests. If
- not provided, Django will use ``'test_' + USER + '_temp'``.
- .. setting:: DATAFILE
- ``DATAFILE``
- ^^^^^^^^^^^^
- Default: ``None``
- This is an Oracle-specific setting.
- The name of the datafile to use for the TBLSPACE. If not provided, Django will
- use ``TBLSPACE + '.dbf'``.
- .. setting:: DATAFILE_TMP
- ``DATAFILE_TMP``
- ^^^^^^^^^^^^^^^^
- Default: ``None``
- This is an Oracle-specific setting.
- The name of the datafile to use for the TBLSPACE_TMP. If not provided, Django
- will use ``TBLSPACE_TMP + '.dbf'``.
- .. setting:: DATAFILE_MAXSIZE
- ``DATAFILE_MAXSIZE``
- ^^^^^^^^^^^^^^^^^^^^
- Default: ``'500M'``
- This is an Oracle-specific setting.
- The maximum size that the DATAFILE is allowed to grow to.
- .. setting:: DATAFILE_TMP_MAXSIZE
- ``DATAFILE_TMP_MAXSIZE``
- ^^^^^^^^^^^^^^^^^^^^^^^^
- Default: ``'500M'``
- This is an Oracle-specific setting.
- The maximum size that the DATAFILE_TMP is allowed to grow to.
- .. setting:: DATAFILE_SIZE
- ``DATAFILE_SIZE``
- ^^^^^^^^^^^^^^^^^
- Default: ``'50M'``
- This is an Oracle-specific setting.
- The initial size of the DATAFILE.
- .. setting:: DATAFILE_TMP_SIZE
- ``DATAFILE_TMP_SIZE``
- ^^^^^^^^^^^^^^^^^^^^^
- Default: ``'50M'``
- This is an Oracle-specific setting.
- The initial size of the DATAFILE_TMP.
- .. setting:: DATAFILE_EXTSIZE
- ``DATAFILE_EXTSIZE``
- ^^^^^^^^^^^^^^^^^^^^
- Default: ``'25M'``
- This is an Oracle-specific setting.
- The amount by which the DATAFILE is extended when more space is required.
- .. setting:: DATAFILE_TMP_EXTSIZE
- ``DATAFILE_TMP_EXTSIZE``
- ^^^^^^^^^^^^^^^^^^^^^^^^
- Default: ``'25M'``
- This is an Oracle-specific setting.
- The amount by which the DATAFILE_TMP is extended when more space is required.
- .. setting:: DATA_UPLOAD_MAX_MEMORY_SIZE
- ``DATA_UPLOAD_MAX_MEMORY_SIZE``
- -------------------------------
- Default: ``2621440`` (i.e. 2.5 MB).
- The maximum size in bytes that a request body may be before a
- :exc:`~django.core.exceptions.SuspiciousOperation` (``RequestDataTooBig``) is
- raised. The check is done when accessing ``request.body`` or ``request.POST``
- and is calculated against the total request size excluding any file upload
- data. You can set this to ``None`` to disable the check. Applications that are
- expected to receive unusually large form posts should tune this setting.
- The amount of request data is correlated to the amount of memory needed to
- process the request and populate the GET and POST dictionaries. Large requests
- could be used as a denial-of-service attack vector if left unchecked. Since web
- servers don't typically perform deep request inspection, it's not possible to
- perform a similar check at that level.
- See also :setting:`FILE_UPLOAD_MAX_MEMORY_SIZE`.
- .. setting:: DATA_UPLOAD_MAX_NUMBER_FIELDS
- ``DATA_UPLOAD_MAX_NUMBER_FIELDS``
- ---------------------------------
- Default: ``1000``
- The maximum number of parameters that may be received via GET or POST before a
- :exc:`~django.core.exceptions.SuspiciousOperation` (``TooManyFields``) is
- raised. You can set this to ``None`` to disable the check. Applications that
- are expected to receive an unusually large number of form fields should tune
- this setting.
- The number of request parameters is correlated to the amount of time needed to
- process the request and populate the GET and POST dictionaries. Large requests
- could be used as a denial-of-service attack vector if left unchecked. Since web
- servers don't typically perform deep request inspection, it's not possible to
- perform a similar check at that level.
- .. setting:: DATA_UPLOAD_MAX_NUMBER_FILES
- ``DATA_UPLOAD_MAX_NUMBER_FILES``
- --------------------------------
- Default: ``100``
- The maximum number of files that may be received via POST in a
- ``multipart/form-data`` encoded request before a
- :exc:`~django.core.exceptions.SuspiciousOperation` (``TooManyFiles``) is
- raised. You can set this to ``None`` to disable the check. Applications that
- are expected to receive an unusually large number of file fields should tune
- this setting.
- The number of accepted files is correlated to the amount of time and memory
- needed to process the request. Large requests could be used as a
- denial-of-service attack vector if left unchecked. Since web servers don't
- typically perform deep request inspection, it's not possible to perform a
- similar check at that level.
- .. setting:: DATABASE_ROUTERS
- ``DATABASE_ROUTERS``
- --------------------
- Default: ``[]`` (Empty list)
- The list of routers that will be used to determine which database
- to use when performing a database query.
- See the documentation on :ref:`automatic database routing in multi
- database configurations <topics-db-multi-db-routing>`.
- .. setting:: DATE_FORMAT
- ``DATE_FORMAT``
- ---------------
- Default: ``'N j, Y'`` (e.g. ``Feb. 4, 2003``)
- The default formatting to use for displaying date fields in any part of the
- system. Note that the locale-dictated format has higher precedence and will be
- applied instead. See :tfilter:`allowed date format strings <date>`.
- See also :setting:`DATETIME_FORMAT`, :setting:`TIME_FORMAT` and :setting:`SHORT_DATE_FORMAT`.
- .. setting:: DATE_INPUT_FORMATS
- ``DATE_INPUT_FORMATS``
- ----------------------
- Default::
- [
- "%Y-%m-%d", # '2006-10-25'
- "%m/%d/%Y", # '10/25/2006'
- "%m/%d/%y", # '10/25/06'
- "%b %d %Y", # 'Oct 25 2006'
- "%b %d, %Y", # 'Oct 25, 2006'
- "%d %b %Y", # '25 Oct 2006'
- "%d %b, %Y", # '25 Oct, 2006'
- "%B %d %Y", # 'October 25 2006'
- "%B %d, %Y", # 'October 25, 2006'
- "%d %B %Y", # '25 October 2006'
- "%d %B, %Y", # '25 October, 2006'
- ]
- A list of formats that will be accepted when inputting data on a date field.
- Formats will be tried in order, using the first valid one. Note that these
- format strings use Python's :ref:`datetime module syntax
- <strftime-strptime-behavior>`, not the format strings from the :tfilter:`date`
- template filter.
- The locale-dictated format has higher precedence and will be applied instead.
- See also :setting:`DATETIME_INPUT_FORMATS` and :setting:`TIME_INPUT_FORMATS`.
- .. setting:: DATETIME_FORMAT
- ``DATETIME_FORMAT``
- -------------------
- Default: ``'N j, Y, P'`` (e.g. ``Feb. 4, 2003, 4 p.m.``)
- The default formatting to use for displaying datetime fields in any part of the
- system. Note that the locale-dictated format has higher precedence and will be
- applied instead. See :tfilter:`allowed date format strings <date>`.
- See also :setting:`DATE_FORMAT`, :setting:`TIME_FORMAT` and :setting:`SHORT_DATETIME_FORMAT`.
- .. setting:: DATETIME_INPUT_FORMATS
- ``DATETIME_INPUT_FORMATS``
- --------------------------
- Default::
- [
- "%Y-%m-%d %H:%M:%S", # '2006-10-25 14:30:59'
- "%Y-%m-%d %H:%M:%S.%f", # '2006-10-25 14:30:59.000200'
- "%Y-%m-%d %H:%M", # '2006-10-25 14:30'
- "%m/%d/%Y %H:%M:%S", # '10/25/2006 14:30:59'
- "%m/%d/%Y %H:%M:%S.%f", # '10/25/2006 14:30:59.000200'
- "%m/%d/%Y %H:%M", # '10/25/2006 14:30'
- "%m/%d/%y %H:%M:%S", # '10/25/06 14:30:59'
- "%m/%d/%y %H:%M:%S.%f", # '10/25/06 14:30:59.000200'
- "%m/%d/%y %H:%M", # '10/25/06 14:30'
- ]
- A list of formats that will be accepted when inputting data on a datetime
- field. Formats will be tried in order, using the first valid one. Note that
- these format strings use Python's :ref:`datetime module syntax
- <strftime-strptime-behavior>`, not the format strings from the :tfilter:`date`
- template filter. Date-only formats are not included as datetime fields will
- automatically try :setting:`DATE_INPUT_FORMATS` in last resort.
- The locale-dictated format has higher precedence and will be applied instead.
- See also :setting:`DATE_INPUT_FORMATS` and :setting:`TIME_INPUT_FORMATS`.
- .. setting:: DEBUG
- ``DEBUG``
- ---------
- Default: ``False``
- A boolean that turns on/off debug mode.
- Never deploy a site into production with :setting:`DEBUG` turned on.
- One of the main features of debug mode is the display of detailed error pages.
- If your app raises an exception when :setting:`DEBUG` is ``True``, Django will
- display a detailed traceback, including a lot of metadata about your
- environment, such as all the currently defined Django settings (from
- ``settings.py``).
- As a security measure, Django will *not* include settings that might be
- sensitive, such as :setting:`SECRET_KEY`. Specifically, it will exclude any
- setting whose name includes any of the following:
- * ``'API'``
- * ``'KEY'``
- * ``'PASS'``
- * ``'SECRET'``
- * ``'SIGNATURE'``
- * ``'TOKEN'``
- Note that these are *partial* matches. ``'PASS'`` will also match PASSWORD,
- just as ``'TOKEN'`` will also match TOKENIZED and so on.
- Still, note that there are always going to be sections of your debug output
- that are inappropriate for public consumption. File paths, configuration
- options and the like all give attackers extra information about your server.
- It is also important to remember that when running with :setting:`DEBUG`
- turned on, Django will remember every SQL query it executes. This is useful
- when you're debugging, but it'll rapidly consume memory on a production server.
- Finally, if :setting:`DEBUG` is ``False``, you also need to properly set
- the :setting:`ALLOWED_HOSTS` setting. Failing to do so will result in all
- requests being returned as "Bad Request (400)".
- .. note::
- The default :file:`settings.py` file created by :djadmin:`django-admin
- startproject <startproject>` sets ``DEBUG = True`` for convenience.
- .. setting:: DEBUG_PROPAGATE_EXCEPTIONS
- ``DEBUG_PROPAGATE_EXCEPTIONS``
- ------------------------------
- Default: ``False``
- If set to ``True``, Django's exception handling of view functions
- (:data:`~django.conf.urls.handler500`, or the debug view if :setting:`DEBUG`
- is ``True``) and logging of 500 responses (:ref:`django-request-logger`) is
- skipped and exceptions propagate upward.
- This can be useful for some test setups. It shouldn't be used on a live site
- unless you want your web server (instead of Django) to generate "Internal
- Server Error" responses. In that case, make sure your server doesn't show the
- stack trace or other sensitive information in the response.
- .. setting:: DECIMAL_SEPARATOR
- ``DECIMAL_SEPARATOR``
- ---------------------
- Default: ``'.'`` (Dot)
- Default decimal separator used when formatting decimal numbers.
- Note that the locale-dictated format has higher precedence and will be applied
- instead.
- See also :setting:`NUMBER_GROUPING`, :setting:`THOUSAND_SEPARATOR` and
- :setting:`USE_THOUSAND_SEPARATOR`.
- .. setting:: DEFAULT_AUTO_FIELD
- ``DEFAULT_AUTO_FIELD``
- ----------------------
- Default: ``'``:class:`django.db.models.AutoField`\ ``'``
- Default primary key field type to use for models that don't have a field with
- :attr:`primary_key=True <django.db.models.Field.primary_key>`.
- .. admonition:: Migrating auto-created through tables
- The value of ``DEFAULT_AUTO_FIELD`` will be respected when creating new
- auto-created through tables for many-to-many relationships.
- Unfortunately, the primary keys of existing auto-created through tables
- cannot currently be updated by the migrations framework.
- This means that if you switch the value of ``DEFAULT_AUTO_FIELD`` and then
- generate migrations, the primary keys of the related models will be
- updated, as will the foreign keys from the through table, but the primary
- key of the auto-created through table will not be migrated.
- In order to address this, you should add a
- :class:`~django.db.migrations.operations.RunSQL` operation to your
- migrations to perform the required ``ALTER TABLE`` step. You can check the
- existing table name through ``sqlmigrate``, ``dbshell``, or with the
- field’s ``remote_field.through._meta.db_table`` property.
- Explicitly defined through models are already handled by the migrations
- system.
- Allowing automatic migrations for the primary key of existing auto-created
- through tables :ticket:`may be implemented at a later date <32674>`.
- .. setting:: DEFAULT_CHARSET
- ``DEFAULT_CHARSET``
- -------------------
- Default: ``'utf-8'``
- Default charset to use for all ``HttpResponse`` objects, if a MIME type isn't
- manually specified. Used when constructing the ``Content-Type`` header.
- .. setting:: DEFAULT_EXCEPTION_REPORTER
- ``DEFAULT_EXCEPTION_REPORTER``
- ------------------------------
- Default: ``'``:class:`django.views.debug.ExceptionReporter`\ ``'``
- Default exception reporter class to be used if none has been assigned to the
- :class:`~django.http.HttpRequest` instance yet. See
- :ref:`custom-error-reports`.
- .. setting:: DEFAULT_EXCEPTION_REPORTER_FILTER
- ``DEFAULT_EXCEPTION_REPORTER_FILTER``
- -------------------------------------
- Default: ``'``:class:`django.views.debug.SafeExceptionReporterFilter`\ ``'``
- Default exception reporter filter class to be used if none has been assigned to
- the :class:`~django.http.HttpRequest` instance yet.
- See :ref:`Filtering error reports<filtering-error-reports>`.
- .. setting:: DEFAULT_FROM_EMAIL
- ``DEFAULT_FROM_EMAIL``
- ----------------------
- Default: ``'webmaster@localhost'``
- Default email address for automated correspondence from the site manager(s).
- This address is used in the ``From:`` header of outgoing emails and can take
- any format valid in the chosen email sending protocol.
- This doesn't affect error messages sent to :setting:`ADMINS` and
- :setting:`MANAGERS`. See :setting:`SERVER_EMAIL` for that.
- .. setting:: DEFAULT_INDEX_TABLESPACE
- ``DEFAULT_INDEX_TABLESPACE``
- ----------------------------
- Default: ``''`` (Empty string)
- Default tablespace to use for indexes on fields that don't specify
- one, if the backend supports it (see :doc:`/topics/db/tablespaces`).
- .. setting:: DEFAULT_TABLESPACE
- ``DEFAULT_TABLESPACE``
- ----------------------
- Default: ``''`` (Empty string)
- Default tablespace to use for models that don't specify one, if the
- backend supports it (see :doc:`/topics/db/tablespaces`).
- .. setting:: DISALLOWED_USER_AGENTS
- ``DISALLOWED_USER_AGENTS``
- --------------------------
- Default: ``[]`` (Empty list)
- List of compiled regular expression objects representing User-Agent strings
- that are not allowed to visit any page, systemwide. Use this for bots/crawlers.
- This is only used if ``CommonMiddleware`` is installed (see
- :doc:`/topics/http/middleware`).
- .. setting:: EMAIL_BACKEND
- ``EMAIL_BACKEND``
- -----------------
- Default: ``'``:class:`django.core.mail.backends.smtp.EmailBackend`\ ``'``
- The backend to use for sending emails. For the list of available backends see
- :ref:`topic-email-backends`.
- .. setting:: EMAIL_FILE_PATH
- ``EMAIL_FILE_PATH``
- -------------------
- Default: Not defined
- The directory used by the :ref:`file email backend <topic-email-file-backend>`
- to store output files.
- .. setting:: EMAIL_HOST
- ``EMAIL_HOST``
- --------------
- Default: ``'localhost'``
- The host to use for sending email.
- See also :setting:`EMAIL_PORT`.
- .. setting:: EMAIL_HOST_PASSWORD
- ``EMAIL_HOST_PASSWORD``
- -----------------------
- Default: ``''`` (Empty string)
- Password to use for the SMTP server defined in :setting:`EMAIL_HOST`. This
- setting is used in conjunction with :setting:`EMAIL_HOST_USER` when
- authenticating to the SMTP server. If either of these settings is empty,
- Django won't attempt authentication.
- See also :setting:`EMAIL_HOST_USER`.
- .. setting:: EMAIL_HOST_USER
- ``EMAIL_HOST_USER``
- -------------------
- Default: ``''`` (Empty string)
- Username to use for the SMTP server defined in :setting:`EMAIL_HOST`.
- If empty, Django won't attempt authentication.
- See also :setting:`EMAIL_HOST_PASSWORD`.
- .. setting:: EMAIL_PORT
- ``EMAIL_PORT``
- --------------
- Default: ``25``
- Port to use for the SMTP server defined in :setting:`EMAIL_HOST`.
- .. setting:: EMAIL_SUBJECT_PREFIX
- ``EMAIL_SUBJECT_PREFIX``
- ------------------------
- Default: ``'[Django] '``
- Subject-line prefix for email messages sent with ``django.core.mail.mail_admins``
- or ``django.core.mail.mail_managers``. You'll probably want to include the
- trailing space.
- .. setting:: EMAIL_USE_LOCALTIME
- ``EMAIL_USE_LOCALTIME``
- -----------------------
- Default: ``False``
- Whether to send the SMTP ``Date`` header of email messages in the local time
- zone (``True``) or in UTC (``False``).
- .. setting:: EMAIL_USE_TLS
- ``EMAIL_USE_TLS``
- -----------------
- Default: ``False``
- Whether to use a TLS (secure) connection when talking to the SMTP server.
- This is used for explicit TLS connections, generally on port 587. If you are
- experiencing hanging connections, see the implicit TLS setting
- :setting:`EMAIL_USE_SSL`.
- .. setting:: EMAIL_USE_SSL
- ``EMAIL_USE_SSL``
- -----------------
- Default: ``False``
- Whether to use an implicit TLS (secure) connection when talking to the SMTP
- server. In most email documentation this type of TLS connection is referred
- to as SSL. It is generally used on port 465. If you are experiencing problems,
- see the explicit TLS setting :setting:`EMAIL_USE_TLS`.
- Note that :setting:`EMAIL_USE_TLS`/:setting:`EMAIL_USE_SSL` are mutually
- exclusive, so only set one of those settings to ``True``.
- .. setting:: EMAIL_SSL_CERTFILE
- ``EMAIL_SSL_CERTFILE``
- ----------------------
- Default: ``None``
- If :setting:`EMAIL_USE_SSL` or :setting:`EMAIL_USE_TLS` is ``True`` and the
- secure connection to the SMTP server requires client authentication, use this
- setting to specify the path to a PEM-formatted certificate chain file, which
- must be used in conjunction with :setting:`EMAIL_SSL_KEYFILE`.
- ``EMAIL_SSL_CERTFILE`` should not be used with a self-signed server certificate
- or a certificate from a private certificate authority (CA). In such cases, the
- server's certificate (or the root certificate of the private CA) should be
- installed into the system's CA bundle. This can be done by following
- platform-specific instructions for installing a root CA certificate,
- or by using OpenSSL's ``SSL_CERT_FILE`` or ``SSL_CERT_DIR`` environment
- variables to specify a custom certificate bundle (if modifying the system
- bundle is not possible or desired).
- For more complex scenarios, the SMTP
- :class:`~django.core.mail.backends.smtp.EmailBackend` can be subclassed to add
- root certificates to its ``ssl_context`` using
- :meth:`python:ssl.SSLContext.load_verify_locations`.
- .. setting:: EMAIL_SSL_KEYFILE
- ``EMAIL_SSL_KEYFILE``
- ---------------------
- Default: ``None``
- If :setting:`EMAIL_USE_SSL` or :setting:`EMAIL_USE_TLS` is ``True``, you can
- optionally specify the path to a PEM-formatted private key file for client
- authentication of the SSL connection along with :setting:`EMAIL_SSL_CERTFILE`.
- Note that setting :setting:`EMAIL_SSL_CERTFILE` and :setting:`EMAIL_SSL_KEYFILE`
- doesn't result in any certificate checking. They're passed to the underlying SSL
- connection. Please refer to the documentation of Python's
- :meth:`python:ssl.SSLContext.wrap_socket` function for details on how the
- certificate chain file and private key file are handled.
- .. setting:: EMAIL_TIMEOUT
- ``EMAIL_TIMEOUT``
- -----------------
- Default: ``None``
- Specifies a timeout in seconds for blocking operations like the connection
- attempt.
- .. setting:: FILE_UPLOAD_HANDLERS
- ``FILE_UPLOAD_HANDLERS``
- ------------------------
- Default::
- [
- "django.core.files.uploadhandler.MemoryFileUploadHandler",
- "django.core.files.uploadhandler.TemporaryFileUploadHandler",
- ]
- A list of handlers to use for uploading. Changing this setting allows complete
- customization -- even replacement -- of Django's upload process.
- See :doc:`/topics/files` for details.
- .. setting:: FILE_UPLOAD_MAX_MEMORY_SIZE
- ``FILE_UPLOAD_MAX_MEMORY_SIZE``
- -------------------------------
- Default: ``2621440`` (i.e. 2.5 MB).
- The maximum size (in bytes) that an upload will be before it gets streamed to
- the file system. See :doc:`/topics/files` for details.
- See also :setting:`DATA_UPLOAD_MAX_MEMORY_SIZE`.
- .. setting:: FILE_UPLOAD_DIRECTORY_PERMISSIONS
- ``FILE_UPLOAD_DIRECTORY_PERMISSIONS``
- -------------------------------------
- Default: ``None``
- The numeric mode to apply to directories created in the process of uploading
- files.
- This setting also determines the default permissions for collected static
- directories when using the :djadmin:`collectstatic` management command. See
- :djadmin:`collectstatic` for details on overriding it.
- This value mirrors the functionality and caveats of the
- :setting:`FILE_UPLOAD_PERMISSIONS` setting.
- .. setting:: FILE_UPLOAD_PERMISSIONS
- ``FILE_UPLOAD_PERMISSIONS``
- ---------------------------
- Default: ``0o644``
- The numeric mode (i.e. ``0o644``) to set newly uploaded files to. For
- more information about what these modes mean, see the documentation for
- :func:`os.chmod`.
- If ``None``, you'll get operating-system dependent behavior. On most platforms,
- temporary files will have a mode of ``0o600``, and files saved from memory will
- be saved using the system's standard umask.
- For security reasons, these permissions aren't applied to the temporary files
- that are stored in :setting:`FILE_UPLOAD_TEMP_DIR`.
- This setting also determines the default permissions for collected static files
- when using the :djadmin:`collectstatic` management command. See
- :djadmin:`collectstatic` for details on overriding it.
- .. warning::
- **Always prefix the mode with** ``0o`` **.**
- If you're not familiar with file modes, please note that the ``0o`` prefix
- is very important: it indicates an octal number, which is the way that
- modes must be specified. If you try to use ``644``, you'll get totally
- incorrect behavior.
- .. setting:: FILE_UPLOAD_TEMP_DIR
- ``FILE_UPLOAD_TEMP_DIR``
- ------------------------
- Default: ``None``
- The directory to store data to (typically files larger than
- :setting:`FILE_UPLOAD_MAX_MEMORY_SIZE`) temporarily while uploading files.
- If ``None``, Django will use the standard temporary directory for the operating
- system. For example, this will default to ``/tmp`` on \*nix-style operating
- systems.
- See :doc:`/topics/files` for details.
- .. setting:: FIRST_DAY_OF_WEEK
- ``FIRST_DAY_OF_WEEK``
- ---------------------
- Default: ``0`` (Sunday)
- A number representing the first day of the week. This is especially useful
- when displaying a calendar. This value is only used when not using
- format internationalization, or when a format cannot be found for the
- current locale.
- The value must be an integer from 0 to 6, where 0 means Sunday, 1 means
- Monday and so on.
- .. setting:: FIXTURE_DIRS
- ``FIXTURE_DIRS``
- ----------------
- Default: ``[]`` (Empty list)
- List of directories searched for :ref:`fixture <fixtures-explanation>` files,
- in addition to the ``fixtures`` directory of each application, in search order.
- Note that these paths should use Unix-style forward slashes, even on Windows.
- See :ref:`initial-data-via-fixtures` and :ref:`topics-testing-fixtures`.
- .. setting:: FORCE_SCRIPT_NAME
- ``FORCE_SCRIPT_NAME``
- ---------------------
- Default: ``None``
- If not ``None``, this will be used as the value of the ``SCRIPT_NAME``
- environment variable in any HTTP request. This setting can be used to override
- the server-provided value of ``SCRIPT_NAME``, which may be a rewritten version
- of the preferred value or not supplied at all. It is also used by
- :func:`django.setup()` to set the URL resolver script prefix outside of the
- request/response cycle (e.g. in management commands and standalone scripts) to
- generate correct URLs when ``FORCE_SCRIPT_NAME`` is provided.
- .. setting:: FORM_RENDERER
- ``FORM_RENDERER``
- -----------------
- Default: ``'``:class:`django.forms.renderers.DjangoTemplates`\ ``'``
- The class that renders forms and form widgets. It must implement
- :ref:`the low-level render API <low-level-widget-render-api>`. Included form
- renderers are:
- * ``'``:class:`django.forms.renderers.DjangoTemplates`\ ``'``
- * ``'``:class:`django.forms.renderers.Jinja2`\ ``'``
- * ``'``:class:`django.forms.renderers.TemplatesSetting`\ ``'``
- .. setting:: FORMAT_MODULE_PATH
- ``FORMAT_MODULE_PATH``
- ----------------------
- Default: ``None``
- A full Python path to a Python package that contains custom format definitions
- for project locales. If not ``None``, Django will check for a ``formats.py``
- file, under the directory named as the current locale, and will use the
- formats defined in this file.
- The name of the directory containing the format definitions is expected to be
- named using :term:`locale name` notation, for example ``de``, ``pt_BR``,
- ``en_US``, etc.
- For example, if :setting:`FORMAT_MODULE_PATH` is set to ``mysite.formats``,
- and current language is ``en`` (English), Django will expect a directory tree
- like:
- .. code-block:: text
- mysite/
- formats/
- __init__.py
- en/
- __init__.py
- formats.py
- You can also set this setting to a list of Python paths, for example::
- FORMAT_MODULE_PATH = [
- "mysite.formats",
- "some_app.formats",
- ]
- When Django searches for a certain format, it will go through all given Python
- paths until it finds a module that actually defines the given format. This
- means that formats defined in packages farther up in the list will take
- precedence over the same formats in packages farther down.
- Available formats are:
- * :setting:`DATE_FORMAT`
- * :setting:`DATE_INPUT_FORMATS`
- * :setting:`DATETIME_FORMAT`,
- * :setting:`DATETIME_INPUT_FORMATS`
- * :setting:`DECIMAL_SEPARATOR`
- * :setting:`FIRST_DAY_OF_WEEK`
- * :setting:`MONTH_DAY_FORMAT`
- * :setting:`NUMBER_GROUPING`
- * :setting:`SHORT_DATE_FORMAT`
- * :setting:`SHORT_DATETIME_FORMAT`
- * :setting:`THOUSAND_SEPARATOR`
- * :setting:`TIME_FORMAT`
- * :setting:`TIME_INPUT_FORMATS`
- * :setting:`YEAR_MONTH_FORMAT`
- .. setting:: IGNORABLE_404_URLS
- ``IGNORABLE_404_URLS``
- ----------------------
- Default: ``[]`` (Empty list)
- List of compiled regular expression objects describing URLs that should be
- ignored when reporting HTTP 404 errors via email (see
- :doc:`/howto/error-reporting`). Regular expressions are matched against
- :meth:`request's full paths <django.http.HttpRequest.get_full_path>` (including
- query string, if any). Use this if your site does not provide a commonly
- requested file such as ``favicon.ico`` or ``robots.txt``.
- This is only used if
- :class:`~django.middleware.common.BrokenLinkEmailsMiddleware` is enabled (see
- :doc:`/topics/http/middleware`).
- .. setting:: INSTALLED_APPS
- ``INSTALLED_APPS``
- ------------------
- Default: ``[]`` (Empty list)
- A list of strings designating all applications that are enabled in this
- Django installation. Each string should be a dotted Python path to:
- * an application configuration class (preferred), or
- * a package containing an application.
- :doc:`Learn more about application configurations </ref/applications>`.
- .. admonition:: Use the application registry for introspection
- Your code should never access :setting:`INSTALLED_APPS` directly. Use
- :attr:`django.apps.apps` instead.
- .. admonition:: Application names and labels must be unique in
- :setting:`INSTALLED_APPS`
- Application :attr:`names <django.apps.AppConfig.name>` — the dotted Python
- path to the application package — must be unique. There is no way to
- include the same application twice, short of duplicating its code under
- another name.
- Application :attr:`labels <django.apps.AppConfig.label>` — by default the
- final part of the name — must be unique too. For example, you can't
- include both ``django.contrib.auth`` and ``myproject.auth``. However, you
- can relabel an application with a custom configuration that defines a
- different :attr:`~django.apps.AppConfig.label`.
- These rules apply regardless of whether :setting:`INSTALLED_APPS`
- references application configuration classes or application packages.
- When several applications provide different versions of the same resource
- (template, static file, management command, translation), the application
- listed first in :setting:`INSTALLED_APPS` has precedence.
- .. setting:: INTERNAL_IPS
- ``INTERNAL_IPS``
- ----------------
- Default: ``[]`` (Empty list)
- A list of IP addresses, as strings, that:
- * Allow the :func:`~django.template.context_processors.debug` context processor
- to add some variables to the template context.
- * Can use the :ref:`admindocs bookmarklets <admindocs-bookmarklets>` even if
- not logged in as a staff user.
- * Are marked as "internal" (as opposed to "EXTERNAL") in
- :class:`~django.utils.log.AdminEmailHandler` emails.
- .. setting:: LANGUAGE_CODE
- ``LANGUAGE_CODE``
- -----------------
- Default: ``'en-us'``
- A string representing the language code for this installation. This should be in
- standard :term:`language ID format <language code>`. For example, U.S. English
- is ``"en-us"``. See also the `list of language identifiers`_ and
- :doc:`/topics/i18n/index`.
- It serves three purposes:
- * If the locale middleware isn't in use, it decides which translation is served
- to all users.
- * If the locale middleware is active, it provides a fallback language in case the
- user's preferred language can't be determined or is not supported by the
- website. It also provides the fallback translation when a translation for a
- given literal doesn't exist for the user's preferred language.
- * If localization is explicitly disabled via the :tfilter:`unlocalize` filter
- or the :ttag:`{% localize off %}<localize>` tag, it provides fallback
- localization formats which will be applied instead. See
- :ref:`controlling localization in templates <topic-l10n-templates>` for
- details.
- See :ref:`how-django-discovers-language-preference` for more details.
- .. _list of language identifiers: http://www.i18nguy.com/unicode/language-identifiers.html
- .. setting:: LANGUAGE_COOKIE_AGE
- ``LANGUAGE_COOKIE_AGE``
- -----------------------
- Default: ``None`` (expires at browser close)
- The age of the language cookie, in seconds.
- .. setting:: LANGUAGE_COOKIE_DOMAIN
- ``LANGUAGE_COOKIE_DOMAIN``
- --------------------------
- Default: ``None``
- The domain to use for the language cookie. Set this to a string such as
- ``"example.com"`` for cross-domain cookies, or use ``None`` for a standard
- domain cookie.
- Be cautious when updating this setting on a production site. If you update
- this setting to enable cross-domain cookies on a site that previously used
- standard domain cookies, existing user cookies that have the old domain
- will not be updated. This will result in site users being unable to switch
- the language as long as these cookies persist. The only safe and reliable
- option to perform the switch is to change the language cookie name
- permanently (via the :setting:`LANGUAGE_COOKIE_NAME` setting) and to add
- a middleware that copies the value from the old cookie to a new one and then
- deletes the old one.
- .. setting:: LANGUAGE_COOKIE_HTTPONLY
- ``LANGUAGE_COOKIE_HTTPONLY``
- ----------------------------
- Default: ``False``
- Whether to use ``HttpOnly`` flag on the language cookie. If this is set to
- ``True``, client-side JavaScript will not be able to access the language
- cookie.
- See :setting:`SESSION_COOKIE_HTTPONLY` for details on ``HttpOnly``.
- .. setting:: LANGUAGE_COOKIE_NAME
- ``LANGUAGE_COOKIE_NAME``
- ------------------------
- Default: ``'django_language'``
- The name of the cookie to use for the language cookie. This can be whatever
- you want (as long as it's different from the other cookie names in your
- application). See :doc:`/topics/i18n/index`.
- .. setting:: LANGUAGE_COOKIE_PATH
- ``LANGUAGE_COOKIE_PATH``
- ------------------------
- Default: ``'/'``
- The path set on the language cookie. This should either match the URL path of your
- Django installation or be a parent of that path.
- This is useful if you have multiple Django instances running under the same
- hostname. They can use different cookie paths and each instance will only see
- its own language cookie.
- Be cautious when updating this setting on a production site. If you update this
- setting to use a deeper path than it previously used, existing user cookies that
- have the old path will not be updated. This will result in site users being
- unable to switch the language as long as these cookies persist. The only safe
- and reliable option to perform the switch is to change the language cookie name
- permanently (via the :setting:`LANGUAGE_COOKIE_NAME` setting), and to add
- a middleware that copies the value from the old cookie to a new one and then
- deletes the one.
- .. setting:: LANGUAGE_COOKIE_SAMESITE
- ``LANGUAGE_COOKIE_SAMESITE``
- ----------------------------
- Default: ``None``
- The value of the `SameSite`_ flag on the language cookie. This flag prevents the
- cookie from being sent in cross-site requests.
- See :setting:`SESSION_COOKIE_SAMESITE` for details about ``SameSite``.
- .. setting:: LANGUAGE_COOKIE_SECURE
- ``LANGUAGE_COOKIE_SECURE``
- --------------------------
- Default: ``False``
- Whether to use a secure cookie for the language cookie. If this is set to
- ``True``, the cookie will be marked as "secure", which means browsers may
- ensure that the cookie is only sent under an HTTPS connection.
- .. setting:: LANGUAGES
- ``LANGUAGES``
- -------------
- Default: A list of all available languages. This list is continually growing
- and including a copy here would inevitably become rapidly out of date. You can
- see the current list of translated languages by looking in
- :source:`django/conf/global_settings.py`.
- The list is a list of 2-tuples in the format
- (:term:`language code<language code>`, ``language name``) -- for example,
- ``('ja', 'Japanese')``.
- This specifies which languages are available for language selection. See
- :doc:`/topics/i18n/index`.
- Generally, the default value should suffice. Only set this setting if you want
- to restrict language selection to a subset of the Django-provided languages.
- If you define a custom :setting:`LANGUAGES` setting, you can mark the
- language names as translation strings using the
- :func:`~django.utils.translation.gettext_lazy` function.
- Here's a sample settings file::
- from django.utils.translation import gettext_lazy as _
- LANGUAGES = [
- ("de", _("German")),
- ("en", _("English")),
- ]
- .. setting:: LANGUAGES_BIDI
- ``LANGUAGES_BIDI``
- ------------------
- Default: A list of all language codes that are written right-to-left. You can
- see the current list of these languages by looking in
- :source:`django/conf/global_settings.py`.
- The list contains :term:`language codes<language code>` for languages that are
- written right-to-left.
- Generally, the default value should suffice. Only set this setting if you want
- to restrict language selection to a subset of the Django-provided languages.
- If you define a custom :setting:`LANGUAGES` setting, the list of bidirectional
- languages may contain language codes which are not enabled on a given site.
- .. setting:: LOCALE_PATHS
- ``LOCALE_PATHS``
- ----------------
- Default: ``[]`` (Empty list)
- A list of directories where Django looks for translation files.
- See :ref:`how-django-discovers-translations`.
- Example::
- LOCALE_PATHS = [
- "/home/www/project/common_files/locale",
- "/var/local/translations/locale",
- ]
- Django will look within each of these paths for the ``<locale_code>/LC_MESSAGES``
- directories containing the actual translation files.
- .. setting:: LOGGING
- ``LOGGING``
- -----------
- Default: A logging configuration dictionary.
- A data structure containing configuration information. When not-empty, the
- contents of this data structure will be passed as the argument to the
- configuration method described in :setting:`LOGGING_CONFIG`.
- Among other things, the default logging configuration passes HTTP 500 server
- errors to an email log handler when :setting:`DEBUG` is ``False``. See also
- :ref:`configuring-logging`.
- You can see the default logging configuration by looking in
- :source:`django/utils/log.py`.
- .. setting:: LOGGING_CONFIG
- ``LOGGING_CONFIG``
- ------------------
- Default: ``'logging.config.dictConfig'``
- A path to a callable that will be used to configure logging in the
- Django project. Points at an instance of Python's :ref:`dictConfig
- <logging-config-dictschema>` configuration method by default.
- If you set :setting:`LOGGING_CONFIG` to ``None``, the logging
- configuration process will be skipped.
- .. setting:: MANAGERS
- ``MANAGERS``
- ------------
- Default: ``[]`` (Empty list)
- A list in the same format as :setting:`ADMINS` that specifies who should get
- broken link notifications when
- :class:`~django.middleware.common.BrokenLinkEmailsMiddleware` is enabled.
- .. setting:: MEDIA_ROOT
- ``MEDIA_ROOT``
- --------------
- Default: ``''`` (Empty string)
- Absolute filesystem path to the directory that will hold :doc:`user-uploaded
- files </topics/files>`.
- Example: ``"/var/www/example.com/media/"``
- See also :setting:`MEDIA_URL`.
- .. warning::
- :setting:`MEDIA_ROOT` and :setting:`STATIC_ROOT` must have different
- values. Before :setting:`STATIC_ROOT` was introduced, it was common to
- rely or fallback on :setting:`MEDIA_ROOT` to also serve static files;
- however, since this can have serious security implications, there is a
- validation check to prevent it.
- .. setting:: MEDIA_URL
- ``MEDIA_URL``
- -------------
- Default: ``''`` (Empty string)
- URL that handles the media served from :setting:`MEDIA_ROOT`, used
- for :doc:`managing stored files </topics/files>`. It must end in a slash if set
- to a non-empty value. You will need to :ref:`configure these files to be served
- <serving-uploaded-files-in-development>` in both development and production
- environments.
- If you want to use ``{{ MEDIA_URL }}`` in your templates, add
- ``'django.template.context_processors.media'`` in the ``'context_processors'``
- option of :setting:`TEMPLATES`.
- Example: ``"https://media.example.com/"``
- .. warning::
- There are security risks if you are accepting uploaded content from
- untrusted users! See the security guide's topic on
- :ref:`user-uploaded-content-security` for mitigation details.
- .. warning::
- :setting:`MEDIA_URL` and :setting:`STATIC_URL` must have different
- values. See :setting:`MEDIA_ROOT` for more details.
- .. note::
- If :setting:`MEDIA_URL` is a relative path, then it will be prefixed by the
- server-provided value of ``SCRIPT_NAME`` (or ``/`` if not set). This makes
- it easier to serve a Django application in a subpath without adding an
- extra configuration to the settings.
- .. setting:: MIDDLEWARE
- ``MIDDLEWARE``
- --------------
- Default: ``None``
- A list of middleware to use. See :doc:`/topics/http/middleware`.
- .. setting:: MIGRATION_MODULES
- ``MIGRATION_MODULES``
- ---------------------
- Default: ``{}`` (Empty dictionary)
- A dictionary specifying the package where migration modules can be found on a
- per-app basis. The default value of this setting is an empty dictionary, but
- the default package name for migration modules is ``migrations``.
- Example::
- {"blog": "blog.db_migrations"}
- In this case, migrations pertaining to the ``blog`` app will be contained in
- the ``blog.db_migrations`` package.
- If you provide the ``app_label`` argument, :djadmin:`makemigrations` will
- automatically create the package if it doesn't already exist.
- When you supply ``None`` as a value for an app, Django will consider the app as
- an app without migrations regardless of an existing ``migrations`` submodule.
- This can be used, for example, in a test settings file to skip migrations while
- testing (tables will still be created for the apps' models). To disable
- migrations for all apps during tests, you can set the
- :setting:`MIGRATE <TEST_MIGRATE>` to ``False`` instead. If
- ``MIGRATION_MODULES`` is used in your general project settings, remember to use
- the :option:`migrate --run-syncdb` option if you want to create tables for the
- app.
- .. setting:: MONTH_DAY_FORMAT
- ``MONTH_DAY_FORMAT``
- --------------------
- Default: ``'F j'``
- The default formatting to use for date fields on Django admin change-list
- pages -- and, possibly, by other parts of the system -- in cases when only the
- month and day are displayed.
- For example, when a Django admin change-list page is being filtered by a date
- drilldown, the header for a given day displays the day and month. Different
- locales have different formats. For example, U.S. English would say
- "January 1," whereas Spanish might say "1 Enero."
- Note that the corresponding locale-dictated format has higher precedence and
- will be applied instead.
- See :tfilter:`allowed date format strings <date>`. See also
- :setting:`DATE_FORMAT`, :setting:`DATETIME_FORMAT`,
- :setting:`TIME_FORMAT` and :setting:`YEAR_MONTH_FORMAT`.
- .. setting:: NUMBER_GROUPING
- ``NUMBER_GROUPING``
- -------------------
- Default: ``0``
- Number of digits grouped together on the integer part of a number.
- Common use is to display a thousand separator. If this setting is ``0``, then
- no grouping will be applied to the number. If this setting is greater than
- ``0``, then :setting:`THOUSAND_SEPARATOR` will be used as the separator between
- those groups.
- Some locales use non-uniform digit grouping, e.g. ``10,00,00,000`` in
- ``en_IN``. For this case, you can provide a sequence with the number of digit
- group sizes to be applied. The first number defines the size of the group
- preceding the decimal delimiter, and each number that follows defines the size
- of preceding groups. If the sequence is terminated with ``-1``, no further
- grouping is performed. If the sequence terminates with a ``0``, the last group
- size is used for the remainder of the number.
- Example tuple for ``en_IN``::
- NUMBER_GROUPING = (3, 2, 0)
- Note that the locale-dictated format has higher precedence and will be applied
- instead.
- See also :setting:`DECIMAL_SEPARATOR`, :setting:`THOUSAND_SEPARATOR` and
- :setting:`USE_THOUSAND_SEPARATOR`.
- .. setting:: PREPEND_WWW
- ``PREPEND_WWW``
- ---------------
- Default: ``False``
- Whether to prepend the "www." subdomain to URLs that don't have it. This is only
- used if :class:`~django.middleware.common.CommonMiddleware` is installed
- (see :doc:`/topics/http/middleware`). See also :setting:`APPEND_SLASH`.
- .. setting:: ROOT_URLCONF
- ``ROOT_URLCONF``
- ----------------
- Default: Not defined
- A string representing the full Python import path to your root URLconf, for
- example ``"mydjangoapps.urls"``. Can be overridden on a per-request basis by
- setting the attribute ``urlconf`` on the incoming ``HttpRequest``
- object. See :ref:`how-django-processes-a-request` for details.
- .. setting:: SECRET_KEY
- ``SECRET_KEY``
- --------------
- Default: ``''`` (Empty string)
- A secret key for a particular Django installation. This is used to provide
- :doc:`cryptographic signing </topics/signing>`, and should be set to a unique,
- unpredictable value.
- :djadmin:`django-admin startproject <startproject>` automatically adds a
- randomly-generated ``SECRET_KEY`` to each new project.
- Uses of the key shouldn't assume that it's text or bytes. Every use should go
- through :func:`~django.utils.encoding.force_str` or
- :func:`~django.utils.encoding.force_bytes` to convert it to the desired type.
- Django will refuse to start if :setting:`SECRET_KEY` is not set.
- .. warning::
- **Keep this value secret.**
- Running Django with a known :setting:`SECRET_KEY` defeats many of Django's
- security protections, and can lead to privilege escalation and remote code
- execution vulnerabilities.
- The secret key is used for:
- * All :doc:`sessions </topics/http/sessions>` if you are using
- any other session backend than ``django.contrib.sessions.backends.cache``,
- or are using the default
- :meth:`~django.contrib.auth.models.AbstractBaseUser.get_session_auth_hash()`.
- * All :doc:`messages </ref/contrib/messages>` if you are using
- :class:`~django.contrib.messages.storage.cookie.CookieStorage` or
- :class:`~django.contrib.messages.storage.fallback.FallbackStorage`.
- * All :class:`~django.contrib.auth.views.PasswordResetView` tokens.
- * Any usage of :doc:`cryptographic signing </topics/signing>`, unless a
- different key is provided.
- When a secret key is no longer set as :setting:`SECRET_KEY` or contained within
- :setting:`SECRET_KEY_FALLBACKS` all of the above will be invalidated. When
- rotating your secret key, you should move the old key to
- :setting:`SECRET_KEY_FALLBACKS` temporarily. Secret keys are not used for
- passwords of users and key rotation will not affect them.
- .. note::
- The default :file:`settings.py` file created by :djadmin:`django-admin
- startproject <startproject>` creates a unique ``SECRET_KEY`` for
- convenience.
- .. setting:: SECRET_KEY_FALLBACKS
- ``SECRET_KEY_FALLBACKS``
- ------------------------
- Default: ``[]``
- A list of fallback secret keys for a particular Django installation. These are
- used to allow rotation of the ``SECRET_KEY``.
- In order to rotate your secret keys, set a new ``SECRET_KEY`` and move the
- previous value to the beginning of ``SECRET_KEY_FALLBACKS``. Then remove the
- old values from the end of the ``SECRET_KEY_FALLBACKS`` when you are ready to
- expire the sessions, password reset tokens, and so on, that make use of them.
- .. note::
- Signing operations are computationally expensive. Having multiple old key
- values in ``SECRET_KEY_FALLBACKS`` adds additional overhead to all checks
- that don't match an earlier key.
- As such, fallback values should be removed after an appropriate period,
- allowing for key rotation.
- Uses of the secret key values shouldn't assume that they are text or bytes.
- Every use should go through :func:`~django.utils.encoding.force_str` or
- :func:`~django.utils.encoding.force_bytes` to convert it to the desired type.
- .. setting:: SECURE_CONTENT_TYPE_NOSNIFF
- ``SECURE_CONTENT_TYPE_NOSNIFF``
- -------------------------------
- Default: ``True``
- If ``True``, the :class:`~django.middleware.security.SecurityMiddleware`
- sets the :ref:`x-content-type-options` header on all responses that do not
- already have it.
- .. setting:: SECURE_CROSS_ORIGIN_OPENER_POLICY
- ``SECURE_CROSS_ORIGIN_OPENER_POLICY``
- -------------------------------------
- Default: ``'same-origin'``
- Unless set to ``None``, the
- :class:`~django.middleware.security.SecurityMiddleware` sets the
- :ref:`cross-origin-opener-policy` header on all responses that do not already
- have it to the value provided.
- .. setting:: SECURE_HSTS_INCLUDE_SUBDOMAINS
- ``SECURE_HSTS_INCLUDE_SUBDOMAINS``
- ----------------------------------
- Default: ``False``
- If ``True``, the :class:`~django.middleware.security.SecurityMiddleware` adds
- the ``includeSubDomains`` directive to the :ref:`http-strict-transport-security`
- header. It has no effect unless :setting:`SECURE_HSTS_SECONDS` is set to a
- non-zero value.
- .. warning::
- Setting this incorrectly can irreversibly (for the value of
- :setting:`SECURE_HSTS_SECONDS`) break your site. Read the
- :ref:`http-strict-transport-security` documentation first.
- .. setting:: SECURE_HSTS_PRELOAD
- ``SECURE_HSTS_PRELOAD``
- -----------------------
- Default: ``False``
- If ``True``, the :class:`~django.middleware.security.SecurityMiddleware` adds
- the ``preload`` directive to the :ref:`http-strict-transport-security`
- header. It has no effect unless :setting:`SECURE_HSTS_SECONDS` is set to a
- non-zero value.
- .. setting:: SECURE_HSTS_SECONDS
- ``SECURE_HSTS_SECONDS``
- -----------------------
- Default: ``0``
- If set to a non-zero integer value, the
- :class:`~django.middleware.security.SecurityMiddleware` sets the
- :ref:`http-strict-transport-security` header on all responses that do not
- already have it.
- .. warning::
- Setting this incorrectly can irreversibly (for some time) break your site.
- Read the :ref:`http-strict-transport-security` documentation first.
- .. setting:: SECURE_PROXY_SSL_HEADER
- ``SECURE_PROXY_SSL_HEADER``
- ---------------------------
- Default: ``None``
- A tuple representing an HTTP header/value combination that signifies a request
- is secure. This controls the behavior of the request object's ``is_secure()``
- method.
- By default, ``is_secure()`` determines if a request is secure by confirming
- that a requested URL uses ``https://``. This method is important for Django's
- CSRF protection, and it may be used by your own code or third-party apps.
- If your Django app is behind a proxy, though, the proxy may be "swallowing"
- whether the original request uses HTTPS or not. If there is a non-HTTPS
- connection between the proxy and Django then ``is_secure()`` would always
- return ``False`` -- even for requests that were made via HTTPS by the end user.
- In contrast, if there is an HTTPS connection between the proxy and Django then
- ``is_secure()`` would always return ``True`` -- even for requests that were
- made originally via HTTP.
- In this situation, configure your proxy to set a custom HTTP header that tells
- Django whether the request came in via HTTPS, and set
- ``SECURE_PROXY_SSL_HEADER`` so that Django knows what header to look for.
- Set a tuple with two elements -- the name of the header to look for and the
- required value. For example::
- SECURE_PROXY_SSL_HEADER = ("HTTP_X_FORWARDED_PROTO", "https")
- This tells Django to trust the ``X-Forwarded-Proto`` header that comes from our
- proxy and that the request is guaranteed to be secure (i.e., it originally came
- in via HTTPS) when:
- * the header value is ``'https'``, or
- * its initial, leftmost value is ``'https'`` in the case of a comma-separated
- list of protocols (e.g. ``'https,http,http'``).
- You should *only* set this setting if you control your proxy or have some other
- guarantee that it sets/strips this header appropriately.
- Note that the header needs to be in the format as used by ``request.META`` --
- all caps and likely starting with ``HTTP_``. (Remember, Django automatically
- adds ``'HTTP_'`` to the start of x-header names before making the header
- available in ``request.META``.)
- .. warning::
- **Modifying this setting can compromise your site's security. Ensure you
- fully understand your setup before changing it.**
- Make sure ALL of the following are true before setting this (assuming the
- values from the example above):
- * Your Django app is behind a proxy.
- * Your proxy strips the ``X-Forwarded-Proto`` header from all incoming
- requests, even when it contains a comma-separated list of protocols. In
- other words, if end users include that header in their requests, the
- proxy will discard it.
- * Your proxy sets the ``X-Forwarded-Proto`` header and sends it to Django,
- but only for requests that originally come in via HTTPS.
- If any of those are not true, you should keep this setting set to ``None``
- and find another way of determining HTTPS, perhaps via custom middleware.
- .. setting:: SECURE_REDIRECT_EXEMPT
- ``SECURE_REDIRECT_EXEMPT``
- --------------------------
- Default: ``[]`` (Empty list)
- If a URL path matches a regular expression in this list, the request will not be
- redirected to HTTPS. The
- :class:`~django.middleware.security.SecurityMiddleware` strips leading slashes
- from URL paths, so patterns shouldn't include them, e.g.
- ``SECURE_REDIRECT_EXEMPT = [r'^no-ssl/$', …]``. If
- :setting:`SECURE_SSL_REDIRECT` is ``False``, this setting has no effect.
- .. setting:: SECURE_REFERRER_POLICY
- ``SECURE_REFERRER_POLICY``
- --------------------------
- Default: ``'same-origin'``
- If configured, the :class:`~django.middleware.security.SecurityMiddleware` sets
- the :ref:`referrer-policy` header on all responses that do not already have it
- to the value provided.
- .. setting:: SECURE_SSL_HOST
- ``SECURE_SSL_HOST``
- -------------------
- Default: ``None``
- If a string (e.g. ``secure.example.com``), all SSL redirects will be directed
- to this host rather than the originally-requested host
- (e.g. ``www.example.com``). If :setting:`SECURE_SSL_REDIRECT` is ``False``, this
- setting has no effect.
- .. setting:: SECURE_SSL_REDIRECT
- ``SECURE_SSL_REDIRECT``
- -----------------------
- Default: ``False``
- If ``True``, the :class:`~django.middleware.security.SecurityMiddleware`
- :ref:`redirects <ssl-redirect>` all non-HTTPS requests to HTTPS (except for
- those URLs matching a regular expression listed in
- :setting:`SECURE_REDIRECT_EXEMPT`).
- .. note::
- If turning this to ``True`` causes infinite redirects, it probably means
- your site is running behind a proxy and can't tell which requests are secure
- and which are not. Your proxy likely sets a header to indicate secure
- requests; you can correct the problem by finding out what that header is and
- configuring the :setting:`SECURE_PROXY_SSL_HEADER` setting accordingly.
- .. setting:: SERIALIZATION_MODULES
- ``SERIALIZATION_MODULES``
- -------------------------
- Default: Not defined
- A dictionary of modules containing serializer definitions (provided as
- strings), keyed by a string identifier for that serialization type. For
- example, to define a YAML serializer, use::
- SERIALIZATION_MODULES = {"yaml": "path.to.yaml_serializer"}
- .. setting:: SERVER_EMAIL
- ``SERVER_EMAIL``
- ----------------
- Default: ``'root@localhost'``
- The email address that error messages come from, such as those sent to
- :setting:`ADMINS` and :setting:`MANAGERS`. This address is used in the
- ``From:`` header and can take any format valid in the chosen email sending
- protocol.
- .. admonition:: Why are my emails sent from a different address?
- This address is used only for error messages. It is *not* the address that
- regular email messages sent with :meth:`~django.core.mail.send_mail()`
- come from; for that, see :setting:`DEFAULT_FROM_EMAIL`.
- .. setting:: SHORT_DATE_FORMAT
- ``SHORT_DATE_FORMAT``
- ---------------------
- Default: ``'m/d/Y'`` (e.g. ``12/31/2003``)
- An available formatting that can be used for displaying date fields on
- templates. Note that the corresponding locale-dictated format has higher
- precedence and will be applied instead. See
- :tfilter:`allowed date format strings <date>`.
- See also :setting:`DATE_FORMAT` and :setting:`SHORT_DATETIME_FORMAT`.
- .. setting:: SHORT_DATETIME_FORMAT
- ``SHORT_DATETIME_FORMAT``
- -------------------------
- Default: ``'m/d/Y P'`` (e.g. ``12/31/2003 4 p.m.``)
- An available formatting that can be used for displaying datetime fields on
- templates. Note that the corresponding locale-dictated format has higher
- precedence and will be applied instead. See
- :tfilter:`allowed date format strings <date>`.
- See also :setting:`DATE_FORMAT` and :setting:`SHORT_DATE_FORMAT`.
- .. setting:: SIGNING_BACKEND
- ``SIGNING_BACKEND``
- -------------------
- Default: ``'django.core.signing.TimestampSigner'``
- The backend used for signing cookies and other data.
- See also the :doc:`/topics/signing` documentation.
- .. setting:: SILENCED_SYSTEM_CHECKS
- ``SILENCED_SYSTEM_CHECKS``
- --------------------------
- Default: ``[]`` (Empty list)
- A list of identifiers of messages generated by the system check framework
- (i.e. ``["models.W001"]``) that you wish to permanently acknowledge and ignore.
- Silenced checks will not be output to the console.
- See also the :doc:`/ref/checks` documentation.
- .. setting:: STORAGES
- ``STORAGES``
- ------------
- Default::
- {
- "default": {
- "BACKEND": "django.core.files.storage.FileSystemStorage",
- },
- "staticfiles": {
- "BACKEND": "django.contrib.staticfiles.storage.StaticFilesStorage",
- },
- }
- A dictionary containing the settings for all storages to be used with Django.
- It is a nested dictionary whose contents map a storage alias to a dictionary
- containing the options for an individual storage.
- Storages can have any alias you choose. However, there are two aliases with
- special significance:
- * ``default`` for :doc:`managing files </topics/files>`.
- ``'``:class:`django.core.files.storage.FileSystemStorage`\ ``'`` is the
- default storage engine.
- * ``staticfiles`` for :doc:`managing static files </ref/contrib/staticfiles>`.
- ``'``:class:`django.contrib.staticfiles.storage.StaticFilesStorage`\ ``'`` is
- the default storage engine.
- The following is an example ``settings.py`` snippet defining a custom file
- storage called ``example``::
- STORAGES = {
- # ...
- "example": {
- "BACKEND": "django.core.files.storage.FileSystemStorage",
- "OPTIONS": {
- "location": "/example",
- "base_url": "/example/",
- },
- },
- }
- ``OPTIONS`` are passed to the ``BACKEND`` on initialization in ``**kwargs``.
- A ready-to-use instance of the storage backends can be retrieved from
- :data:`django.core.files.storage.storages`. Use a key corresponding to the
- backend definition in :setting:`STORAGES`.
- .. admonition:: Is my value merged with the default value?
- Defining this setting overrides the default value and is *not* merged with
- it.
- .. setting:: TEMPLATES
- ``TEMPLATES``
- -------------
- Default: ``[]`` (Empty list)
- A list containing the settings for all template engines to be used with
- Django. Each item of the list is a dictionary containing the options for an
- individual engine.
- Here's a setup that tells the Django template engine to load templates from the
- ``templates`` subdirectory inside each installed application::
- TEMPLATES = [
- {
- "BACKEND": "django.template.backends.django.DjangoTemplates",
- "APP_DIRS": True,
- },
- ]
- The following options are available for all backends.
- .. setting:: TEMPLATES-BACKEND
- ``BACKEND``
- ~~~~~~~~~~~
- Default: Not defined
- The template backend to use. The built-in template backends are:
- * ``'django.template.backends.django.DjangoTemplates'``
- * ``'django.template.backends.jinja2.Jinja2'``
- You can use a template backend that doesn't ship with Django by setting
- ``BACKEND`` to a fully-qualified path (i.e. ``'mypackage.whatever.Backend'``).
- .. setting:: TEMPLATES-NAME
- ``NAME``
- ~~~~~~~~
- Default: see below
- The alias for this particular template engine. It's an identifier that allows
- selecting an engine for rendering. Aliases must be unique across all
- configured template engines.
- It defaults to the name of the module defining the engine class, i.e. the
- next to last piece of :setting:`BACKEND <TEMPLATES-BACKEND>`, when it isn't
- provided. For example if the backend is ``'mypackage.whatever.Backend'`` then
- its default name is ``'whatever'``.
- .. setting:: TEMPLATES-DIRS
- ``DIRS``
- ~~~~~~~~
- Default: ``[]`` (Empty list)
- Directories where the engine should look for template source files, in search
- order.
- .. setting:: TEMPLATES-APP_DIRS
- ``APP_DIRS``
- ~~~~~~~~~~~~
- Default: ``False``
- Whether the engine should look for template source files inside installed
- applications.
- .. note::
- The default :file:`settings.py` file created by :djadmin:`django-admin
- startproject <startproject>` sets ``'APP_DIRS': True``.
- .. setting:: TEMPLATES-OPTIONS
- ``OPTIONS``
- ~~~~~~~~~~~
- Default: ``{}`` (Empty dict)
- Extra parameters to pass to the template backend. Available parameters vary
- depending on the template backend. See
- :class:`~django.template.backends.django.DjangoTemplates` and
- :class:`~django.template.backends.jinja2.Jinja2` for the options of the
- built-in backends.
- .. setting:: TEST_RUNNER
- ``TEST_RUNNER``
- ---------------
- Default: ``'django.test.runner.DiscoverRunner'``
- The name of the class to use for starting the test suite. See
- :ref:`other-testing-frameworks`.
- .. setting:: TEST_NON_SERIALIZED_APPS
- ``TEST_NON_SERIALIZED_APPS``
- ----------------------------
- Default: ``[]`` (Empty list)
- In order to restore the database state between tests for
- ``TransactionTestCase``\s and database backends without transactions, Django
- will :ref:`serialize the contents of all apps <test-case-serialized-rollback>`
- when it starts the test run so it can then reload from that copy before running
- tests that need it.
- This slows down the startup time of the test runner; if you have apps that
- you know don't need this feature, you can add their full names in here (e.g.
- ``'django.contrib.contenttypes'``) to exclude them from this serialization
- process.
- .. setting:: THOUSAND_SEPARATOR
- ``THOUSAND_SEPARATOR``
- ----------------------
- Default: ``','`` (Comma)
- Default thousand separator used when formatting numbers. This setting is
- used only when :setting:`USE_THOUSAND_SEPARATOR` is ``True`` and
- :setting:`NUMBER_GROUPING` is greater than ``0``.
- Note that the locale-dictated format has higher precedence and will be applied
- instead.
- See also :setting:`NUMBER_GROUPING`, :setting:`DECIMAL_SEPARATOR` and
- :setting:`USE_THOUSAND_SEPARATOR`.
- .. setting:: TIME_FORMAT
- ``TIME_FORMAT``
- ---------------
- Default: ``'P'`` (e.g. ``4 p.m.``)
- The default formatting to use for displaying time fields in any part of the
- system. Note that the locale-dictated format has higher precedence and will be
- applied instead. See :tfilter:`allowed date format strings <date>`.
- See also :setting:`DATE_FORMAT` and :setting:`DATETIME_FORMAT`.
- .. setting:: TIME_INPUT_FORMATS
- ``TIME_INPUT_FORMATS``
- ----------------------
- Default::
- [
- "%H:%M:%S", # '14:30:59'
- "%H:%M:%S.%f", # '14:30:59.000200'
- "%H:%M", # '14:30'
- ]
- A list of formats that will be accepted when inputting data on a time field.
- Formats will be tried in order, using the first valid one. Note that these
- format strings use Python's :ref:`datetime module syntax
- <strftime-strptime-behavior>`, not the format strings from the :tfilter:`date`
- template filter.
- The locale-dictated format has higher precedence and will be applied instead.
- See also :setting:`DATE_INPUT_FORMATS` and :setting:`DATETIME_INPUT_FORMATS`.
- .. setting:: TIME_ZONE
- ``TIME_ZONE``
- -------------
- Default: ``'America/Chicago'``
- A string representing the time zone for this installation. See the `list of
- time zones`_.
- .. note::
- Since Django was first released with the :setting:`TIME_ZONE` set to
- ``'America/Chicago'``, the global setting (used if nothing is defined in
- your project's ``settings.py``) remains ``'America/Chicago'`` for backwards
- compatibility. New project templates default to ``'UTC'``.
- Note that this isn't necessarily the time zone of the server. For example, one
- server may serve multiple Django-powered sites, each with a separate time zone
- setting.
- When :setting:`USE_TZ` is ``False``, this is the time zone in which Django
- will store all datetimes. When :setting:`USE_TZ` is ``True``, this is the
- default time zone that Django will use to display datetimes in templates and
- to interpret datetimes entered in forms.
- On Unix environments (where :func:`time.tzset` is implemented), Django sets the
- ``os.environ['TZ']`` variable to the time zone you specify in the
- :setting:`TIME_ZONE` setting. Thus, all your views and models will
- automatically operate in this time zone. However, Django won't set the ``TZ``
- environment variable if you're using the manual configuration option as
- described in :ref:`manually configuring settings
- <settings-without-django-settings-module>`. If Django doesn't set the ``TZ``
- environment variable, it's up to you to ensure your processes are running in
- the correct environment.
- .. note::
- Django cannot reliably use alternate time zones in a Windows environment.
- If you're running Django on Windows, :setting:`TIME_ZONE` must be set to
- match the system time zone.
- .. _list of time zones: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
- .. setting:: USE_I18N
- ``USE_I18N``
- ------------
- Default: ``True``
- A boolean that specifies whether Django's translation system should be enabled.
- This provides a way to turn it off, for performance. If this is set to
- ``False``, Django will make some optimizations so as not to load the
- translation machinery.
- See also :setting:`LANGUAGE_CODE` and :setting:`USE_TZ`.
- .. note::
- The default :file:`settings.py` file created by :djadmin:`django-admin
- startproject <startproject>` includes ``USE_I18N = True`` for convenience.
- .. setting:: USE_THOUSAND_SEPARATOR
- ``USE_THOUSAND_SEPARATOR``
- --------------------------
- Default: ``False``
- A boolean that specifies whether to display numbers using a thousand separator.
- When set to ``True``, Django will format numbers using the
- :setting:`NUMBER_GROUPING` and :setting:`THOUSAND_SEPARATOR` settings. The
- latter two settings may also be dictated by the locale, which takes precedence.
- See also :setting:`DECIMAL_SEPARATOR`, :setting:`NUMBER_GROUPING` and
- :setting:`THOUSAND_SEPARATOR`.
- .. setting:: USE_TZ
- ``USE_TZ``
- ----------
- Default: ``True``
- A boolean that specifies if datetimes will be timezone-aware by default or not.
- If this is set to ``True``, Django will use timezone-aware datetimes internally.
- When ``USE_TZ`` is False, Django will use naive datetimes in local time, except
- when parsing ISO 8601 formatted strings, where timezone information will always
- be retained if present.
- See also :setting:`TIME_ZONE` and :setting:`USE_I18N`.
- .. setting:: USE_X_FORWARDED_HOST
- ``USE_X_FORWARDED_HOST``
- ------------------------
- Default: ``False``
- A boolean that specifies whether to use the ``X-Forwarded-Host`` header in
- preference to the ``Host`` header. This should only be enabled if a proxy
- which sets this header is in use.
- This setting takes priority over :setting:`USE_X_FORWARDED_PORT`. Per
- :rfc:`7239#section-5.3`, the ``X-Forwarded-Host`` header can include the port
- number, in which case you shouldn't use :setting:`USE_X_FORWARDED_PORT`.
- .. setting:: USE_X_FORWARDED_PORT
- ``USE_X_FORWARDED_PORT``
- ------------------------
- Default: ``False``
- A boolean that specifies whether to use the ``X-Forwarded-Port`` header in
- preference to the ``SERVER_PORT`` ``META`` variable. This should only be
- enabled if a proxy which sets this header is in use.
- :setting:`USE_X_FORWARDED_HOST` takes priority over this setting.
- .. setting:: URLIZE_ASSUME_HTTPS
- ``URLIZE_ASSUME_HTTPS``
- -----------------------
- .. versionadded:: 6.0
- .. deprecated:: 6.0
- Default: ``False``
- Set this transitional setting to ``True`` to opt into using HTTPS as the
- default protocol when none is provided in URLs processed by the
- :tfilter:`urlize` and :tfilter:`urlizetrunc` template filters during the Django
- 6.x release cycle.
- .. setting:: WSGI_APPLICATION
- ``WSGI_APPLICATION``
- --------------------
- Default: ``None``
- The full Python path of the WSGI application object that Django's built-in
- servers (e.g. :djadmin:`runserver`) will use. The :djadmin:`django-admin
- startproject <startproject>` management command will create a standard
- ``wsgi.py`` file with an ``application`` callable in it, and point this setting
- to that ``application``.
- If not set, the return value of ``django.core.wsgi.get_wsgi_application()``
- will be used. In this case, the behavior of :djadmin:`runserver` will be
- identical to previous Django versions.
- .. setting:: YEAR_MONTH_FORMAT
- ``YEAR_MONTH_FORMAT``
- ---------------------
- Default: ``'F Y'``
- The default formatting to use for date fields on Django admin change-list
- pages -- and, possibly, by other parts of the system -- in cases when only the
- year and month are displayed.
- For example, when a Django admin change-list page is being filtered by a date
- drilldown, the header for a given month displays the month and the year.
- Different locales have different formats. For example, U.S. English would say
- "January 2006," whereas another locale might say "2006/January."
- Note that the corresponding locale-dictated format has higher precedence and
- will be applied instead.
- See :tfilter:`allowed date format strings <date>`. See also
- :setting:`DATE_FORMAT`, :setting:`DATETIME_FORMAT`, :setting:`TIME_FORMAT`
- and :setting:`MONTH_DAY_FORMAT`.
- .. setting:: X_FRAME_OPTIONS
- ``X_FRAME_OPTIONS``
- -------------------
- Default: ``'DENY'``
- The default value for the X-Frame-Options header used by
- :class:`~django.middleware.clickjacking.XFrameOptionsMiddleware`. See the
- :doc:`clickjacking protection </ref/clickjacking/>` documentation.
- Auth
- ====
- Settings for :mod:`django.contrib.auth`.
- .. setting:: AUTHENTICATION_BACKENDS
- ``AUTHENTICATION_BACKENDS``
- ---------------------------
- Default: ``['django.contrib.auth.backends.ModelBackend']``
- A list of authentication backend classes (as strings) to use when attempting to
- authenticate a user. See the :ref:`authentication backends documentation
- <authentication-backends>` for details.
- .. setting:: AUTH_USER_MODEL
- ``AUTH_USER_MODEL``
- -------------------
- Default: ``'auth.User'``
- The model to use to represent a User. See :ref:`auth-custom-user`.
- .. warning::
- You cannot change the AUTH_USER_MODEL setting during the lifetime of
- a project (i.e. once you have made and migrated models that depend on it)
- without serious effort. It is intended to be set at the project start,
- and the model it refers to must be available in the first migration of
- the app that it lives in.
- See :ref:`auth-custom-user` for more details.
- .. setting:: LOGIN_REDIRECT_URL
- ``LOGIN_REDIRECT_URL``
- ----------------------
- Default: ``'/accounts/profile/'``
- The URL or :ref:`named URL pattern <naming-url-patterns>` where requests are
- redirected after login when the :class:`~django.contrib.auth.views.LoginView`
- doesn't get a ``next`` GET parameter.
- .. setting:: LOGIN_URL
- ``LOGIN_URL``
- -------------
- Default: ``'/accounts/login/'``
- The URL or :ref:`named URL pattern <naming-url-patterns>` where requests are
- redirected for login when using the
- :func:`~django.contrib.auth.decorators.login_required` decorator,
- :class:`~django.contrib.auth.mixins.LoginRequiredMixin`,
- :class:`~django.contrib.auth.mixins.AccessMixin`, or when
- :class:`~django.contrib.auth.middleware.LoginRequiredMiddleware` is installed.
- .. setting:: LOGOUT_REDIRECT_URL
- ``LOGOUT_REDIRECT_URL``
- -----------------------
- Default: ``None``
- The URL or :ref:`named URL pattern <naming-url-patterns>` where requests are
- redirected after logout if :class:`~django.contrib.auth.views.LogoutView`
- doesn't have a ``next_page`` attribute.
- If ``None``, no redirect will be performed and the logout view will be
- rendered.
- .. setting:: PASSWORD_RESET_TIMEOUT
- ``PASSWORD_RESET_TIMEOUT``
- --------------------------
- Default: ``259200`` (3 days, in seconds)
- The number of seconds a password reset link is valid for.
- Used by the :class:`~django.contrib.auth.views.PasswordResetConfirmView`.
- .. note::
- Reducing the value of this timeout doesn't make any difference to the
- ability of an attacker to brute-force a password reset token. Tokens are
- designed to be safe from brute-forcing without any timeout.
- This timeout exists to protect against some unlikely attack scenarios, such
- as someone gaining access to email archives that may contain old, unused
- password reset tokens.
- .. setting:: PASSWORD_HASHERS
- ``PASSWORD_HASHERS``
- --------------------
- See :ref:`auth_password_storage`.
- Default::
- [
- "django.contrib.auth.hashers.PBKDF2PasswordHasher",
- "django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher",
- "django.contrib.auth.hashers.Argon2PasswordHasher",
- "django.contrib.auth.hashers.BCryptSHA256PasswordHasher",
- "django.contrib.auth.hashers.ScryptPasswordHasher",
- ]
- .. setting:: AUTH_PASSWORD_VALIDATORS
- ``AUTH_PASSWORD_VALIDATORS``
- ----------------------------
- Default: ``[]`` (Empty list)
- The list of validators that are used to check the strength of user's passwords.
- See :ref:`password-validation` for more details. By default, no validation is
- performed and all passwords are accepted.
- .. _settings-messages:
- Messages
- ========
- Settings for :mod:`django.contrib.messages`.
- .. setting:: MESSAGE_LEVEL
- ``MESSAGE_LEVEL``
- -----------------
- Default: ``messages.INFO``
- Sets the minimum message level that will be recorded by the messages
- framework. See :ref:`message levels <message-level>` for more details.
- .. admonition:: Avoiding circular imports
- If you override ``MESSAGE_LEVEL`` in your settings file and rely on any of
- the built-in constants, you must import the constants module directly to
- avoid the potential for circular imports, e.g.::
- from django.contrib.messages import constants as message_constants
- MESSAGE_LEVEL = message_constants.DEBUG
- If desired, you may specify the numeric values for the constants directly
- according to the values in the above :ref:`constants table
- <message-level-constants>`.
- .. setting:: MESSAGE_STORAGE
- ``MESSAGE_STORAGE``
- -------------------
- Default: ``'django.contrib.messages.storage.fallback.FallbackStorage'``
- Controls where Django stores message data. Valid values are:
- * ``'django.contrib.messages.storage.fallback.FallbackStorage'``
- * ``'django.contrib.messages.storage.session.SessionStorage'``
- * ``'django.contrib.messages.storage.cookie.CookieStorage'``
- See :ref:`message storage backends <message-storage-backends>` for more details.
- The backends that use cookies --
- :class:`~django.contrib.messages.storage.cookie.CookieStorage` and
- :class:`~django.contrib.messages.storage.fallback.FallbackStorage` --
- use the value of :setting:`SESSION_COOKIE_DOMAIN`, :setting:`SESSION_COOKIE_SECURE`
- and :setting:`SESSION_COOKIE_HTTPONLY` when setting their cookies.
- .. setting:: MESSAGE_TAGS
- ``MESSAGE_TAGS``
- ----------------
- Default::
- {
- messages.DEBUG: "debug",
- messages.INFO: "info",
- messages.SUCCESS: "success",
- messages.WARNING: "warning",
- messages.ERROR: "error",
- }
- This sets the mapping of message level to message tag, which is typically
- rendered as a CSS class in HTML. If you specify a value, it will extend
- the default. This means you only have to specify those values which you need
- to override. See :ref:`message-displaying` above for more details.
- .. admonition:: Avoiding circular imports
- If you override ``MESSAGE_TAGS`` in your settings file and rely on any of
- the built-in constants, you must import the ``constants`` module directly to
- avoid the potential for circular imports, e.g.::
- from django.contrib.messages import constants as message_constants
- MESSAGE_TAGS = {message_constants.INFO: ""}
- If desired, you may specify the numeric values for the constants directly
- according to the values in the above :ref:`constants table
- <message-level-constants>`.
- .. _settings-sessions:
- Sessions
- ========
- Settings for :mod:`django.contrib.sessions`.
- .. setting:: SESSION_CACHE_ALIAS
- ``SESSION_CACHE_ALIAS``
- -----------------------
- Default: ``'default'``
- If you're using :ref:`cache-based session storage <cached-sessions-backend>`,
- this selects the cache to use.
- .. setting:: SESSION_COOKIE_AGE
- ``SESSION_COOKIE_AGE``
- ----------------------
- Default: ``1209600`` (2 weeks, in seconds)
- The age of session cookies, in seconds.
- .. setting:: SESSION_COOKIE_DOMAIN
- ``SESSION_COOKIE_DOMAIN``
- -------------------------
- Default: ``None``
- The domain to use for session cookies. Set this to a string such as
- ``"example.com"`` for cross-domain cookies, or use ``None`` for a standard
- domain cookie.
- To use cross-domain cookies with :setting:`CSRF_USE_SESSIONS`, you must include
- a leading dot (e.g. ``".example.com"``) to accommodate the CSRF middleware's
- referer checking.
- Be cautious when updating this setting on a production site. If you update
- this setting to enable cross-domain cookies on a site that previously used
- standard domain cookies, existing user cookies will be set to the old
- domain. This may result in them being unable to log in as long as these cookies
- persist.
- This setting also affects cookies set by :mod:`django.contrib.messages`.
- .. setting:: SESSION_COOKIE_HTTPONLY
- ``SESSION_COOKIE_HTTPONLY``
- ---------------------------
- Default: ``True``
- Whether to use ``HttpOnly`` flag on the session cookie. If this is set to
- ``True``, client-side JavaScript will not be able to access the session
- cookie.
- HttpOnly_ is a flag included in a Set-Cookie HTTP response header. It's part of
- the :rfc:`6265#section-4.1.2.6` standard for cookies and can be a useful way to
- mitigate the risk of a client-side script accessing the protected cookie data.
- This makes it less trivial for an attacker to escalate a cross-site scripting
- vulnerability into full hijacking of a user's session. There aren't many good
- reasons for turning this off. Your code shouldn't read session cookies from
- JavaScript.
- .. _HttpOnly: https://owasp.org/www-community/HttpOnly
- .. setting:: SESSION_COOKIE_NAME
- ``SESSION_COOKIE_NAME``
- -----------------------
- Default: ``'sessionid'``
- The name of the cookie to use for sessions. This can be whatever you want
- (as long as it's different from the other cookie names in your application).
- .. setting:: SESSION_COOKIE_PATH
- ``SESSION_COOKIE_PATH``
- -----------------------
- Default: ``'/'``
- The path set on the session cookie. This should either match the URL path of your
- Django installation or be parent of that path.
- This is useful if you have multiple Django instances running under the same
- hostname. They can use different cookie paths, and each instance will only see
- its own session cookie.
- .. setting:: SESSION_COOKIE_SAMESITE
- ``SESSION_COOKIE_SAMESITE``
- ---------------------------
- Default: ``'Lax'``
- The value of the `SameSite`_ flag on the session cookie. This flag prevents the
- cookie from being sent in cross-site requests thus preventing CSRF attacks and
- making some methods of stealing session cookie impossible.
- Possible values for the setting are:
- * ``'Strict'``: prevents the cookie from being sent by the browser to the
- target site in all cross-site browsing context, even when following a regular
- link.
- For example, for a GitHub-like website this would mean that if a logged-in
- user follows a link to a private GitHub project posted on a corporate
- discussion forum or email, GitHub will not receive the session cookie and the
- user won't be able to access the project. A bank website, however, most
- likely doesn't want to allow any transactional pages to be linked from
- external sites so the ``'Strict'`` flag would be appropriate.
- * ``'Lax'`` (default): provides a balance between security and usability for
- websites that want to maintain user's logged-in session after the user
- arrives from an external link.
- In the GitHub scenario, the session cookie would be allowed when following a
- regular link from an external website and be blocked in CSRF-prone request
- methods (e.g. ``POST``).
- * ``'None'`` (string): the session cookie will be sent with all same-site and
- cross-site requests.
- * ``False``: disables the flag.
- .. note::
- Modern browsers provide a more secure default policy for the ``SameSite``
- flag and will assume ``Lax`` for cookies without an explicit value set.
- .. _SameSite: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#samesitesamesite-value
- .. setting:: SESSION_COOKIE_SECURE
- ``SESSION_COOKIE_SECURE``
- -------------------------
- Default: ``False``
- Whether to use a secure cookie for the session cookie. If this is set to
- ``True``, the cookie will be marked as "secure", which means browsers may
- ensure that the cookie is only sent under an HTTPS connection.
- Leaving this setting off isn't a good idea because an attacker could capture an
- unencrypted session cookie with a packet sniffer and use the cookie to hijack
- the user's session.
- .. setting:: SESSION_ENGINE
- ``SESSION_ENGINE``
- ------------------
- Default: ``'django.contrib.sessions.backends.db'``
- Controls where Django stores session data. Included engines are:
- * ``'django.contrib.sessions.backends.db'``
- * ``'django.contrib.sessions.backends.file'``
- * ``'django.contrib.sessions.backends.cache'``
- * ``'django.contrib.sessions.backends.cached_db'``
- * ``'django.contrib.sessions.backends.signed_cookies'``
- See :ref:`configuring-sessions` for more details.
- .. setting:: SESSION_EXPIRE_AT_BROWSER_CLOSE
- ``SESSION_EXPIRE_AT_BROWSER_CLOSE``
- -----------------------------------
- Default: ``False``
- Whether to expire the session when the user closes their browser. See
- :ref:`browser-length-vs-persistent-sessions`.
- .. setting:: SESSION_FILE_PATH
- ``SESSION_FILE_PATH``
- ---------------------
- Default: ``None``
- If you're using file-based session storage, this sets the directory in
- which Django will store session data. When the default value (``None``) is
- used, Django will use the standard temporary directory for the system.
- .. setting:: SESSION_SAVE_EVERY_REQUEST
- ``SESSION_SAVE_EVERY_REQUEST``
- ------------------------------
- Default: ``False``
- Whether to save the session data on every request. If this is ``False``
- (default), then the session data will only be saved if it has been modified --
- that is, if any of its dictionary values have been assigned or deleted. Empty
- sessions won't be created, even if this setting is active.
- .. setting:: SESSION_SERIALIZER
- ``SESSION_SERIALIZER``
- ----------------------
- Default: ``'django.contrib.sessions.serializers.JSONSerializer'``
- Full import path of a serializer class to use for serializing session data.
- Included serializer is:
- * ``'django.contrib.sessions.serializers.JSONSerializer'``
- See :ref:`session_serialization` for details.
- Sites
- =====
- Settings for :mod:`django.contrib.sites`.
- .. setting:: SITE_ID
- ``SITE_ID``
- -----------
- Default: Not defined
- The ID, as an integer, of the current site in the ``django_site`` database
- table. This is used so that application data can hook into specific sites
- and a single database can manage content for multiple sites.
- .. _settings-staticfiles:
- Static Files
- ============
- Settings for :mod:`django.contrib.staticfiles`.
- .. setting:: STATIC_ROOT
- ``STATIC_ROOT``
- ---------------
- Default: ``None``
- The absolute path to the directory where :djadmin:`collectstatic` will collect
- static files for deployment.
- Example: ``"/var/www/example.com/static/"``
- If the :doc:`staticfiles</ref/contrib/staticfiles>` contrib app is enabled
- (as in the default project template), the :djadmin:`collectstatic` management
- command will collect static files into this directory. See the how-to on
- :doc:`managing static files</howto/static-files/index>` for more details about
- usage.
- .. warning::
- This should be an initially empty destination directory for collecting
- your static files from their permanent locations into one directory for
- ease of deployment; it is **not** a place to store your static files
- permanently. You should do that in directories that will be found by
- :doc:`staticfiles</ref/contrib/staticfiles>`’s
- :setting:`finders<STATICFILES_FINDERS>`, which by default, are
- ``'static/'`` app sub-directories and any directories you include in
- :setting:`STATICFILES_DIRS`).
- .. setting:: STATIC_URL
- ``STATIC_URL``
- --------------
- Default: ``None``
- URL to use when referring to static files located in :setting:`STATIC_ROOT`.
- Example: ``"static/"`` or ``"https://static.example.com/"``
- If not ``None``, this will be used as the base path for
- :ref:`asset definitions<form-asset-paths>` (the ``Media`` class) and the
- :doc:`staticfiles app</ref/contrib/staticfiles>`.
- It must end in a slash if set to a non-empty value.
- You may need to :ref:`configure these files to be served in development
- <serving-static-files-in-development>` and will definitely need to do so
- :doc:`in production </howto/static-files/deployment>`.
- .. note::
- If :setting:`STATIC_URL` is a relative path, then it will be prefixed by
- the server-provided value of ``SCRIPT_NAME`` (or ``/`` if not set). This
- makes it easier to serve a Django application in a subpath without adding
- an extra configuration to the settings.
- .. setting:: STATICFILES_DIRS
- ``STATICFILES_DIRS``
- --------------------
- Default: ``[]`` (Empty list)
- This setting defines the additional locations the staticfiles app will traverse
- if the ``FileSystemFinder`` finder is enabled, e.g. if you use the
- :djadmin:`collectstatic` or :djadmin:`findstatic` management command or use the
- static file serving view.
- This should be set to a list of strings that contain full paths to
- your additional files directory(ies) e.g.::
- STATICFILES_DIRS = [
- "/home/special.polls.com/polls/static",
- "/home/polls.com/polls/static",
- "/opt/webfiles/common",
- ]
- Note that these paths should use Unix-style forward slashes, even on Windows
- (e.g. ``"C:/Users/user/mysite/extra_static_content"``).
- .. _staticfiles-dirs-prefixes:
- Prefixes (optional)
- ~~~~~~~~~~~~~~~~~~~
- In case you want to refer to files in one of the locations with an additional
- namespace, you can **optionally** provide a prefix as ``(prefix, path)``
- tuples, e.g.::
- STATICFILES_DIRS = [
- # ...
- ("downloads", "/opt/webfiles/stats"),
- ]
- For example, assuming you have :setting:`STATIC_URL` set to ``'static/'``, the
- :djadmin:`collectstatic` management command would collect the "stats" files
- in a ``'downloads'`` subdirectory of :setting:`STATIC_ROOT`.
- This would allow you to refer to the local file
- ``'/opt/webfiles/stats/polls_20101022.tar.gz'`` with
- ``'/static/downloads/polls_20101022.tar.gz'`` in your templates, e.g.:
- .. code-block:: html+django
- <a href="{% static 'downloads/polls_20101022.tar.gz' %}">
- .. setting:: STATICFILES_FINDERS
- ``STATICFILES_FINDERS``
- -----------------------
- Default::
- [
- "django.contrib.staticfiles.finders.FileSystemFinder",
- "django.contrib.staticfiles.finders.AppDirectoriesFinder",
- ]
- The list of finder backends that know how to find static files in
- various locations.
- The default will find files stored in the :setting:`STATICFILES_DIRS` setting
- (using ``django.contrib.staticfiles.finders.FileSystemFinder``) and in a
- ``static`` subdirectory of each app (using
- ``django.contrib.staticfiles.finders.AppDirectoriesFinder``). If multiple
- files with the same name are present, the first file that is found will be
- used.
- One finder is disabled by default:
- ``django.contrib.staticfiles.finders.DefaultStorageFinder``. If added to
- your :setting:`STATICFILES_FINDERS` setting, it will look for static files in
- the default file storage as defined by the ``default`` key in the
- :setting:`STORAGES` setting.
- .. note::
- When using the ``AppDirectoriesFinder`` finder, make sure your apps
- can be found by staticfiles by adding the app to the
- :setting:`INSTALLED_APPS` setting of your site.
- Static file finders are currently considered a private interface, and this
- interface is thus undocumented.
- Core Settings Topical Index
- ===========================
- Cache
- -----
- * :setting:`CACHES`
- * :setting:`CACHE_MIDDLEWARE_ALIAS`
- * :setting:`CACHE_MIDDLEWARE_KEY_PREFIX`
- * :setting:`CACHE_MIDDLEWARE_SECONDS`
- Database
- --------
- * :setting:`DATABASES`
- * :setting:`DATABASE_ROUTERS`
- * :setting:`DEFAULT_INDEX_TABLESPACE`
- * :setting:`DEFAULT_TABLESPACE`
- Debugging
- ---------
- * :setting:`DEBUG`
- * :setting:`DEBUG_PROPAGATE_EXCEPTIONS`
- Email
- -----
- * :setting:`ADMINS`
- * :setting:`DEFAULT_CHARSET`
- * :setting:`DEFAULT_FROM_EMAIL`
- * :setting:`EMAIL_BACKEND`
- * :setting:`EMAIL_FILE_PATH`
- * :setting:`EMAIL_HOST`
- * :setting:`EMAIL_HOST_PASSWORD`
- * :setting:`EMAIL_HOST_USER`
- * :setting:`EMAIL_PORT`
- * :setting:`EMAIL_SSL_CERTFILE`
- * :setting:`EMAIL_SSL_KEYFILE`
- * :setting:`EMAIL_SUBJECT_PREFIX`
- * :setting:`EMAIL_TIMEOUT`
- * :setting:`EMAIL_USE_LOCALTIME`
- * :setting:`EMAIL_USE_SSL`
- * :setting:`EMAIL_USE_TLS`
- * :setting:`MANAGERS`
- * :setting:`SERVER_EMAIL`
- Error reporting
- ---------------
- * :setting:`DEFAULT_EXCEPTION_REPORTER`
- * :setting:`DEFAULT_EXCEPTION_REPORTER_FILTER`
- * :setting:`IGNORABLE_404_URLS`
- * :setting:`MANAGERS`
- * :setting:`SILENCED_SYSTEM_CHECKS`
- .. _file-upload-settings:
- File uploads
- ------------
- * :setting:`FILE_UPLOAD_HANDLERS`
- * :setting:`FILE_UPLOAD_MAX_MEMORY_SIZE`
- * :setting:`FILE_UPLOAD_PERMISSIONS`
- * :setting:`FILE_UPLOAD_TEMP_DIR`
- * :setting:`MEDIA_ROOT`
- * :setting:`MEDIA_URL`
- * :setting:`STORAGES`
- Forms
- -----
- * :setting:`FORM_RENDERER`
- Globalization (``i18n``/``l10n``)
- ---------------------------------
- .. _settings-i18n:
- Internationalization (``i18n``)
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- * :setting:`FIRST_DAY_OF_WEEK`
- * :setting:`FORMAT_MODULE_PATH`
- * :setting:`LANGUAGE_COOKIE_AGE`
- * :setting:`LANGUAGE_COOKIE_DOMAIN`
- * :setting:`LANGUAGE_COOKIE_HTTPONLY`
- * :setting:`LANGUAGE_COOKIE_NAME`
- * :setting:`LANGUAGE_COOKIE_PATH`
- * :setting:`LANGUAGE_COOKIE_SAMESITE`
- * :setting:`LANGUAGE_COOKIE_SECURE`
- * :setting:`LANGUAGES`
- * :setting:`LANGUAGES_BIDI`
- * :setting:`LOCALE_PATHS`
- * :setting:`TIME_ZONE`
- * :setting:`USE_I18N`
- * :setting:`USE_TZ`
- .. _settings-l10n:
- Localization (``l10n``)
- ~~~~~~~~~~~~~~~~~~~~~~~
- * :setting:`DATE_FORMAT`
- * :setting:`DATE_INPUT_FORMATS`
- * :setting:`DATETIME_FORMAT`
- * :setting:`DATETIME_INPUT_FORMATS`
- * :setting:`DECIMAL_SEPARATOR`
- * :setting:`LANGUAGE_CODE`
- * :setting:`MONTH_DAY_FORMAT`
- * :setting:`NUMBER_GROUPING`
- * :setting:`SHORT_DATE_FORMAT`
- * :setting:`SHORT_DATETIME_FORMAT`
- * :setting:`THOUSAND_SEPARATOR`
- * :setting:`TIME_FORMAT`
- * :setting:`TIME_INPUT_FORMATS`
- * :setting:`USE_THOUSAND_SEPARATOR`
- * :setting:`YEAR_MONTH_FORMAT`
- HTTP
- ----
- * :setting:`DATA_UPLOAD_MAX_MEMORY_SIZE`
- * :setting:`DATA_UPLOAD_MAX_NUMBER_FIELDS`
- * :setting:`DATA_UPLOAD_MAX_NUMBER_FILES`
- * :setting:`DEFAULT_CHARSET`
- * :setting:`DISALLOWED_USER_AGENTS`
- * :setting:`FORCE_SCRIPT_NAME`
- * :setting:`INTERNAL_IPS`
- * :setting:`MIDDLEWARE`
- * Security
- * :setting:`SECURE_CONTENT_TYPE_NOSNIFF`
- * :setting:`SECURE_CROSS_ORIGIN_OPENER_POLICY`
- * :setting:`SECURE_HSTS_INCLUDE_SUBDOMAINS`
- * :setting:`SECURE_HSTS_PRELOAD`
- * :setting:`SECURE_HSTS_SECONDS`
- * :setting:`SECURE_PROXY_SSL_HEADER`
- * :setting:`SECURE_REDIRECT_EXEMPT`
- * :setting:`SECURE_REFERRER_POLICY`
- * :setting:`SECURE_SSL_HOST`
- * :setting:`SECURE_SSL_REDIRECT`
- * :setting:`SIGNING_BACKEND`
- * :setting:`USE_X_FORWARDED_HOST`
- * :setting:`USE_X_FORWARDED_PORT`
- * :setting:`WSGI_APPLICATION`
- Logging
- -------
- * :setting:`LOGGING`
- * :setting:`LOGGING_CONFIG`
- Models
- ------
- * :setting:`ABSOLUTE_URL_OVERRIDES`
- * :setting:`FIXTURE_DIRS`
- * :setting:`INSTALLED_APPS`
- Security
- --------
- * Cross Site Request Forgery Protection
- * :setting:`CSRF_COOKIE_DOMAIN`
- * :setting:`CSRF_COOKIE_NAME`
- * :setting:`CSRF_COOKIE_PATH`
- * :setting:`CSRF_COOKIE_SAMESITE`
- * :setting:`CSRF_COOKIE_SECURE`
- * :setting:`CSRF_FAILURE_VIEW`
- * :setting:`CSRF_HEADER_NAME`
- * :setting:`CSRF_TRUSTED_ORIGINS`
- * :setting:`CSRF_USE_SESSIONS`
- * :setting:`SECRET_KEY`
- * :setting:`SECRET_KEY_FALLBACKS`
- * :setting:`URLIZE_ASSUME_HTTPS`
- * :setting:`X_FRAME_OPTIONS`
- Serialization
- -------------
- * :setting:`DEFAULT_CHARSET`
- * :setting:`SERIALIZATION_MODULES`
- Templates
- ---------
- * :setting:`TEMPLATES`
- Testing
- -------
- * Database: :setting:`TEST <DATABASE-TEST>`
- * :setting:`TEST_NON_SERIALIZED_APPS`
- * :setting:`TEST_RUNNER`
- URLs
- ----
- * :setting:`APPEND_SLASH`
- * :setting:`PREPEND_WWW`
- * :setting:`ROOT_URLCONF`
|