css - Django 中的 GUI CSS 选择器

标签 css ajax django django-templates

我想添加一个让用户选择“界面主题”的功能:

我在我的 base.html 中添加了一个下拉菜单,这样用户就可以更改所有模板中的主题。

我使用 {% extends 'base.html'%} 为我的所有 html 模板使用 base.html。

'#我所有的观点都需要这个:

theme = MyThemeModel.objects.filter(user=self.request.user).first().theme

return render(request, 'mytemplate.html', {'theme': theme})

'#base.html

{% if theme = 'theme 1'%}
<link rel="stylesheet" type="text/css" href="{% static 'theme1.css' %}" />
{% else if theme = 'theme 2'%}
<link rel="stylesheet" type="text/css" href="{% static 'theme2.css' %}" />
{% else if theme = 'theme 3'%}
<link rel="stylesheet" type="text/css" href="{% static 'theme3.css' %}" />
{% endif%}

我正在考虑使用 AJAX,这样我就可以采用用户选择的主题,但是我需要在每个现有 View 中添加一个功能,我不想重复那么多代码。

有更简单的方法吗?

最佳答案

您可以使用 Django 的中间件将您的 theme 变量添加到每个请求。请记住,您当前检索用户主题的方式将为每个请求添加额外的数据库查询。

我会将用户的主题保存在 session 变量中。您的中间件可以检查主题变量是否已设置,只有在未设置时才从数据库中检索它。你的中间件看起来像这样:

if not request.session.theme:
    request.session.theme = MyThemeModel.objects.filter(user=self.request.user).first().theme

然后您可以在所有 View 和模板中访问 request.session.theme

我想问的另一个问题是:为什么要在 MyThemeModel 而不是 User 模型上存储哪个用户正在使用哪个主题?如果您将它存储在您的用户模型中,您可以简单地使用 request.user.theme 而您根本不需要中间件。

关于css - Django 中的 GUI CSS 选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50763765/

相关文章:

django - 无法使用 View 名称 "itemimages-detail"解析超链接关系的 URL

HTML 文本覆盖图像

css - SASS mixin中的背景位置问题

jquery - AJAX 调用可以正常运行 MySQL 删除查询,但不会隐藏从页面中删除的表行

php - 使用 JQuery/AJAX 将 html 表单数据作为 JSON 发送到 PHP

python 粘贴不显示错误跟踪

html - 书签布局很奇怪

css - 奇怪的清除栏

javascript - 从外部服务器检索 json 数据

python - 将 Mezzanine 集成到现有 Django 项目中