Django模板开发与生产环境的区别

5

我正在接手一项使用Django的产品,但我完全不知道如何使用它。

我的目标是在我的base.html文件中提供不同的scripts,类似于以下内容:

<!-- if development -->
<script src="{% static "js/main.js" %}></script>
<! -- end -->

<!-- if production -->
<script src="{% static "production/js/main.min.js" %}></script>
<! -- end -->

文件结构如下:
app_name
|__ pages
|__ settings
|__ static
|__ templates
|__ etc

settings 文件夹内,看起来有三个文件:

base.py : shared settings
development.py
production.py

development.py 内部,

from app_name.settings.base import *

DEBUG = True
TEMPLATE_DEBUG = DEBUG

// etc

我曾试图在templates/base.html中实现以下类似的操作,但显然并不容易。
{% if DEBUG %}
STUFF
{% endif %}

有需要帮助的吗?
2个回答

3
你需要将DEBUG发送到模板中的设置。
正确的方法是使用context_processors,它会使用变量填充模板呈现的上下文。
对于你的特定示例,解决问题的一种方法是在你的app_name中定义一个新的模块context_processors.py,并在其上编写。
from django.core.urlresolvers import resolve
from settings import DEBUG

def debug_settings(request):
    return {'DEBUG': DEBUG}

并在 settings.py 中使用

TEMPLATE_CONTEXT_PROCESSORS = ("django.contrib.auth.context_processors.auth",
                               "django.core.context_processors.debug",
                               "django.core.context_processors.i18n",
                               "django.core.context_processors.media",
                               "django.core.context_processors.static",
                               "django.core.context_processors.tz",
                               "django.contrib.messages.context_processors.messages",
                               "django.core.context_processors.request",
                               "app_name.context_processors.debug_settings",)

这将使所有模板看到您的DEBUG设置。

1
谢谢您的快速回复。我应该把 context_processors.py 文件保存在哪里? - cusejuice
在您的应用程序中,随处可见。您只需在TEMPLATE_CONTEXT_PROCESSORS中准确指定即可。编辑:我已将此添加到答案中。 - Jorge Leitao
3
如果使用恰当,就不需要重新发明轮子。django.core.context_processors.debug已经为您完成了这个工作。 - isobolev
@cusejuice,我认为isobolev是正确的。已经有一个用于调试的上下文处理器(我不知道)。他的回答 - 可以说用更具教育性的方式呈现 - 是正确的答案。 - Jorge Leitao

2

您需要利用内置的调试上下文处理器。不要忘记设置INTERNAL_IPS设置(例如设置为('127.0.0.1',))。

{% if debug %}
STUFF
{% endif %}

应该能够正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接