2013-07-30 68 views
1

当用户在使用Django的选择框中选择不同的选项时,是否可以使页面的一部分使用完全不同的CSS文件?使用select动态更改样式

我基本上试图做的是添加一个主题选择器到页面。

谢谢。

回答

-1

这应该与JavaScript,而不是Django。看看用Jquery做到这一点。

编辑:How do I switch my CSS stylesheet using jQuery?

+0

我并不同意这种看法;在Django中这样做很好。 1)优雅的降级2)使用会话来存储主题失去了配置和存储单个网站的主题的能力 –

+0

另外,在移动或缓慢的互联网用户访问未被缓存的页面将会有相当刺激的经验;他们会看到默认主题闪光灯,然后改变为由js –

2

要建立在Django一个主题选择使用的形式来获取用户的样式表的选择和存储风格选择在会话中。有效形式应该执行:

request.session['style'] = the_style_choice 

https://docs.djangoproject.com/en/1.5/topics/http/sessions/

使用上下文处理器每个请求返回正确的样式表settings.py:

TEMPLATE_CONTEXT_PROCESSORS = (
    ... 
    "MyContextProcessor.get_style", 
) 

在MyContextProcessor.py

def get_style(request): 
    if 'style' in request.session: 
     style = request.session.get('style')     
    else: 
     style = 'some_style.css' 
     request.session['style'] = style 
    return {'style': style, } 

https://docs.djangoproject.com/en/1.5/ref/templates/api/#subclassing-context-requestcontext

在你的基础模板添加样式:

{{ style }} 

您可以使用Ajax的形式给用户一个流畅的体验:https://docs.djangoproject.com/en/1.5/topics/class-based-views/generic-editing/#ajax-example

+0

@bodger加载的样式:我的回答有帮助吗?反馈表示赞赏。 – allcaps

+0

这是非常聪明,辉煌的解决方案。就我个人而言,我将与django网站一起使用此网站,并将其与site_id的关系存储为1-1。 –