2013-12-23 86 views
0

我的客戶想從django admin編輯該站點的css文件。 有什麼辦法可以做到嗎? 。 基本上他們想要的是能夠從django管理界面改變前端數據的顏色,字體等。編輯來自django admin的css文件

+0

使用cms代替 – catherine

+1

是的,有辦法做到這一點 - 多個FWIW。現在有什麼_you_試過? –

+0

我搜索了應用程序,執行job.found none.please幫助他... –

回答

3

最好的事情就是讓他編輯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> 

當然,選擇模型將可能需要稱爲「模板」或「視圖」什麼的另一個領域,將其鏈接到一個特定的HTML文件,但在這一點上,它很快就開始轉移到建立自己的CMS(如前所述,這是一個令人頭痛的問題,不想編輯文本文件只是不合理)

第三個可行的選擇是創建一個代碼編輯器的視圖,並讓你的客戶通過網頁編輯他的CSS。這裏有足夠多的客戶端插件,比如acecodemirror(當然,限制管理員的看法,這非常簡單)。

+0

謝謝,這很有用......但首先我會試圖說服我的客戶不要做到這一點:) –