Jor*_*ris 15 django django-debug-toolbar docker
所以我让docker和Django在本地工作,首先从Dockerfile构建图像,然后使用Fig获取postgres图像,将其链接到基本图像,然后运行localserver.除了django_debug_toolbar之外,一切正常.由于某种原因,它不会出现.在internal_ips中也有dockerhost ip.任何人都可以帮我解决这个问题吗?Docker通过boot2docker在mac上运行.
谢谢!
我的设置:
init .py
import os
if 'DEBUG' not in os.environ or not os.environ['DEBUG']:
from .local import *
else:
pass
Run Code Online (Sandbox Code Playgroud)
base.py
""" common and global settings """
from sys import path
from os import environ
from os.path import abspath, basename, dirname, join, normpath
from django.core.exceptions import ImproperlyConfigured
import dj_database_url
def get_env_variable(var_name):
try:
return environ[var_name]
except KeyError:
error_msg = "Set the environment variable" % var_name
raise ImproperlyConfigured(error_msg)
# Paths
DJANGO_ROOT = dirname(dirname(abspath(__file__)))
SITE_ROOT = dirname(DJANGO_ROOT)
SITE_NAME = basename(DJANGO_ROOT)
# End Paths
# URLs
MEDIA_ROOT = normpath(join(SITE_ROOT, 'media'))
MEDIA_URL = "/media/"
STATIC_ROOT = normpath(join(SITE_ROOT, 'assets'))
STATIC_URL = "/static/"
STATICFILES_DIRS = (
normpath(join(SITE_ROOT, 'static')),
)
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)
ROOT_URLCONF = '%s.urls' % SITE_NAME
path.insert(0, join(DJANGO_ROOT, 'apps')) # add apps folder to system path
# End URLs
# Database
# example: postgres://joris:luna@localhost/bitbybit
DATABASES = {'default': dj_database_url.config(
default='postgres://postgres@db:5432/postgres')}
# End Database
# Templates
TEMPLATE_CONTEXT_PROCESSORS = (
'django.contrib.auth.context_processors.auth',
'django.core.context_processors.debug',
'django.core.context_processors.i18n',
'django.core.context_processors.media',
'django.core.context_processors.static',
'django.core.context_processors.tz',
'django.contrib.messages.context_processors.messages',
'django.core.context_processors.request',
)
TEMPLATE_LOADERS = (
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
)
TEMPLATE_DIRS = (
normpath(join(SITE_ROOT, 'templates')),
)
# End Templates
# SECURITY WARNING: keep the secret key used in production secret!
# make it unique and store it as an environment variable
SECRET_KEY = r"d%g7_h6cz=xbhs*5-i+e$c7mns*s)^_+#^8n@^-2dno@uie-z9"
# Application
DJANGO_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
)
LOCAL_APPS = (
'home',
)
INSTALLED_APPS = DJANGO_APPS + LOCAL_APPS
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'debug_toolbar.middleware.DebugToolbarMiddleware',
)
WSGI_APPLICATION = '%s.wsgi.application' % SITE_NAME
# End Application
# Internationalization
LANGAUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
# End Internationalization
Run Code Online (Sandbox Code Playgroud)
Local.py
from .base import *
# Debug config
DEBUG = True
TEMPLATE_DEBUG = DEBUG
# End Debug config
# Hosts
ALLOWED_HOSTS = ['127.0.0.1', 'localhost']
# End Hosts
# Django Debug Toolbar config
INSTALLED_APPS += (
'debug_toolbar', )
INTERNAL_IPS = ('127.0.0.1', 'localhost')
# End Django Debug Toolbar config
Run Code Online (Sandbox Code Playgroud)
小智 21
使用配置SHOW_TOOLBAR_CALLBACK为我唤醒
def show_toolbar(request):
return True
DEBUG_TOOLBAR_CONFIG = {
'SHOW_TOOLBAR_CALLBACK': show_toolbar,
}
Run Code Online (Sandbox Code Playgroud)
我希望有帮助:)
Mat*_*olz 15
你可以创建INTERNAL_IPS一个包含所有内容的对象.这就是我做的:
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})()
Run Code Online (Sandbox Code Playgroud)
当然,你永远不应该在生产主机上这样做!
说明:
类型函数(三个参数变量:https://docs.python.org/3/library/functions.html#type)创建一个新类,在这种情况下只有一个__contains__方法(https://docs.python.org /3/reference/datamodel.html#object.包含) - contains用于实现成员资格测试,这意味着在运行例如" if ip in INTERNAL_IPS" 时调用此方法.如果写为" def __contains__(self):\n return True",则contains方法本身可能会更清晰.新创建的类立即被实例化(最后的"()")并分配给INTERNAL_IPS
Jor*_*rdi 10
如果您想以编程方式执行此操作而不是复制/粘贴容器IP,我建议您喜欢django-cookiecutter人员.在您的本地设置文件中:
INTERNAL_IPS = ['127.0.0.1', ]
import socket
# tricks to have debug toolbar when developing with docker
ip = socket.gethostbyname(socket.gethostname())
INTERNAL_IPS += [ip[:-1] + '1']
Run Code Online (Sandbox Code Playgroud)
作为参考,这是django-cookiecutter local.py设置文件的链接.
允许我显示Django调试工具栏的IP地址是与我的docker容器关联的网关的IP.要获取网关的IP,请运行此命令
docker inspect my_container_name | grep -e '"Gateway"'
# "Gateway": "172.18.0.1",
Run Code Online (Sandbox Code Playgroud)
总的来说,我的设置看起来像这样
INSTALLED_APPS = (
'debug_toolbar',
)
INTERNAL_IPS = ['172.18.0.1']
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3520 次 |
| 最近记录: |