Skip to content

Commit d2a658d

Browse files
authored
Refactor FullUrlMixin get_domain to handle django.contrib.sites not in INSTALLED_APPS (#194)
1 parent 1a4de31 commit d2a658d

File tree

3 files changed

+28
-6
lines changed

3 files changed

+28
-6
lines changed

changes/192.bugfix

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Refactor FullUrlMixin get_domain to handle django.contrib.sites not in INSTALLED_APPS

meta/views.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import warnings
33
from datetime import date
44

5+
from django.apps import apps
56
from django.core.exceptions import ImproperlyConfigured
67

78
from .settings import get_setting
@@ -30,17 +31,20 @@ def get_domain(self):
3031
3132
:return: domain URL
3233
"""
33-
from django.contrib.sites.models import Site
34-
3534
try:
36-
if self.use_sites:
37-
return Site.objects.get_current(self.request).domain
35+
use_site = self.use_sites
3836
except AttributeError:
39-
if get_setting("USE_SITES"):
37+
use_site = get_setting("USE_SITES")
38+
39+
if use_site:
40+
try:
41+
Site = apps.get_model("sites.Site")
4042
try:
4143
return Site.objects.get_current(self.request).domain
4244
except AttributeError:
4345
return Site.objects.get_current().domain
46+
except LookupError:
47+
raise ImproperlyConfigured("Add django.contrib.sites to INSTALLED_APPS because META_USE_SITES is True")
4448
if not get_setting("SITE_DOMAIN"):
4549
raise ImproperlyConfigured("META_SITE_DOMAIN is not set")
4650
return get_setting("SITE_DOMAIN")

tests/test_meta.py

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
from django.contrib.sites.models import Site
55
from django.core.exceptions import ImproperlyConfigured
6-
from django.test import RequestFactory, TestCase, override_settings
6+
from django.test import RequestFactory, TestCase, modify_settings, override_settings
77

88
from meta.views import Meta
99

@@ -266,3 +266,20 @@ def test_as_json_ld(self):
266266
m.as_json_ld(),
267267
json.dumps(data),
268268
)
269+
270+
@override_settings(META_SITE_DOMAIN="example-no-sites.com", META_SITE_PROTOCOL="http")
271+
@modify_settings(INSTALLED_APPS={"remove": "django.contrib.sites"})
272+
def test_get_full_url_without_sites(self):
273+
m = Meta()
274+
self.assertEqual(m.get_full_url("foo/bar"), "http://example-no-sites.com/foo/bar")
275+
276+
@override_settings(
277+
META_SITE_DOMAIN="example-no-sites.com",
278+
META_SITE_PROTOCOL="http",
279+
META_USE_SITES=True,
280+
)
281+
@modify_settings(INSTALLED_APPS={"remove": "django.contrib.sites"})
282+
def test_get_full_url_without_sites_wrong_setting(self):
283+
m = Meta()
284+
with self.assertRaises(ImproperlyConfigured):
285+
self.assertEqual(m.get_full_url("foo/bar"), "http://example-no-sites.com/foo/bar")

0 commit comments

Comments
 (0)