我差不多用Theme Selector
来完成我的Django
,但我阻止了一点:
==>我没有根据用户给出的表单结果来获取动态静态文件路径。
我将解释这个过程:
用户通过选中RadioSelect框填充Django表单。他可以选择两个选项:
两个选项对应于2个具有两种不同背景颜色的主题。 数据系统是蓝色&白色和 Cameroun 是绿色&红色。
所以,我拿起与两个主题中的一个相对应的表格结果,这些主题位于静态文件中:
|--- app1
|--- app2
├── static
│ └── Theme
│ ├── Cameroun
│ │ ├── css
│ │ │ ├── Base.css
│ │ │ ├── Base_Accueil.css
│ │ │ ├── Base_Birthcertificate.css
│ │ │ ├── Base_Configurations.css
│ │ │ ├── Base_Identity.css
│ │ │ ├── Base_Mairie.css
│ │ │ ├── Base_Recensement.css
│ │ │ └── Base_Table.css
│ │ └── images
│ │ ├── admin.png
│ │ ├── chantier.jpeg
│ │ ├── chantier.png
│ │ ├── employe?\201.png
│ │ ├── logo.png
│ │ ├── maire.png
│ │ ├── officier.png
│ │ ├── stats.jpeg
│ │ └── visiteur.png
│ └── Datasystems
│ ├── css
│ │ ├── Base.css
│ │ ├── Base_Accueil.css
│ │ ├── Base_Birthcertificate.css
│ │ ├── Base_Configurations.css
│ │ ├── Base_Identity.css
│ │ ├── Base_Mairie.css
│ │ ├── Base_Recensement.css
│ │ └── Base_Table.css
│ └── images
│ ├── admin.png
│ ├── chantier.jpeg
│ ├── chantier.png
│ ├── employe?\201.png
│ ├── logo.png
│ ├── maire.png
│ ├── officier.png
│ ├── stats.jpeg
│ └── visiteur.png
在我的settings.py文件中,我有这样的静态路径:
STATIC_URL = '/static/'
STATICFILES_DIRS = (os.path.join(BASE_DIR, "/Etat_civil/static/Theme/"),)
我正在使用templates_tag,但我不确定我的函数是否可以这样写:
from django import template
from Configurations.models import Theme
register = template.Library()
def GetTheme(Theme):
mytheme = Theme.objects.all().last()
return mytheme in Theme.objects.all()
在我的模板中,我想编写静态路径作为动态路径取决于用户选择的变量主题:
<!DOCTYPE html>
<html>
<head>
{% load staticfiles %}
{% load user_tags %}
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
{% if mytheme == 'Datasystems' %}
<link rel="stylesheet" type="text/css" href="{% static 'Datasystems/css/Base_Accueil.css' %}"/>
{% elif mytheme == 'Cameroun' %}
<link rel="stylesheet" type="text/css" href="{% static 'Cameroun/css/Base_Accueil.css' %}"/>
{% endif %}
etc ....
我有点失落。我认为我的过程可以很好地工作,但也许某些东西不是用pythonic方式写的东西。
我试着简明扼要。
先谢谢你
答案 0 :(得分:4)
您可以使用get_static_prefix
template tag半手动执行此操作:
<link rel="stylesheet" type="text/css" href="{% get_static_prefix %}{{ mytheme }}/css/Base_Accueil.css"/>
答案 1 :(得分:1)
我根据不同的答案找到了解决方案,我将解释我所做的事情。此解决方案适用于我Django 1.10
并使用context_processors
来执行此操作。
第一步:修改settings.py文件
我修改了我的settings.py文件,更准确地说是TEMPLATES PART
。目前,此修改仅适用于Accueil Application,但我会将此过程扩展到所有应用程序:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')],
'APP_DIRS': True,
'OPTIONS': {
'debug' : DEBUG,
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'myapp.context_processors.context_processors_name_function'],
},
},
]
使用以下示例,最后一行将按如下方式编写:
# 'myapp.context_processors.context_processors_name_function'
'Accueil.context_processors.GetTheme'
第二步:在我的应用程序中创建context_processors.py文件
我在我的应用程序部分创建了这个新文件。如上所述,它将扩展到其他应用程序:
from django.conf import settings
from Configurations.models import Theme
def GetTheme(request):
return {'mytheme' : Theme.objects.values_list('favorite_theme').last()[0].encode("ascii")}
第三步:修改我的Base.html for Accueil应用程序
我有一个管理我的Accueil应用程序的基本模板。我必须写这样的标题是我想要考虑context_processors变量:
<link rel="stylesheet" type="text/css" href="{% get_static_prefix %}{{ mytheme }}/css/Base_Accueil.css"/>
通过这种方式,我可以从Theme
表中选取最后一行,并将变量放在{{ mytheme }}
中。然后,我创建了我的好主题网址。现在,Django将搜索好的存储库中的所有css文件。
从现在开始,当我在处方集中填写两个主题之间的选择:Datasystems和Cameroun并验证我的选择时,新主题会被考虑,并且由于我的主题选择而导致全局背景颜色发生变化!
我的回答几乎会帮助其他程序员!
谢谢大家:)