mirror of
https://github.com/django/django.git
synced 2025-08-31 15:57:45 +00:00
Fixed #1321 -- Made DJANGO_SETTINGS_MODULE optional. You can now call django.conf.settings.configure() to set settings manually if you don't have a settings module. Thanks, Malcolm Tredinnick, Luke Plant, Fredrik Lundh
git-svn-id: http://code.djangoproject.com/svn/django/trunk@2927 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
parent
27612d8b7d
commit
c643e12faf
8 changed files with 213 additions and 20 deletions
|
@ -540,6 +540,17 @@ you can override base translations in your project path. Or, you can just build
|
|||
a big project out of several apps and put all translations into one big project
|
||||
message file. The choice is yours.
|
||||
|
||||
.. note::
|
||||
|
||||
If you're using manually configured settings, as described in the
|
||||
`settings documentation`_, the ``locale`` directory in the project
|
||||
directory will not be examined, since Django loses the ability to work out
|
||||
the location of the project directory. (Django normally uses the location
|
||||
of the settings file to determine this, and a settings file doesn't exist
|
||||
if you're manually configuring your settings.)
|
||||
|
||||
.. _settings documentation: http://www.djangoproject.com/documentation/settings/#using-settings-without-the-django-settings-module-environment-variable
|
||||
|
||||
All message file repositories are structured the same way. They are:
|
||||
|
||||
* ``$APPPATH/locale/<language>/LC_MESSAGES/django.(po|mo)``
|
||||
|
|
|
@ -724,3 +724,70 @@ Django apps. Just follow these conventions:
|
|||
* For settings that are sequences, use tuples instead of lists. This is
|
||||
purely for performance.
|
||||
* Don't reinvent an already-existing setting.
|
||||
|
||||
Using settings without setting DJANGO_SETTINGS_MODULE
|
||||
=====================================================
|
||||
|
||||
In some cases, you might want to bypass the ``DJANGO_SETTINGS_MODULE``
|
||||
environment variable. For example, if you're using the template system by
|
||||
itself, you likely don't want to have to set up an environment variable
|
||||
pointing to a settings module.
|
||||
|
||||
In these cases, you can configure Django's settings manually. Do this by
|
||||
calling ``django.conf.settings.configure()``.
|
||||
|
||||
Example::
|
||||
|
||||
from django.conf import settings
|
||||
|
||||
settings.configure(DEBUG=True, TEMPLATE_DEBUG=True,
|
||||
TEMPLATE_DIRS=('/home/web-apps/myapp', '/home/web-apps/base'))
|
||||
|
||||
Pass ``configure()`` as many keyword arguments as you'd like, with each keyword
|
||||
argument representing a setting and its value. Each argument name should be all
|
||||
uppercase, with the same name as the settings described above. If a particular
|
||||
setting is not passed to ``configure()`` and is needed at some later point,
|
||||
Django will use the default setting value.
|
||||
|
||||
Custom default settings
|
||||
-----------------------
|
||||
|
||||
If you'd like default values to come from somewhere other than
|
||||
``django.conf.global_settings``, you can pass in a module or class that
|
||||
provides the default settings as the ``default_settings`` argument (or as the
|
||||
first positional argument) in the call to ``configure()``.
|
||||
|
||||
In this example, default settings are taken from ``myapp_defaults``, and the
|
||||
``DEBUG`` setting is set to ``True``, regardless of its value in
|
||||
``myapp_defaults``::
|
||||
|
||||
from django.conf import settings
|
||||
from myapp import myapp_defaults
|
||||
|
||||
settings.configure(default_settings=myapp_defaults, DEBUG=True)
|
||||
|
||||
The following example, which uses ``myapp_defaults`` as a positional argument,
|
||||
is equivalent::
|
||||
|
||||
settings.configure(myapp_defaults, DEBUG = True)
|
||||
|
||||
Either configure() or DJANGO_SETTINGS_MODULE is required
|
||||
--------------------------------------------------------
|
||||
|
||||
If you're not setting the ``DJANGO_SETTINGS_MODULE`` environment variable, you
|
||||
*must* call ``configure()`` at some point before using any code that reads
|
||||
settings.
|
||||
|
||||
If you don't set ``DJANGO_SETTINGS_MODULE`` and don't call ``configure()``,
|
||||
Django will raise an ``EnvironmentError`` exception the first time a setting
|
||||
is accessed.
|
||||
|
||||
If you set ``DJANGO_SETTINGS_MODULE``, access settings values somehow, *then*
|
||||
call ``configure()``, Django will raise an ``EnvironmentError`` saying settings
|
||||
have already been configured.
|
||||
|
||||
Also, it's an error to call ``configure()`` more than once, or to call
|
||||
``configure()`` after any setting has been accessed.
|
||||
|
||||
It boils down to this: Use exactly one of either ``configure()`` or
|
||||
``DJANGO_SETTINGS_MODULE``. Not both, and not neither.
|
||||
|
|
|
@ -7,6 +7,10 @@ perspective -- how it works and how to extend it. If you're just looking for
|
|||
reference on the language syntax, see
|
||||
`The Django template language: For template authors`_.
|
||||
|
||||
If you're looking to use the Django template system as part of another
|
||||
application -- i.e., without the rest of the framework -- make sure to read
|
||||
the `configuration`_ section later in this document.
|
||||
|
||||
.. _`The Django template language: For template authors`: http://www.djangoproject.com/documentation/templates/
|
||||
|
||||
Basics
|
||||
|
@ -876,3 +880,37 @@ The only new concept here is the ``self.nodelist.render(context)`` in
|
|||
For more examples of complex rendering, see the source code for ``{% if %}``,
|
||||
``{% for %}``, ``{% ifequal %}`` and ``{% ifchanged %}``. They live in
|
||||
``django/template/defaulttags.py``.
|
||||
|
||||
.. _configuration:
|
||||
|
||||
Configuring the template system in standalone mode
|
||||
==================================================
|
||||
|
||||
.. note::
|
||||
|
||||
This section is only of interest to people trying to use the template
|
||||
system as an output component in another application. If you are using the
|
||||
template system as part of a Django application, nothing here applies to
|
||||
you.
|
||||
|
||||
Normally, Django will load all the configuration information it needs from its
|
||||
own default configuration file, combined with the settings in the module given
|
||||
in the ``DJANGO_SETTINGS_MODULE`` environment variable. But if you're using the
|
||||
template system independently of the rest of Django, the environment variable
|
||||
approach isn't very convenient, because you probably want to configure the
|
||||
template system in line with the rest of your application rather than dealing
|
||||
with settings files and pointing to them via environment variables.
|
||||
|
||||
To solve this problem, you need to use the manual configuration option
|
||||
described in the `settings file`_ documentation. Simply import the appropriate
|
||||
pieces of the templating system and then, *before* you call any of the
|
||||
templating functions, call ``django.conf.settings.configure()`` with any
|
||||
settings you wish to specify. You might want to consider setting at least
|
||||
``TEMPLATE_DIRS`` (if you are going to use template loaders),
|
||||
``DEFAULT_CHARSET`` (although the default of ``utf-8`` is probably fine) and
|
||||
``TEMPLATE_DEBUG``. All available settings are described in the
|
||||
`settings documentation`_, and any setting starting with *TEMPLATE_*
|
||||
is of obvious interest.
|
||||
|
||||
.. _settings file: http://www.djangoproject.com/documentation/settings/#using-settings-without-the-django-settings-module-environment-variable
|
||||
.. _settings documentation: http://www.djangoproject.com/documentation/settings/
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue