Open theromis opened 5 years ago
I think this is not a problem with django-templated-mail
, but rather with your django.contrib.sites
configuration. Did you provide SITE_ID in your project settings?
@hawi74 SITE_ID was disabled because I'm processing multiple domains with this snippet https://stackoverflow.com/questions/25681883/django-multiple-domains-single-app
class MultiSiteMiddleware(object):
def process_request(self, request):
try:
domain = request.get_host().split(":")[0]
request.site = Site.objects.get(domain=domain)
except Site.DoesNotExist:
return http.HttpResponseNotFound()
@theromis this is probably because you are stripping the port while Django's get_current_site function never does it. I highly recommend that you use this function as well, instead of directly accessing Site model. You will also have to include the port in your Site instance. Please let me know if that helps.
@hawi74 Sorry for posting wrong code snippet, here is my actual code used in project:
cat multihost.py
"""
A simple middleware component that lets you use a single Django
instance to server multiple distinct hosts.
IMPORTANT!! Make sure this is the FIRST entry in your MIDDLEWARE_CLASSES
Revision log:
v1.2 - 10th January 2012 (Cal Leeming - cal.leeming@simplicitymedialtd.co.uk)
* Added 'LoadingTime' response header (tells us how long the request took to process)
* Added 'MultiHost' response header (tells us if multihost was used or not)
* Added 'HOST_MIDDLEWARE_URLCONF_MAP' example
* Cleaned up code slightly
https://code.djangoproject.com/wiki/MultiHostMiddleware
# File: settings.py
HOST_MIDDLEWARE_URLCONF_MAP = {
# Control Panel
"www.example.com": "webapp.sites.example.urls",
}
"""
import time
from django.conf import settings
from django.utils.cache import patch_vary_headers
class MultiHostMiddleware:
def process_request(self, request):
try:
request.META["LoadingStart"] = time.time()
host = request.get_host()
#if host[-3:] == ":80":
# host = host[:-3] # ignore default port number, if present
# best way to do this.
host_port = host.split(':')
if len(host_port)==2:
host = host_port[0]
if host in settings.HOST_MIDDLEWARE_URLCONF_MAP:
request.urlconf = settings.HOST_MIDDLEWARE_URLCONF_MAP[host]
request.META["MultiHost"] = str(request.urlconf)
else:
request.META["MultiHost"] = str(settings.ROOT_URLCONF)
except KeyError:
pass # use default urlconf (settings.ROOT_URLCONF)
def process_response(self, request, response):
return response
if 'MultiHost' in request.META:
response['MultiHost'] = request.META.get("MultiHost")
if 'LoadingStart' in request.META:
_loading_time = time.time() - int(request.META["LoadingStart"])
response['LoadingTime'] = "%.2fs" % ( _loading_time, )
if getattr(request, "urlconf", None):
patch_vary_headers(response, ('Host',))
return response
@theromis are you running a single Django app instance that handles multiple domains or separate instance for each domain? Have you tried creating a Site instance for the domain that causes the issue?
@hawi74 Yes, it handles about 4 different domains and it have them in sites db. rest of it in this snippet, I need different domains to handle different localizations as well.
getting issue because have to use restful api by IP, in some countries my domain is not resolvable (don't know why) when requested by IP getting this backtrace:
I think at least wrap it in
try
should be useful feature