最好的办法是让他自己编辑 css 文件。 CSS 本质上是一个相当灵活的工具,因此编写一种方法来管理它是相当困难的(而且真的是矫枉过正)。它已经很容易上手,任何像sublime 或notepad++ 这样的好编辑器都可能比您使用管理站点构建的任何东西更容易、更自然。此外,通过构建一种控制 CSS 的简单方法,您的客户可能会开始要求越来越多的灵活性,直到您发现自己构建了一个完整的 cms(相信我,我自己也去过那里)。
此外,您的客户可能只想管理网站的小方面或细节。最近我有一个项目,我允许我的用户为我的应用程序的显示设置样式。我这样做的方法是创建一个 UserDesign 模型,它扩展了基本的 User 模型并保留了非常具体的 css 数据。像这样的:
class UserDesign(models.Model):
user = models.OneToOneField(User)
background_color = models.CharField(max_length=15)
font_color = models.CharField(max_length=20, choices=COLORS)
theme = models.CharField(max_length=20, choices=THEMES)
意思是,他们没有控制整个 CSS,但他们确实可以选择背景颜色和其他一些信息。这是对任何网站的一个非常简洁的补充。但是,如果你一心想硬着头皮做,我会做这样的事情:
class Selector(models.Model):
name = models.CharField(max_length=30)
def get_template(self):
attrs = [a.join() for a in self.attr_set.all()]
return """ %s { %s } """ % ( self.name, ';'.join(attrs) )
class Attr(models.Model):
key = models.CharField(max_length=30)
value = models.CharField(max_length=30)
selector = models.ForeignKey(Selector)
def join(self):
return ': '.join(self.key, self.value)
我完全任意选择了 30 作为 max_length(您可能需要更长的时间),并且您可以使用 TabularInline 使每个选择器易于管理。然后,您可以轻松地在模板中使用不同的 css 定义:
<style>
{% for selector in selectors %}
{{ selector.get_template }}
{% endfor %}
</style>
当然,Selector 模型可能需要另一个名为“模板”或“视图”之类的字段,以将其链接到某个 html 文件,尽管此时它很快开始演变为构建您自己的 cms(其中,如前所述,不想编辑文本文件是很令人头疼的)
第三个可行的选择是使用代码编辑器创建一个视图,让您的客户通过网页编辑他的 css。那里有足够多的客户端插件,例如 ace 或 codemirror(当然,该视图仅限于管理员,这很容易做到)。