123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789 |
- ========
- 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``, you can
- optionally specify the path to a PEM-formatted certificate chain file to use
- for the SSL connection.
- .. 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 to use for the
- SSL connection.
- 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:: FORMS_URLFIELD_ASSUME_HTTPS
- ``FORMS_URLFIELD_ASSUME_HTTPS``
- -------------------------------
- .. deprecated:: 5.0
- Default: ``False``
- Set this transitional setting to ``True`` to opt into using ``"https"`` as the
- new default value of :attr:`URLField.assume_scheme
- <django.forms.URLField.assume_scheme>` during the Django 5.x release cycle.
- .. 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:: 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`
- * :setting:`FORMS_URLFIELD_ASSUME_HTTPS`
- 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:`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`
|