2017-01-17 50 views
2

モデルLanguageがあります。言語オブジェクトはDjango-adminまでAdminを作成します。彼らは適切なフラグファイルをドロップダウンメニューから選択する必要があります。Django FilePathFieldが相対パスで動作しない

問題は、プロジェクトを展開するときに選択肢がないことです。

静的ファイルをデプロイする前に収集されているので、私はこのパスを設定しようとしました:

flag = models.FilePathField(path='static/img/flags/550px',default='') 

しかし、あなたが見ることができるように、それが何かを見つけることができません。

enter image description here

私はこれを行う場合、私は、フラグから選択することができます。

flag = models.FilePathField(path=settings.BASE_DIR+'/static/img/flags/550px',default='') 

をしかし、それはそれは、絶対パスを返すためだけlanguage.flagを呼び出して動作しません。私の心に来る唯一の解決策はpath切断「/ホーム/ジャンゴ/ MyProjectと/」を取り除きますが、私はもしわからないプロパティを作成することです

<img src="/home/django/MyProject/static/img/flags/550px/ar.png"> 

<img src = "{{ language.flag }}"> 

はこれを作りますそれは良いアイデアです。

良い方法がありますか?

class Language(models.Model): 
    shortcut = models.CharField(max_length=40, 
           help_text=_('Shortcut of the language'), 
           unique=True) 

    name = models.CharField(max_length=40, 
          help_text=_('Name of the language'), 
          unique=True, verbose_name=_("Language")) 

    flag = models.FilePathField(path='static/img/flags/550px',default='/static/img/icons/check-icon.png') 

    def __str__(self): 
     return self.name 

EDIT:

Admin.py:

from django.contrib import admin 
from models import Language 

admin.site.register(Language) 

答えて

1

FilePathField.path
必須。 絶対このFilePathFieldから選択肢を得るディレクトリへのファイルシステムパス。例: "/ home/images"。

重点鉱山。

ここで絶対パスを使用すると、テンプレートは実際に相対パスを生成します。あなたがFilePathFieldで設定したパスと、互いに矛盾すると主張するパスが何であるかは分かりません。しかし、私はテンプレートが相対パスを与えることを保証することができます。

バグ(おそらく)の場合、管理者が相対パスではなくフラグオブジェクトに完全なパスを保存しているかどうかは不明です。だから私は私が行うとき、その時点

+0

ないでストリッピングを行うに管理、保存モデルメソッドをオーバライドするために、1つのオプションプロパティを

@property flag_path(self): return self.flag.replace(settings.BASE_DIR,'') 

他のオプションがされている使用して推測{{language.flag}}で私は/ home/django/myproject/static /を取得しますが、私は/ static/....が必要なので、何をすべきか分かりません。 –

+0

まず、質問の不一致を修正してください。その後、管理者を追加します。私はあなたがそこに問題を抱えている可能性があると思う。 – e4c5

+0

何が矛盾しているのですか?私は道を訂正しました。問題は、FilePathFieldを使用すると、絶対パスが設定されている場合(BASE_DIR +/static/....)フラグから選択できることです。しかし、私がフラグからこのように選択すると、{{language.flag}}は/ home/django/myproject/static /を返しますが、ちょうど/静的/ ....が必要です。 –

関連する問題