gpt4 book ai didi

django-debug-toolbar 不会从生产服务器显示

转载 作者:行者123 更新时间:2023-12-02 09:30:11 26 4
gpt4 key购买 nike

我想在访问运行 Django 1.6 的生产网站时查看 Django 调试工具栏。我的服务器运行的是 Debian 7.8、Nginx 1.2.1 和 Gunicorn 19.1.1。但是,当我在将 DDT 添加到已安装的应用程序后尝试访问该网站时,出现以下错误:

NoReverseMatch at /
u'djdt' is not a registered namespace
Exception Location: /home/mysite/venv/mysite/local/lib/python2.7/site-packages/django/core/urlresolvers.py in reverse, line 505

Error during template rendering
In template /home/mysite/venv/mysite/local/lib/python2.7/site-packages/debug_toolbar/templates/debug_toolbar/base.html, error at line 12

data-store-id="{{ toolbar.store_id }}" data-render-panel-url="{% url 'djdt:render_panel' %}"

我知道不建议您在生产中运行该工具栏,但我只想在将其开放供公众使用之前在生产服务器上进行一些测试时运行它。正如您所期望的,它在我的笔记本电脑上的开发环境中运行得很好。我做了一些研究并确保我使用 "explicit" setup按照推荐here 。我还运行了命令“django-admin.pycollectstatic”以确保工具栏的静态文件被收集到我的 STATIC_ROOT 中。

由于我在代理服务器后面运行,因此我还添加了一些中间件,以确保将客户端的 IP 地址而不是代理的 IP 地址传递到工具栏的中间件。这也没有解决问题。

我在下面显示了与此问题相关的所有设置。我还有什么遗漏的吗?

谢谢!

这些是相关的基本设置:

SETTINGS_ROOT = os.path.abspath(os.path.dirname(__file__).decode('utf-8'))
STATIC_ROOT = '/var/www/mysite/static/'
STATIC_URL = '/static/'
STATICFILES_DIRS = (
os.path.join(SETTINGS_ROOT, "../../static"),
)
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)
TEMPLATE_LOADERS = (
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
)
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.middleware.common.BrokenLinkEmailsMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
)
TEMPLATE_DIRS = (
os.path.join(SETTINGS_ROOT, "../../templates"),
)
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
# Django management commands in 'scripts'
'scripts',
'apps.account',
)

这些仅限生产的设置将添加到生产中的基本设置中:

DEBUG = True  # DDT needs this to be True
TEMPLATE_DEBUG = DEBUG
INSTALLED_APPS += (
'django_extensions',
# I'm using Django 1.6
'debug_toolbar',
)
if 'debug_toolbar' in INSTALLED_APPS:
MIDDLEWARE_CLASSES += ('conf.middleware.DjangoDebugToolbarFix',
'debug_toolbar.middleware.DebugToolbarMiddleware', )

# I had to add this next setting after upgrading my OS to Mavericks
DEBUG_TOOLBAR_PATCH_SETTINGS = False
# IP for laptop and external IP needed by DDT
INTERNAL_IPS = ('76.123.67.152', )
DEBUG_TOOLBAR_CONFIG = {
'DISABLE_PANELS': [
'debug_toolbar.panels.redirects.RedirectsPanel',
],
'SHOW_TEMPLATE_CONTEXT': True,
'INTERCEPT_REDIRECTS': False
}

这是在我的 urls.py 中:

if 'debug_toolbar' in dev.INSTALLED_APPS:
import debug_toolbar
urlpatterns += patterns('',
url(r'^__debug__/', include(debug_toolbar.urls)),
)

这是附加的中间件:

class DjangoDebugToolbarFix(object):
"""Sets 'REMOTE_ADDR' based on 'HTTP_X_FORWARDED_FOR', if the latter is
set."""
def process_request(self, request):
if 'HTTP_X_FORWARDED_FOR' in request.META:
ip = request.META['HTTP_X_FORWARDED_FOR'].split(",")[0].strip()
request.META['REMOTE_ADDR'] = ip

最佳答案

我使用的设置与 OP 描述的完全相同,但明显的异常(exception)是在单独的 Docker 容器中运行所有内容,这使得每个服务的 IP 难以预测。

这就是强制 Django 调试工具栏始终显示的方法(仅在本地使用,切勿在生产中使用):

def custom_show_toolbar(request):
return True # Always show toolbar, for example purposes only.

DEBUG_TOOLBAR_CONFIG = {
'SHOW_TOOLBAR_CALLBACK': custom_show_toolbar,
}

关于django-debug-toolbar 不会从生产服务器显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28226940/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com