2012-10-11 65 views
1

我不得不想出一個相當複雜的設置來爲用戶啓用基於數據庫的樣式選項。用戶在django admin後臺輸入樣式(如背景顏色,字體等)。帶動態LESS文件的Django Compressor引發了一個FilterError(err)

views.py:

class PlainTextView(TemplateView): 
    """ 
    Write customized settings into a special less file to overwrite the standard styling 
    """ 
    template_name = 'custom_stylesheet.txt' 

    def get_context_data(self, **kwargs): 
     context = super(PlainTextView, self).get_context_data(**kwargs) 
     try: 
      #get the newest PlatformCustomizations dataset which is also activated 
      platform_customizations = PlatformCustomizations.objects.filter(apply_customizations=True).order_by('-updated_at')[0] 
     except IndexError: 
      platform_customizations = '' 

     context.update({ 
      'platform_customizations': platform_customizations, 
     }) 
     return context 


    def render_to_response(self, context): 
     return super(PlainTextView, self).render_to_response(context, content_type='plain/text') 

模板custom_stylesheet.txt看起來有點

我被渲染一個模板視圖爲純文本視圖,像這樣創建一個動態的LESS文件喜歡這個。這需要用戶在管理後臺進入數據庫造型項:

@CIBaseColor: {{ dynamic_styles.ci_base_color }}; 
@CIBaseFont: {{ dynamic_styles.ci_base_font }}; 
...etc... 

現在我包括此動態較少的文件在我main.less文件與其它普通的靜態LESS文件。像這樣:

main.less:

@import "bootstrap_variables.less"; 

//this is the dynamicly created custom stylesheet out of the dynamic_styles app 
@import url(http://127.0.0.1:8000/dynamic_styles/custom_stylesheet.less); 

//Other styles 
@import "my_styles.less"; 

這種設置工作正常。我的數據庫中的動態變量被渲染到模板中,LESS將我所有較少的文件編譯在一起。

將代碼推送到我的生產設置中時,我編譯LESS服務器端並使用django-compressor對其進行壓縮時出現問題。

我得到以下錯誤:

FilterError: [31mFileError: 'http://127.0.0.1:8000/dynamic_styles/custom_stylesheet.less' wasn't found. 
[39m[31m in [39m/home/application/***/media/static-collected/styles/less/main.less[90m:13:0[39m 
[90m12 //this is the dynamicly created custom stylesheet out of the dynamic_styles app[39m 
13 [7m[31m[[email protected][22mimport url(http://127.0.0.1:8000/dynamic_styles/custom_stylesheet.less);[39m[27m 
[90m14 [39m[0m 

有沒有人經歷過的問題,Django的壓縮機這樣呢?它是否有像這樣動態創建的文件有問題?絕對網址可能會成爲問題嗎?

你能想到另一個解決方案獲得動態生成較少的文件與Django壓縮機工作?

回答

0

我想Django-Compressor無法讀取動態創建的較少的文件,這些文件只有在「打開」時纔可用。至少我沒有得到它的工作。此外,該文件需要在COMPRESS_ROOT上。

現在我每次保存模型時都會將較少的文件寫入磁盤。這是代碼。它仍然需要一些改進,如嘗試除外等,但它的工作原理:

def save(self, *args, **kwargs): 

    #todo add try except 
    less_file = open(os.path.join(settings.PROJECT_ROOT, 'media', 'static', "styles", "less", "custom_stylesheet.less"), "w") 
    less_file.write(render_to_string('template/custom_stylesheet.txt', {'platform_customizations': self})) 
    less_file.close() 

    super(PlatformCustomizations, self).save(*args, **kwargs) 
相關問題