从django admin编辑css文件

时间:2013-12-23 12:35:16

标签: django django-admin

我的客户想要从django admin编辑网站的css文件。 有什么办法吗? 。 基本上他们想要的是,能够从django管理界面更改前端数据的颜色,字体等。

1 个答案:

答案 0 :(得分:3)

最好的办法就是让他自己编辑css文件。从本质上讲,CSS是一种相当灵活的工具,因此编写一种管理它的方法相当困难(实际上,过度杀伤)。 使用管理站点。此外,通过构建一种控制css的简单方法,您的客户可能会开始要求提供越来越多的灵活性,直到您发现自己构建了一个完整的cms(相信我,我自己就在那里)。

更重要的是,您的客户可能只想管理网站的小方面或细节。最近我有一个项目,我允许我的用户设置我的应用程序的显示样式。我这样做的方法是创建一个UserDesign模型,该模型扩展了基本用户模型并保留了非常具体的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模型可能需要另一个名为&#39; template&#39;或者查看&#39;或者某种东西,把它链接到某个html文件,虽然此时它很快就会开始构建你自己的cms(如前所述,这是一个令人头疼的问题,不想编辑文本文件就不会证明)

第三个可行的选择是使用代码编辑器创建视图,然后让您的客户端通过网页编辑他的CSS。那里有足够多的客户端插件,如sublimenotepad++(当然,将这种视图限制为管理员,这非常简单)。