Python 使用Django处理动态静态文件路径

Python 使用Django处理动态静态文件路径,python,html,django,Python,Html,Django,我几乎要用Django完成我的主题选择器,但我在一点上受阻: ==>我不是根据用户给出的表单结果来获取动态静态文件路径的 我会解释这个过程: 用户通过选中RadioSelect框来填写Django表单。他有两个选择: 数据系统 喀麦隆 两个选项都对应于两个具有两种不同背景颜色的主题数据系统为蓝色和白色,喀麦隆为绿色和红色 因此,我选择了与静态文件中两个主题之一对应的表单结果: |--- app1 |--- app2 ├── static │   └── Theme │   ├── C

我几乎要用
Django
完成我的
主题选择器
,但我在一点上受阻:

==>我不是根据用户给出的表单结果来获取动态静态文件路径的

我会解释这个过程:

用户通过选中RadioSelect框来填写Django表单。他有两个选择:

  • 数据系统
  • 喀麦隆
两个选项都对应于两个具有两种不同背景颜色的主题数据系统为蓝色和白色,喀麦隆为绿色和红色

因此,我选择了与静态文件中两个主题之一对应的表单结果:

|--- 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
在my settings.py文件中,我有如下静态路径:

STATIC_URL = '/static/'
STATICFILES_DIRS = (os.path.join(BASE_DIR, "/Etat_civil/static/Theme/"),)
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()
# 'myapp.context_processors.context_processors_name_function'
'Accueil.context_processors.GetTheme'
我正在使用templates_标记,但我不确定我的函数是否可以这样编写:

STATIC_URL = '/static/'
STATICFILES_DIRS = (os.path.join(BASE_DIR, "/Etat_civil/static/Theme/"),)
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()
# 'myapp.context_processors.context_processors_name_function'
'Accueil.context_processors.GetTheme'
在我的模板中,我希望将静态路径写为动态路径,这取决于用户选择的变量主题:

<!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 ....

{%load staticfiles%}
{%load user_tags%}
{%如果mytheme=='数据系统'%}
{%elif mytheme=='Cameroun'}
{%endif%}
等
我有点迷路了。我认为我的过程可以很好地工作,但可能有些东西不是以python的方式写的,或者其他什么东西

我尽量简洁具体

通过advance向您表示感谢

您可以使用来半手动执行此操作:

<link rel="stylesheet" type="text/css" href="{% get_static_prefix %}{{ mytheme }}/css/Base_Accueil.css"/>

您可以使用来半手动执行此操作:

<link rel="stylesheet" type="text/css" href="{% get_static_prefix %}{{ mytheme }}/css/Base_Accueil.css"/>

我根据不同的答案找到了解决方案,我将解释我所做的。这个解决方案适用于我使用的
Django 1.10
,并使用
context\u处理器来实现这一点

第一步:修改settings.py文件

我修改了settings.py文件,更准确地说是
模板部分
。目前,此修改仅适用于Accueil应用程序,但我将此过程扩展到所有应用程序:

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'],
        },
    },
]
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")}
在下面的示例中,最后一行将这样写:

STATIC_URL = '/static/'
STATICFILES_DIRS = (os.path.join(BASE_DIR, "/Etat_civil/static/Theme/"),)
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()
# 'myapp.context_processors.context_processors_name_function'
'Accueil.context_processors.GetTheme'
第二步:在我的应用程序中创建context_processors.py文件

我在我的应用程序部分创建了这个新文件。如上所述,它将扩展到其他应用程序:

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'],
        },
    },
]
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")}
第三步:修改Accueil应用程序的my Base.html

我有一个管理Accueil应用程序的基本模板。我必须这样写标题,因为我想考虑context\u processors变量:

 <link rel="stylesheet" type="text/css" href="{% get_static_prefix %}{{ mytheme }}/css/Base_Accueil.css"/>

通过这种方式,我可以从
主题
表中选取最后一行,并将变量放入
{{mytheme}
。然后,我创建了我的好主题url。现在,Django将搜索好的存储库中的所有css文件

从现在起,当我在两个主题(数据系统和Cameroun)之间选择并验证我的选择时,将考虑新主题,并且由于我的主题选择,全球背景颜色将发生变化

希望我的回答能帮助其他程序员


谢谢大家:)

我根据不同的答案找到了解决方案,我将解释我所做的。这个解决方案适用于我使用的
Django 1.10
,并使用
context\u处理器来实现这一点

第一步:修改settings.py文件

我修改了settings.py文件,更准确地说是
模板部分
。目前,此修改仅适用于Accueil应用程序,但我将此过程扩展到所有应用程序:

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'],
        },
    },
]
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")}
在下面的示例中,最后一行将这样写:

STATIC_URL = '/static/'
STATICFILES_DIRS = (os.path.join(BASE_DIR, "/Etat_civil/static/Theme/"),)
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()
# 'myapp.context_processors.context_processors_name_function'
'Accueil.context_processors.GetTheme'
第二步:在我的应用程序中创建context_processors.py文件

我在我的应用程序部分创建了这个新文件。如上所述,它将扩展到其他应用程序:

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'],
        },
    },
]
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")}
第三步:修改Accueil应用程序的my Base.html

我有一个管理Accueil应用程序的基本模板。我必须这样写标题,因为我想考虑context\u processors变量:

 <link rel="stylesheet" type="text/css" href="{% get_static_prefix %}{{ mytheme }}/css/Base_Accueil.css"/>

通过这种方式,我可以从
主题
表中选取最后一行,并将变量放入
{{mytheme}
。然后,我创建了我的好主题url。现在,Django将搜索好的存储库中的所有css文件

从现在起,当我在两个主题(数据系统和Cameroun)之间选择并验证我的选择时,将考虑新主题,并且由于我的主题选择,全球背景颜色将发生变化

希望我的回答能帮助其他程序员


谢谢大家:)

我得到了一个非常糟糕的css样式表。这意味着我的template.html文件看不到正确的staticfiles路径。模板标签文件中的
GetTheme
函数是否有可能出错;这段代码没有多大意义,返回一个布尔值(这始终是真的,因为您刚刚检索到的主题将始终位于theme.objects.all()中)。你到底想在那里做什么?好的。我有一个名为
Theme
的表,它由两个部分组成:
id
favorite\u Theme
。每次填写主题表单时,我都会在此表中添加一行(直到现在)。所以为了得到choosen主题,我选择了表中的最后一行。在这一行中,我提取了
favorite_主题
,它是
Datasystems
Cameroun
,这个变量必须在我的staticfiles路径中。好的,那么为什么不返回
mytheme
?在
比较中,
的意义是什么?如果我只返回
mytheme
,我的django网站中会得到一个没有css样式表的模板页面。所以我假设有什么不对劲,或者我错过了什么。如何打印
href
?这将是一种检查方法?我得到了一个非常糟糕的css样式表。这意味着我的template.html文件