为此,您可以利用模板继承{% extends %}
,尤其是模板标签,它可以接受变量而不是文字字符串。
例子:
在您的子模板中,使它们扩展未知的基本模板,如下所示:
{% extends BASE_SITE_TEMPLATE %}
{% block page_head %}
<!-- Custom per-page static files may be defined here -->
{% endblock %}
{% block page_content %}
...
{% endblock %}
然后编写一个模板上下文处理器,它将BASE_SITE_TEMPLATE
根据您的自定义条件将变量传递给呈现的模板:
def base_site_template(request):
# Here goes your conditions to select proper base template, for example
# by checking request.user permissions or some other logic.
...
return {'BASE_SITE_TEMPLATE': ...}
当然,您将需要定义各种基本模板,例如base_site_user.html
, base_site_editor.html
, base_site_admin.html
.
此方法不需要您更改任何视图,只需更改子模板,因此我认为这是执行所需操作的最简单方法之一。