Django 模板开发与生产

cus*_*ice 5 python django

我从使用 Django 的人那里继承了一个产品,但我完全不知道如何使用它。

我想要完成的是scripts在我的base.html文件中提供不同的内容,如下所示:

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

<!-- if production -->
<script src="{% static "production/js/main.min.js" %}></script>
<! -- end -->
Run Code Online (Sandbox Code Playgroud)

文件结构如下:

app_name
|__ pages
|__ settings
|__ static
|__ templates
|__ etc
Run Code Online (Sandbox Code Playgroud)

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

base.py : shared settings
development.py
production.py
Run Code Online (Sandbox Code Playgroud)

里面development.py

from app_name.settings.base import *

DEBUG = True
TEMPLATE_DEBUG = DEBUG

// etc
Run Code Online (Sandbox Code Playgroud)

我试图在里面做类似下面的事情templates/base.html,但显然不是那么容易。

{% if DEBUG %}
STUFF
{% endif %}
Run Code Online (Sandbox Code Playgroud)

有什么帮助吗?

Jor*_*tao 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}
Run Code Online (Sandbox Code Playgroud)

并在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",)
Run Code Online (Sandbox Code Playgroud)

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

  • 无需重新发明轮子。如果使用得当,django.core.context_processors.debug 已经为你完成了。 (3认同)