La solución utilizada en cookiecutter-django no funciona cuando el contenedor Django está conectado a múltiples redes en Docker. La solución es algo como lo siguiente (tomado de esta publicación SO ):
import socket
ip = socket.gethostbyname(socket.gethostname())
INTERNAL_IPS = ['127.0.0.1', ip[:-1] + '1']
Mi configuración de Docker Compose tiene los siguientes elementos:
networks:
web_network: {}
cache_network: {}
database_network: {}
services:
djangoapp:
networks:
- database_network
- web_network
- cache_network
Ahora, la IP devuelta por ip = socket.gethostbyname(socket.gethostname())
no siempre es la misma. Parece ser la IP de una de las diferentes redes disponibles (si eso tiene sentido). Entonces, a veces funciona, pero la mayoría de las veces no.
Terminé agregando todas las IP posibles basadas en la devuelta por socket
, algo como:
def internal_docker_ips(base_ip):
numbers = base_ip.split('.')
return [
'.'.join([numbers[0], str(i), numbers[2], str(j)])
for i in range(1, 254) for j in (1, 3) # all IPs ending with '.1' and '.3'
]
INTERNAL_IPS = [
'127.0.0.1',
]
INTERNAL_IPS.extend(
internal_docker_ips(
socket.gethostbyname(
socket.gethostname())))
# ['127.0.0.1', '172.1.0.1', '172.1.0.3', '172.2.0.1', '172.2.0.3', ..., '172.253.0.1', '172.253.0.3']
¿Existe una solución más limpia para esto? ¿Alguno de ustedes tuvo el mismo problema? Puede que no esté relacionado con la barra de herramientas de depuración de Django, pero se agradece cualquier ayuda y creo que será útil para otros.
Esto es lo que hago:
if DEBUG:
# `debug` is only True in templates if the vistor IP is in INTERNAL_IPS.
INTERNAL_IPS = type(str('c'), (), {'__contains__': lambda *a: True})()
Simplemente asigne un objeto que contenga todas las cosas a INTERNAL_IPS
. ¡Por supuesto, nunca hagas esto en un host de producción!
¡Inteligente! ¡Debería considerar agregar esta respuesta a la publicación SO mencionada! Definitivamente lo votaría a favor: sonrisa:
Lo agregué aquí :) https://stackoverflow.com/a/49818040/317346
Parece que no hay más interés en este problema, y obtuve mi respuesta: cierre: cara_smiling_ligeramente:
Uno de mis colegas usa otra solución para esto: en realidad, django-debug-toolbar proporciona una opción de configuración llamada SHOW_TOOLBAR_CALLBACK
.
DEBUG_TOOLBAR_CONFIG = {
'SHOW_TOOLBAR_CALLBACK': lambda request: True,
}
# or
DEBUG_TOOLBAR_CONFIG = {
'SHOW_TOOLBAR_CALLBACK': lambda request: True if DEBUG else False,
}
Comentario más útil
Esto es lo que hago:
Simplemente asigne un objeto que contenga todas las cosas a
INTERNAL_IPS
. ¡Por supuesto, nunca hagas esto en un host de producción!