Django模板开发与生产环境

5 投票
2 回答
1034 浏览
提问于 2025-04-18 04:51

我正在接手一个使用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 个回答

2

你需要使用内置的 调试上下文处理器。别忘了设置 INTERNAL_IPS 这个选项,比如可以设置为 ('127.0.0.1', )。

这样之后:

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

就应该能正常工作了。

3

你需要把你的DEBUG设置传递给模板。

正确的方法是使用上下文处理器,它可以把一些变量放到模板渲染的上下文中。

针对你的具体例子,一种解决方法是在你的应用程序中定义一个新的模块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设置了。

撰写回答