This middleware enables Django projects to route requests to different URL configurations based on the domain of the incoming request. It offers both domain-based URL routing and automatic redirection to another domain for specific domains. It's particularly useful for projects hosted across multiple domains. Developed by Ferhat Mousavi.
- Python: 3.10 and above
- Django: 4 and above
- Install the package using pip:
pip install dj-multidomain
- Add the Middleware to your Django settings:
MIDDLEWARE = [
...
'dj-multidomain.middleware.MultipleDomainMiddleware',
...
]
- Configure the domains and their associated URL configurations in settings.py using the MULTI_DOMAIN_CONFIG setting:
MULTI_DOMAIN_CONFIG = {
'domain1.com': 'path.to.urls_for_domain1',
'domain2.com': 'path.to.urls_for_domain2',
...
}
sample path.to.urls_for_domain1
file
from django.urls import path, include
urlpatterns = [
path('', include('domain1_app.urls')),
]
- (Optional for redirect domains)Configure the domains and their associated domain configurations in settings.py using the MULTI_REDIRECT_CONFIG setting:
MULTI_REDIRECT_CONFIG = {
"not_my_desire_domain1.com": "my_desire_domain1.com",
"not_my_desire_domain2.com": "my_desire_domain2.com",
...
}
- (Optional) For common URLs accessible from any domain, specify the COMMON_URLS setting:
COMMON_URLS = 'path.to.common_urls'
sample path.to.common_urls
file
from django.contrib import admin
from django.urls import path
urlpatterns = [
path('admin/', admin.site.urls),
]
- (Optional) If you are in DEBUG mode and want a fallback for unrecognized domains, specify the DEFAULT_DOMAIN setting:
DEFAULT_DOMAIN = 'path.to.default_urls'
With the middleware set up, incoming requests will be routed based on their domain to the specified URL configurations. URLs defined in COMMON_URLS will be accessible from any domain.
For issues, feedback, or feature requests, please open an issue on the GitHub repository. Contributions are welcome; feel free to submit a pull request.