Python 在Django中更改视图中的css样式
如果有一个明显的答案,我会提前道歉,我仍在学习Django的诀窍 我正在创建一个网站,其中有6个预先确定的主题没有存储在数据库中 英语,公民学,文学,语言,历史,圣经 每个主题都将与一种独特的颜色相关联 我有一个subject.html页面的模板和一个从url appname/subject/subjectname加载的视图 我需要做的是根据访问的主题应用特定的css来设置页面样式。例如,如果用户转到appname/subject/english,我希望页面主题为英语 我希望我已经说清楚了,我也想知道是否有一种方法可以将实际的css代码添加到样式表中,而不必从后端逐个更改属性Python 在Django中更改视图中的css样式,python,html,css,django,Python,Html,Css,Django,如果有一个明显的答案,我会提前道歉,我仍在学习Django的诀窍 我正在创建一个网站,其中有6个预先确定的主题没有存储在数据库中 英语,公民学,文学,语言,历史,圣经 每个主题都将与一种独特的颜色相关联 我有一个subject.html页面的模板和一个从url appname/subject/subjectname加载的视图 我需要做的是根据访问的主题应用特定的css来设置页面样式。例如,如果用户转到appname/subject/english,我希望页面主题为英语 我希望我已经说清楚了,我也
非常感谢 您可以通过多种方式实现这一点。
通常,您需要从视图返回一些变量到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>