【问题标题】:Passenger Django custom variable in settings.py is not passed to template [duplicate]settings.py 中的乘客 Django 自定义变量未传递给模板 [重复]
【发布时间】:2016-10-27 15:21:27
【问题描述】:

当我的 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 时,我没有遇到任何问题!

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

为什么它适用于 mod_wsgi 而不是 mod_passenger?

Apache/2.4.6 (CentOS) Phusion_Passenger/5.0.28

谢谢

【问题讨论】:

  • 将这个变量传递给模板的代码在哪里?
  • "Django" 正在读取这里的 settings.py 和变量,然后可以在模板中使用。至少这是在另一种情况下对我有用的东西。使用 apache mod_wsgi,但不再使用乘客。
  • 其实我觉得我找到了痛点。我在 stackoverflow Django settings.py variables in templates 上找到了类似的主题。我会检查并更新答案。

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


【解决方案1】:

愚蠢的我!丹尼尔的评论让我重新思考这个问题。

我什至在 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

            ],
        },
    },
]


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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-23
    • 2012-02-26
    • 2014-03-04
    • 2019-04-03
    • 2014-11-30
    • 2016-12-31
    • 1970-01-01
    相关资源
    最近更新 更多