FAQ: Using Django¶
Why do I get an error about importingDJANGO_SETTINGS_MODULE
?¶
Make sure that:
- The environment variable
DJANGO_SETTINGS_MODULE
is set to afully-qualified Python module (i.e.mysite.settings
). - Said module is on
sys.path
(importmysite.settings
should work). - The module doesn’t contain syntax errors.
I can’t stand your template language. Do I have to use it?¶
We happen to think our template engine is the best thing since chunky bacon,but we recognize that choosing a template language runs close to religion.There’s nothing about Django that requires using the template language, soif you’re attached to Jinja2, Mako, or whatever, feel free to use those.
Do I have to use your model/database layer?¶
Nope. Just like the template system, the model/database layer is decoupled fromthe rest of the framework.
The one exception is: If you use a different database library, you won’t get touse Django’s automatically-generated admin site. That app is coupled to theDjango database layer.
How do I use image and file fields?¶
Using aFileField
or anImageField
in a model takes a few steps:
- In your settings file, you’ll need to define
MEDIA_ROOT
asthe full path to a directory where you’d like Django to store uploadedfiles. (For performance, these files are not stored in the database.)DefineMEDIA_URL
as the base public URL of that directory.Make sure that this directory is writable by the web server’s useraccount. - Add the
FileField
orImageField
to your model, defining theupload_to
option to specify asubdirectory ofMEDIA_ROOT
to use for uploaded files. - All that will be stored in your database is a path to the file(relative to
MEDIA_ROOT
). You’ll most likely want to use theconvenienceurl
attributeprovided by Django. For example, if yourImageField
is calledmug_shot
, you can getthe absolute path to your image in a template with{{object.mug_shot.url}}
.
How do I make a variable available to all my templates?¶
Sometimes your templates all need the same thing. A common example would bedynamically generated menus. At first glance, it seems logical to add a commondictionary to the template context.
The best way to do this in Django is to use aRequestContext
. Details onhow to do this are here:Using RequestContext.