【问题标题】:Django: Using Different Templates for ProductionDjango:使用不同的模板进行生产
【发布时间】:2010-11-22 16:32:13
【问题描述】:

在每个 Django 模板中导入的 base.html 模板中,我有一个带有 Google Analytics 脚本的块:

<!-- GOOGLE ANALYTICS -->

<script type="text/javascript">
    bla bla...
</script>

我希望仅在生产时包含此脚本,而不是在开发期间包含此脚本。是否有与setting.py中的解决方案相媲美的解决方案?

import socket

if socket.gethostname() == 'my-laptop':
    DEBUG = TEMPLATE_DEBUG = True
else:
    DEBUG = TEMPLATE_DEBUG = False

任何知道模板标签的人,还是我应该自己做一个?

【问题讨论】:

    标签: django


    【解决方案1】:

    您可以将 DEBUG 变量添加到上下文处理器,然后在该块周围放置一个 IF。 http://docs.djangoproject.com/en/dev/ref/templates/api/#subclassing-context-requestcontext

    from django.conf import settings
    def debug_context(request):
        return {'DEBUG': settings.DEBUG}
    

    然后在你的模板中:

    {% if DEBUG %}
        STUFF
    {% endif %}
    

    或者,您可以让上下文处理器返回您想要关闭的任何内容、设置文件中的任何内容或其他内容。

    【讨论】:

    • Xealot,感谢您对我实施的建议。在 TEMPLATE_CONTEXT_PROCESSORS 中包含自定义上下文处理器后一切正常。最容易实施的解决方案!
    • 很高兴听到,我已经使用这个特定的实现 3 年多了,它仍然是我所知道的最简单的。希望您现在也开始考虑使用上下文处理器来解决其他问题。
    【解决方案2】:

    settings.py中,检查debugTrue,还要加上:

    INTERNAL_IPS = (
        '127.0.0.1',
        'localhost',
    )
    

    然后你可以在你的模板中使用这样的东西:

    {% if debug %}
    <span>This is debug</span>
    {% else %}
    <span>This is production</span>
    {% endif %}
    

    如果要更改为生产,请将debug 设置为False

    参考: http://www.djangobook.com/en/2.0/chapter09.html

    【讨论】:

      【解决方案3】:

      还没有见过这样的模板标签。

      我更倾向于在生产和开发中使用不同的 setting.py 文件,并包含 this answer 中描述的分析代码。

      此解决方案允许使用更简单的模板,并让您可以选择在同一应用的不同部署中使用不同的分析代码。

      【讨论】:

      • 该链接看起来与我一直在寻找的完全一样 - 谢谢!
      【解决方案4】:

      模板可能不是处理这个问题的最佳位置。

      通常,您会编写一个 context preprocessor 来处理请求并向您的上下文添加一个标志(例如 PRODUCTION = True)。然后,您可以在模板中使用简单的 if 语句,或者更好的是,编写一个简单的自定义标签,将实现细节从模板中隐藏。

      另见this answer

      【讨论】:

      • 亚瑟,谢谢你的有用回答!我从 Xealot 中选择了答案,因为它帮助我实现了我的第一个上下文处理器 - 并不难 ;-)
      【解决方案5】:

      我在很多网站上执行以下操作,并且效果似乎非常好。

      然后在我的静态媒体文件目录中,我有一个 base.css 和 base_dev.css 的副本。我在 base_dev.css 文件中进行所有开发,然后在启动之前将其合并到 base.css 中。

      【讨论】:

        猜你喜欢
        • 2021-11-20
        • 1970-01-01
        • 1970-01-01
        • 2011-09-25
        • 1970-01-01
        • 1970-01-01
        • 2019-06-28
        • 2011-05-12
        • 1970-01-01
        相关资源
        最近更新 更多