gpt4 book ai didi

css - 如何根据 Django 站点中的帐户设置创建自定义 CSS "on the fly"?

转载 作者:技术小花猫 更新时间:2023-10-29 10:38:32 24 4
gpt4 key购买 nike

所以我正在编写一个基于 Django 的网站,允许用户通过管理界面选择配色方案。

我已经有了将当前请求(基于域)链接到帐户的中间件/上下文处理器。

我的问题是如何使用帐户的自定义配色方案动态提供 CSS。

我看到两个选项:

  1. 将 CSS block 添加到基本模板,以覆盖通过上下文处理器传入的带有变量的样式。

  2. 使用自定义 URL(例如“/static/dynamic/css/< website_id >/styles.css”)路由到一个 View ,该 View 获取所有必要的值并创建 css 文件。

我对这两种选择都很满意,但想知道是否还有其他人处理过类似的问题并且可以就“最佳实践”提供一些见解。

更新:我倾向于选项 2,因为我认为这将允许更好的缓存。所以它第一次是动态的,存储在内存缓存(或其他)中,并在用户更新管理站点中的设置时失效。

更新:首先,我要感谢大家迄今为止提出的建议。到目前为止,所有答案都集中在生成静态文件上。虽然这在生产中效果很好,但在开发过程中感觉像是一个巨大的负担。如果我想添加一个要设置样式的新元素,或者调整现有样式,我必须重新创建每个 css 文件。当然,这可以通过管理命令来完成,但我觉得不值得。动态地执行此操作会为每个页面加载添加 1 个或 2 个查询,这是我现阶段并不担心的事情。我需要知道的是,在某个时候我将能够缓存它而无需重写整个内容。

最佳答案

我成功地使用了选项 #2。据我所知,有 2 种不错的方法可以更新生成的静态文件:

  1. 使用类似/special_path.css?v=11452354234 的版本查询字符串,其中 v 参数是从数据库字段、memcached 中的键或其他一些持久文件生成的。版本由管理员更新,或者对于开发,如果参数是一些特殊的参数,比如 v=-1,你只会让生成不保存。一段时间后,您将需要一个进程来清理老年代。

  2. 不要使用版本查询字符串,但让它首先查找生成的文件,如果找不到,它会生成它。您可以创建一个 cron 作业或 WSGI 应用程序来查找用于开发的文件系统更改,并从您的管理面板中获取一个 Hook ,该 Hook 会在更新后删除世代。这是一个监控示例,您必须将其转换为特定于您的世代而不是 Django。 http://code.google.com/p/modwsgi/wiki/ReloadingSourceCode#Monitoring%5FFor%5FCode%5FChanges

关于css - 如何根据 Django 站点中的帐户设置创建自定义 CSS "on the fly"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3058664/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com