Skip to main content

An application that allows you to run many different sites on one Django instance

Project description

Installation

  1. Install the package

pip install django-domains
  1. 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
)
  1. 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django-domains-0.1.tar.gz (5.7 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page