FAQ: Using Django¶
Why do I get an error about importing DJANGO_SETTINGS_MODULE?¶
Make sure that:
The environment variable
DJANGO_SETTINGS_MODULEis set to a fully-qualified Python module (i.e.mysite.settings).Said module is on
sys.path(import mysite.settingsshould 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, so if 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 from the rest of the framework.
The one exception is: If you use a different database library, you wonât get to use Djangoâs automatically-generated admin site. That app is coupled to the Django database layer.
How do I use image and file fields?¶
Using a FileField or an
ImageField in a model takes a few steps:
In your settings file, youâll need to define
MEDIA_ROOTas the full path to a directory where youâd like Django to store uploaded files. (For performance, these files are not stored in the database.) DefineMEDIA_URLas the base public URL of that directory. Make sure that this directory is writable by the web serverâs user account.Add the
FileFieldorImageFieldto your model, defining theupload_tooption to specify a subdirectory ofMEDIA_ROOTto 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 the convenienceurlattribute provided by Django. For example, if yourImageFieldis calledmug_shot, you can get the 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 be dynamically generated menus. At first glance, it seems logical to add a common dictionary to the template context.
The best way to do this in Django is to use a RequestContext. Details on
how to do this are here: Using RequestContext.