Howto use Satchmo as an App

Note: This article is out of date. Since I wrote it, I’ve become a core developer on the Satchmo project, and Satchmo is usable by default as an App (or rather a collection of apps) rather than as the whole project. I’m going to be using Satchmo to power the backend of a highly customized store that I’m building for a new client. This is an early-stage, yet strong Python ecommerce framework, which gets much of its power by being built on Django. Of course, anyone reading my site can clearly see that I am strong in favor of that choice. I ran into one little issue when I was first setting it up according to the directions. I was told to modify files in the Satchmo directory itself. No! I won’t do it! Not on an actively developed application like that. How would I keep my modified branch in sync with the development branch?

Why is that wrong?

In general, you never want to modify something that is a moving target. Even if it is a hassle, you should set things up so that the thing-which-will-be-getting-updated is isolated from your own code. Otherwise you’ll certainly have to face that most annoying of development tasks, merging someone else’s code. Well, luckily it wasn’t so hard to set up Satchmo for use as an App, rather than as the base site. What I did was copy the settings files, and copy-for-modification one base file. It works. My directory structure: /opt/webapps/farinaz <-- my client /opt/webapps/satchmo <-- SVN checkout of satchmo here Make sure to add your base dir to your PYTHONPATH. Copy: cp satchmo/ farinaz/ cp satchmo/ farinaz/ cp satchmo/ farinaz/ cp satchmo/ farinaz/ cp -r satchmo/static farinaz/ Modify (no need to modify anything in the base file)

import os
DIRNAME = os.path.dirname(__file__)

# this is useful, since satchmo is not the "current directory" like load_data expects.
SATCHMO_DIRNAME = '/opt/webapps/satchmo'

DATABASE_NAME = 'farinaz'
DATABASE_USER = 'webapp'
SECRET_KEY = 'supercalifragilisticexpealidocious'

# note these are not in the base
SITE_NAME = "Farinaz Taghavi"
ROOT_URLCONF = 'farinaz.urls'
MEDIA_ROOT = os.path.join(DIRNAME, 'static/')
DJANGO_PROJECT = 'farinaz'
DJANGO_SETTINGS_MODULE = 'farinaz.settings'

# this is *particularly important*.  It sets the development directory templates earlier
# on the search path than the base satchmo templates.  That way you can override only
# the ones you want
    os.path.join(DIRNAME, "templates"),
    os.path.join(SATCHMO_DIRNAME, "templates"),


Modify, change three lines: Around line 15, give yourself the ability to override the default satchmo settings. Change the os.environ line like so:

if not os.environ.has_key("DJANGO_SETTINGS_MODULE"):


Around line 64, change site.domain and to the correct settings for your site. To load the test data, just go to your site directory:

cd /opt/webapps/farinaz
export DJANGO_SETTINGS_MODULE=farinaz.settings
[ ... type yes a bunch of times ...]
python test
python runserver


It works! Woo!

Coders Eye - Web Dev Tutorials and How-To Guides for Beginners
Enable registration in settings - general