While some of us are blessed with fixed IP addresses, some ISPs don’t offer this option unfortunately. If you’re using the Django INTERNAL_IPS
setting to show or hide the debug toolbar this can be a problem.
Luckily the Django settings.py
files are pure Python and it’s easy enough to work around this issue with a few lines of code:
import sys
INTERNAL_IPS = [
# Any fixed internal IPs
]
INTERNAL_HOSTS = [
# Some dyndns host
# Some no-ip host
# etc…
# For example:
'wol.ph',
]
# Only enable when running through the runserver command
if 'runserver' in sys.argv:
import dns.resolver
resolver = dns.resolver.Resolver()
# Set the timeout to 1 so we don’t wait too long
resolver.timeout = 1
resolver.lifetime = 1
for host in INTERNAL_HOSTS:
try:
# For ipv6 you can use AAAA instead of A here
ip = resolver.query(host, 'A')[0].address
INTERNAL_IPS.append(ip)
except dns.exception.Timeout:
print('Unable to resolve %r, skipping' % host)
Note that the code above uses dnspython which can be installed through pip.
Link to this post!