Django 每个用户的配色方案是否具有较少的/SCS?

Django 每个用户的配色方案是否具有较少的/SCS?,django,less,color-scheme,Django,Less,Color Scheme,我有一个Django项目正在进行中,如果用户界面有很多基于用户学校颜色的配色方案,那就太好了。我幻想有一个base variables.less文件和一堆编译成style.css的其他.less文件 但一旦用户设置了学校颜色,它就会生成一个blue.variables.less文件(如果他们选择了蓝色预设)或school123.variables.less文件(如果他们非常喜欢并使用颜色选择器来制作自己的配色方案)然后将所有内容编译为blue.style.css或school123.style.

我有一个Django项目正在进行中,如果用户界面有很多基于用户学校颜色的配色方案,那就太好了。我幻想有一个base variables.less文件和一堆编译成style.css的其他.less文件

但一旦用户设置了学校颜色,它就会生成一个blue.variables.less文件(如果他们选择了蓝色预设)或school123.variables.less文件(如果他们非常喜欢并使用颜色选择器来制作自己的配色方案)然后将所有内容编译为blue.style.css或school123.style.css,这就是我们在提供页面时加载的.css文件

我可以想象有很多方法可以让它崩溃。例如,当我将更新推送到forms.less或layout.less时,如何重新处理所有这些文件


有更好的方法吗?我在谷歌上搜索了我的手指,但没有发现任何人尝试这种疯狂行为。

有很多方法可以实现您的目标,即能够拥有特定于用户的配色方案,但它们各有优缺点

我假设您使用的是一些框架,比如Bootstrap和您命名的文件

选项1:特定颜色样式的内嵌CSS(首选)

由于性能和简单性,这是我的首选选项。您可以为每个用户存储每个自定义颜色,甚至可以创建一个模型,以便可以重用表示特定学校的颜色。它存储在数据库中,可以扩展到大量的配色方案,而无需生成大量非常相似的文件

在模板代码中创建具有使用颜色变量的任何样式的

base.html

{% include "color-snippet.css" with main-color="{{ user's main color }}" alt-color="{{ user's alt color }}" %}
color-snippet.css(请注意,此文件将在模板引擎处理时位于模板目录中

<style>
.some-style {
    color: {{ main-color }} !important;
}
</style>

.某种风格{
颜色:{{main color}}!重要;
}
因此,最大的缺点是您需要在variables.less之外自定义引导。您需要在less文件中搜索所有将生成的类,并将样式复制到css中的代码段,而不是更少。如果您想升级到较新的引导,这将需要一些前期投资和工作,但它会允许您在运行时分离要动态派生的样式的颜色部分

我更喜欢这种方法,因为您不必在静态步骤之外编译更少的内容

选项2:客户端编译更少的

你可以让Django提供一个动态创建的文件,并返回你想要的变量,然后让less.js在客户端编译它

这将涉及到向基本模板中添加一个由Django处理的url路径,该路径不是静态路径的一部分(例如./style/variables),在视图中创建一个处理程序,然后返回作为较少文件变量的文本内容

选项3:服务器端编译更少的

我过去常常在服务器端将less编译为css。使用Django应用程序需要一些设置。在开发模式下,Django管道会根据每个请求将相关的less文件编译为css文件。在生产模式下,它会指向编译文件的适当文件路径。它会挂接到
collectstatic
因此,当您
收集静态
时,您的less将被编译

这种方法最大的问题是静态文件的映射(更少的+css文件编译为css)是在您的设置文件中定义的。这需要在更新此文件时重新启动服务器。您可以根据Django管道的工作方式进行自己的无服务器端编译,但具有映射逻辑,而不是在需要重新启动服务器的内容中定义映射

这是一个大量的工作和较少的编译引导是不平凡的,必须做的每一个请求

如果您创建了自己的映射,而不需要重新启动Django服务器进程,那么您可以始终运行collectstatic来创建新的css文件。这将避免在每次请求时进行编译

虽然最后一种方法与您提到的方法最接近,但它似乎比仅仅分离特定颜色的样式并使用django模板对其进行自定义更容易工作和出错


最后一种方法也适用于方案数量较少的情况,因为您可以提前创建所有映射,而不让人们在运行时生成自己的映射。他们可以建议这些映射,您可以定期更新它们。

学校/颜色方案的数量是否有合理限制,或者这是唯一的为每个用户提供que?例如,它应该支持多少个条目?我最初的计划是提供一些预设设置,然后使用颜色选择器定制选项。我的直觉告诉我,实际使用颜色选择器来构建自己的方案的数量将非常少。非常感谢这些想法。我会让它们浸泡一段时间。我喜欢让Django管道完成collectstatic工作的想法。