Die in cookiecutter-django verwendete Lösung funktioniert nicht, wenn der Django-Container in Docker mit mehreren Netzwerken verbunden ist. Die Lösung ist etwa die folgende (aus diesem SO-Post ):
import socket
ip = socket.gethostbyname(socket.gethostname())
INTERNAL_IPS = ['127.0.0.1', ip[:-1] + '1']
Meine Docker Compose-Konfiguration enthält die folgenden Elemente:
networks:
web_network: {}
cache_network: {}
database_network: {}
services:
djangoapp:
networks:
- database_network
- web_network
- cache_network
Nun ist die von ip = socket.gethostbyname(socket.gethostname())
IP nicht immer gleich. Es scheint die IP eines der verschiedenen verfügbaren Netzwerke zu sein (wenn das Sinn macht). Also manchmal funktioniert es, aber meistens nicht.
Am Ende habe ich alle möglichen IPs basierend auf der von socket
hinzugefügt, etwa wie:
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']
Gibt es dafür einen saubereren Workaround? Hatte jemand von euch das gleiche Problem? Es hat möglicherweise nichts mit der Django Debug Toolbar selbst zu tun, aber jede Hilfe wird geschätzt und wird meiner Meinung nach für andere nützlich sein.
Das ist was ich mache:
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})()
Weisen Sie einfach INTERNAL_IPS
ein Objekt zu, das alle Dinge enthält. Natürlich niemals auf einem Produktionshost!
Klug! Sie sollten erwägen, diese Antwort dem erwähnten SO-Post hinzuzufügen! Ich würde es auf jeden Fall positiv bewerten :smile:
Ich habe es hier hinzugefügt :) https://stackoverflow.com/a/49818040/317346
Anscheinend besteht kein weiteres Interesse an diesem Problem, und ich habe meine Antwort erhalten: close :slightly_smiling_face:
Einer meiner Kollegen verwendet dafür eine andere Lösung: Tatsächlich bietet django-debug-toolbar eine Konfigurationseinstellung namens 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,
}
Hilfreichster Kommentar
Das ist was ich mache:
Weisen Sie einfach
INTERNAL_IPS
ein Objekt zu, das alle Dinge enthält. Natürlich niemals auf einem Produktionshost!