An application that allows you to run many different sites on one Django instance
Project description
Installation
Install the package
pip install django-domains
Open settings.py and add middlewares into end of MIDDLEWARE_CLASSES tuple:
MIDDLEWARE_CLASSES += ( 'domains.middleware.RequestMiddleware', 'domains.middleware.DynamicSiteMiddleware', )
First middleware domains.middleware.RequestMiddleware is required, because it sets the request object into local thread.
Second middleware domains.middleware.DynamicSiteMiddleware is optional. You can use it for dynamical changing SITE_ID parameter corresponding site’s PK with requested domains (see Django sites framework).
If you also want to use different templates for domains, add template loaders in begin of TEMPLATE_LOADERS tuple:
TEMPLATE_LOADERS = ( 'domains.loaders.filesystem.Loader', 'domains.loaders.app_directories.Loader', # another loaders )
Run tests:
./manage.py test domains
Usage
If you want to use different template sets for each domains, just create directories with name domainname.tld (don’t forget add TEMPLATE_LOADERS as figured in Installation) and put templates here.
Also you can use custom function that builds domain name. You must add DOMAINS_TEMPLATE_NAME_FUNCTION attribute into your settings.py and specify path to naming function.
Function must return tuple with path fragments. This fragments will be joined into full template path with django-domains.
Expect you call this function my_custom_template_name and placed it in my/project/utils.py:
Btw, you can access to request :)
def my_custom_template_name(template_dir, template_name): """ This function generates template path in format: {template_dir}/custom/domains/{host}/{template_name} """ from domains.utils import get_request request = get_request() return (template_dir, 'custom', 'domains', request.get_host, template_name)
Add into your settings.py this line:
DOMAINS_TEMPLATE_NAME_FUNCTION = 'my.project.utils.my_custom_template_name'
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.