当我的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
由于
答案 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
设置为False
或settings.py
,html模板将检查状态并显示或隐藏评论部分。
冷