【问题标题】:GUI CSS picker in DjangoDjango 中的 GUI CSS 选择器
【发布时间】:2018-11-18 16:46:49
【问题描述】:

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

我在 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,这样我就可以采用用户选择的主题,但是我需要在每个现有视图中添加一个函数,并且我不想重复那么多代码。

有更简单的方法吗?

【问题讨论】:

    标签: css ajax django django-templates


    【解决方案1】:

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

    我会将用户的主题保存在会话变量中。您的中间件可以检查是否设置了主题变量,并且只有在未设置时才从数据库中检索它。你的中间件应该是这样的:

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

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

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

    【讨论】:

    • 中间件似乎是我所需要的。我添加了一个新模型,因为我不知道我可以在用户模型中添加一个字段。那会有很大帮助!谢谢!
    • @PaulaYoung 扩展 Django 的用户模型确实有点棘手。很高兴我能帮上忙。如果您对此答案感到满意,请将其标记为已接受:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-27
    • 2012-02-18
    • 2022-01-22
    • 2018-12-04
    • 1970-01-01
    • 1970-01-01
    • 2017-07-05
    相关资源
    最近更新 更多