【问题标题】:Edit css files from django admin从 django admin 编辑 css 文件
【发布时间】:2013-12-23 12:35:16
【问题描述】:

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

【问题讨论】:

  • 是的,有办法做到这一点 - 不止一个 FWIW。现在尝试了什么?
  • 我在谷歌上搜索了可以完成这项工作的应用程序。发现没有。请帮助他...
  • 好吧,你可以呃...创建一个名为 Style 的模型并使用它来创建一个可用于不同视图的可管理 css 模板,尽管这听起来需要做很多工作变得更加灵活。创建一个视图来编辑 web 上的 css 代码(并将其限制为管理员用户)不是更容易吗?有很好的客户端包(here's one

标签: django django-admin


【解决方案1】:

最好的办法是让他自己编辑 css 文件。 CSS 本质上是一个相当灵活的工具,因此编写一种方法来管理它是相当困难的(而且真的是矫枉过正)。它已经很容易上手,任何像sublimenotepad++ 这样的好编辑器都可能比您使用管理站点构建的任何东西更容易、更自然。此外,通过构建一种控制 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。那里有足够多的客户端插件,例如 acecodemirror(当然,该视图仅限于管理员,这很容易做到)。

【讨论】:

  • 谢谢这很有用...但首先我会尝试说服我的客户不要这样做:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-20
  • 1970-01-01
相关资源
最近更新 更多