1

我想在我的 Django 站点中添加一个“dev”子域,用于公开测试实验布局。所有这些实验都在我的base.html模板上进行。(例如,我可能会尝试一个新的 CSS 文件以及一些更流畅的容器。)目前,这个替代模板存在于一个base_alt.html文件中。

我设置了中间件,以便request对象具有正确的subdomain属性,并且我正在使用django.core.context_processors.request上下文处理器将此属性传递给模板本身。但我无法决定将逻辑换出基本文件的正确位置。以下是我的想法:

继承的每个模板中的逻辑base.html

{% ifequal request.subdomain "dev" %}
    {% extends "base_alt.html" %}
{% else %}
    {% extends "base.html" %}
{% endifequal %}

这是行不通的,一方面。我想我在做一些愚蠢的错误。但这似乎也是一个糟糕的解决方案——至少有十几个页面级模板继承了基础。

我的另一个平庸的想法是将两个基本模板放入base.html一个巨大的“if”语句中。

肯定有更好的方法吗?

4

2 回答 2

1

为每个站点配置不同的 Django 配置文件,配置不同的模板路径怎么样?

如果您不想复制所有模板,您可以为开发站点提供两个模板目录 - 一个包含您的修改,然后(稍后在路径中)实时站点的模板目录。如果您的开发模板目录中没有模板,Django 将使用实时模板。

您不需要复制整个配置文件 - 您的开发配置文件应该能够执行import mysite.config_live(或任何您的实时配置),然后只需覆盖您要更改的一个设置。

于 2013-05-14T15:26:52.120 回答
0

我真的很喜欢@user9876 的想法,但我找到了一种更简单的方法来满足我有限的需求。我制作了一个自定义上下文处理器:

def base_template(request):
    print request.subdomain
    if request.subdomain == "dev":
        return {'base_temp' : 'base_alt.html'}
    return {'base_temp' : 'base.html'}

然后我将页面级模板中的基本模板调用更改为:

 {% extends base_temp %}

这也意味着我不再需要将请求变量发送到模板。

这确实需要对所有继承的模板进行一次性更改,但是在我这样做之后,我可以将子域的映射扩展到基本模板。如果我的项目变得比这更复杂,我肯定会转向多个设置文件。谢谢!

于 2013-05-14T16:00:34.357 回答