settings.py中的Passenger Django自定义变量未传递给模板

时间:2016-06-24 22:31:41

标签: python django django-templates passenger django-context

当我的django应用程序在本地或测试服务器上运行时,我希望disqus comments被禁用。

所以在我的Django settings.py我正在使用:

DEBUG = True
DISQUS = False

现在在我的django blog_post.html模板中,我有一个IF语句:

{% if DISQUS %}
   <div id="disqus_thread"></div>
    <script>
         etc.
         etc.
    </script>
{% else %}
   <p>Disqus disabled...</p>
{% endif %}

当我将代码推送到实时服务器(DISQUS = True)时,评论部分将在我的html页面中。

当我使用Apache mod_wsgi时,我对此设置没有任何问题!

然而,在切换到Passenger之后,这停止了工作。我已经尝试了几乎所有已知的组合,没有希望。 DISQUS自定义变量不会传递给模板。

为什么它使用mod_wsgi而不使用mod_passenger?

Apache / 2.4.6(CentOS)Phusion_Passenger / 5.0.28

由于

1 个答案:

答案 0 :(得分:0)

愚蠢的我!丹尼尔的评论使我再次思考这个问题。

我甚至在stackoverflow上找到a similar 3y old issue并在另一个关于accessing constants in settings.py from templates in Django的线程中更好的引用,这更好地描述了问题。

由于Django 1.8的内容变得更简单(你也可以查看Upgrading templates to Django 1.8)。


我切换到django app目录,在那里我创建了文件context_processors.py

from django.conf import settings

def disqus(context):
  return {'DISQUS': settings.DISQUS}



然后我打开了settings.py,其中定义了 TEMPLATES ,并将其添加到 context_processors 列表中:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(os.path.dirname(BASE_DIR), 'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
                'blogengine.context_processors.disqus',  # <--- add this line here

            ],
        },
    },
]


现在,我可以在DISQUS中将True设置为Falsesettings.py,html模板将检查状态并显示或隐藏评论部分。