Python 在Django中更改视图中的css样式

Python 在Django中更改视图中的css样式,python,html,css,django,Python,Html,Css,Django,如果有一个明显的答案,我会提前道歉,我仍在学习Django的诀窍 我正在创建一个网站,其中有6个预先确定的主题没有存储在数据库中 英语,公民学,文学,语言,历史,圣经 每个主题都将与一种独特的颜色相关联 我有一个subject.html页面的模板和一个从url appname/subject/subjectname加载的视图 我需要做的是根据访问的主题应用特定的css来设置页面样式。例如,如果用户转到appname/subject/english,我希望页面主题为英语 我希望我已经说清楚了,我也

如果有一个明显的答案,我会提前道歉,我仍在学习Django的诀窍

我正在创建一个网站,其中有6个预先确定的主题没有存储在数据库中 英语,公民学,文学,语言,历史,圣经

每个主题都将与一种独特的颜色相关联

我有一个subject.html页面的模板和一个从url appname/subject/subjectname加载的视图

我需要做的是根据访问的主题应用特定的css来设置页面样式。例如,如果用户转到appname/subject/english,我希望页面主题为英语

我希望我已经说清楚了,我也想知道是否有一种方法可以将实际的css代码添加到样式表中,而不必从后端逐个更改属性


非常感谢

您可以通过多种方式实现这一点。
通常,您需要从视图返回一些变量到html,并根据此变量选择一个样式表,如果您的变量名称与样式表名称匹配,您可以执行{{variable}}.css,如果不匹配,您可以使用JQuery。

在模板中,您可以使用条件添加css,如下所示:

<div class="{% if subject=='civics' %}civic-class{% endif %}"></div>
然后在模板中:

{% extends template_base %}  # at the top

希望这有帮助,如果你使用基于类的视图,逻辑也是一样的。

Django的视图不负责演示,当然是模板和css等的责任。现在假设您有相同的视图服务于不同的主题,视图显然需要知道我从作为参数传递给视图的url的捕获部分中假设的当前主题,因此它可以轻松地将此信息传递给模板,而模板反过来可以使用它向body标记添加特定于主题的类。然后,您只需相应地编写css

例如:

# urls.py

patterns = urlpatterns('',
    #...
    url(r'whatever/(P?<subject>[a-z-]+>)/$', 'myviews.index', ...),
    )

# myviews.py
def index(request, subject):
    # do whatever
    context = {
       # whatever else
       'subject':subject
       }
   return render(request, "whatever/index.html", context)

# whatever/index.html
<html>
   # headers etc
   <body class="something {{ subject }} etc">
     # whatever here
   </body>
</html>

有几种方法可以做到这一点。不同的模板/子模板、模板中的条件、使用CSS文件的主题名称并将其传递给模板等。这取决于项目的其他部分看起来是什么样的,最简单和最方便的。
# urls.py

patterns = urlpatterns('',
    #...
    url(r'whatever/(P?<subject>[a-z-]+>)/$', 'myviews.index', ...),
    )

# myviews.py
def index(request, subject):
    # do whatever
    context = {
       # whatever else
       'subject':subject
       }
   return render(request, "whatever/index.html", context)

# whatever/index.html
<html>
   # headers etc
   <body class="something {{ subject }} etc">
     # whatever here
   </body>
</html>