2017-02-22 4 views
1

とダイナミックstaticfilesパスハンドル私はほとんどDjangoと私のTheme Selectorを完了するために克服していますが、私は一点にブロックしています:ジャンゴ

==>私はに応じてダイナミックstaticfilesパスを取得するには届きませんユーザーが与えたフォーム結果。

私は、プロセスを説明します:

ユーザーはRadioSelectボックスをチェックして、Djangoのフォームを埋めます。

  • データシステム
  • カメルーン

両方のオプションが2貴様背景色を持っている2つのテーマに対応しています。彼は2つのオプションの選択肢を持っています。 データシステムは&白とカメルーンは緑&赤青です。

だから、私は静的なファイルに位置している両方のテーマの1つに対応するフォーム結果拾う:

:私のsettings.pyファイルで

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

を、私はこのような静的なパスを持っています

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() 

私のテンプレートでは、静的パスを動的パスとして記述するには、ユーザーが選択した変数のテーマによって異なります。

私は少し失われています。私のプロセスはかなりうまくいくかもしれないと思うが、多分何かがpythonicなやり方で書かれていないかもしれない。

私は簡潔で具体的にしようとしました。

あなたはこの半手動で行うにはget_static_prefix template tagを使用することができ、事前

答えて

4

でありがとう:

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

非常に悪いCSSスタイルシートを取得しています。これは、template.htmlファイルに正しいstaticfilesパスが表示されないことを意味します。 template_tagsファイルの 'GetTheme'関数が間違っている可能性はありますか? – Deadpool

+0

さて、そうです。そのコードはあまり意味を持ちませんし、ブール値を返します(あなたが今取り込んだテーマは常にTheme.objects.all()内にあるので、常に真です)。あなたは正確に何をしようとしていますか? –

+0

私は 'id'、' favorite_theme'という2つの要素で 'Theme'という名前のテーブルを持っています。私がThemeフォームに記入するたびに、このテーブルに行を追加します(現在まで)。したがって、選択されたテーマを取得するために、私はテーブルの最後の行をピックアップしています。この行では、 'Datasystems'または' Cameroun'である 'favorite_theme'を抽出し、この変数は私のstaticfilesのパスになければなりません。 – Deadpool

1

私は別の回答に基づいて解決策を見つけたと私は私がやったかを説明します。この解決法はDjango 1.10と私のために働き、それを行うにはcontext_processorsを使用してください。

第1工程:settings.pyファイルを変更し

私は私のsettings.pyファイルを変更し、より正確TEMPLATES PART。現時点では、この変更はちょうど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'], 
     }, 
    }, 
] 

次の例では、最後の行は次のように書き込まれます。

# 'myapp.context_processors.context_processors_name_function' 
'Accueil.context_processors.GetTheme' 

2番目のステップ:私のアプリケーションで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")} 

第三ステップ:上記のように、それは他のアプリケーションに拡張されます、私は私のAccueilのアプリケーションを管理する基本テンプレートを持っているAccueilのアプリケーション

のための私のBase.htmlを変更します。私はこのようなヘッダを記述する必要があり、私は変数context_processorsアカウント撮りたいされています。この方法を通じて

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

、私は私のThemeテーブルから最後の行をピックアップし{{ mytheme }}で変数を置くことができます。その後、私は良いテーマのURLを作成しました。これで、Djangoは良いリポジトリ内のすべてのcssファイルを検索します。

今から私は2つのテーマの選択と処方を埋める際、:データシステムとカメルーンと私の選択を検証し、新しいテーマが原因の私のテーマの選択にアカウントとグローバル背景色の変更を取っています!

うまくいけば私の答えは他のプログラマーに役立つでしょう!

ありがとうございました:)