Django的压缩机动态LESS文件提出了一个FilterError(ERR)(Django Com

2019-10-17 07:27发布

我不得不拿出相当复杂的设置,使用户基于数据库的时尚选择。 用户输入的风格(如背景颜色,字体,等等)在Django管理后台。

我被渲染模板视图像这样的纯文本视图中创建一个动态的LESS文件:

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看起来有点像这样。 这需要用户在管理后台进入数据库造型条目:

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

现在,我包括此动态减档与其他普通的静态LESS文件我main.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的压缩机压缩它,当我有一个问题。

我得到以下错误:

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[1m@[22mimport url(http://127.0.0.1:8000/dynamic_styles/custom_stylesheet.less);[39m[27m
[90m14 [39m[0m

有没有人经历过Django的压缩机这样的问题呢? 是否有这样的动态创建的文件的问题? 请问绝对URL是一个问题?

你能想到另一种解决方案获取动态生成的文件少用Django的压缩机工作?

Answer 1:

我猜Django的压缩机无法读取动态创建的减档,其仅适用“上动态”如果你打的网址。 至少我没有得到它的工作。 另外,文件需要在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)


文章来源: Django Compressor with dynamic LESS file raises a FilterError(err)