2017-11-08 4 views
0

Flaskに画像パスに応じて質問があります。 私は、path - '/animals/sometype/image.jpg'を含む、画像に関するすべての必要な情報を含むDBモデルImageを持っています。Flask-Admin |画像への経路を修正するには

私はFlask-adminモジュールを使用していますが、問題は編集モードでは画像へのパスが間違っています。 は、ここでは、コードです:列の場合

class ImageView(ModelView): 
    edit_template = 'image_edit.html' 

    def _list_thumbnail(view, context, model, name): 
     if not model.path: 
      return '' 
     return Markup('<img src="%s">' % url_for('static', filename=('images' + model.path))) 

column_formatters = { 
    'path': _list_thumbnail 
} 

form_extra_fields = { 
    'path': form.ImageUploadField('Image', base_path='static/images', url_relative_path='images/') 
} 

は、パスをフォーマッタ正しいですが、余分なフィールドに404エラーが発生し、間違っている:http://127.0.0.1:5000/static//animals/birds/the_bird-wallpaper-1366x768.jpg

どのように私はこの問題を解決することができますか? また、カスタム編集テンプレートに画像を渡すことを考えていましたが、Flask-Adminでどのように行うのか分かりません。

+0

はイメージですか?それは静的フォルダにありますか?どのパスからでも画像にアクセスできますか?それは知っておくと便利な道です。 –

+0

すべてのイメージは、プロジェクトのルートにある 'static/images'にあり、多くのフォルダは 'images'ディレクトリにあります。 – Cheslav

+0

'http:// localhost:5000/static/images/folder/image-you-know-exists'には実際にイメージが表示されていますか? –

答えて

0

ImageUploadFieldを使わずにFlask-adminの画像を編集ビューに渡す方法が見つかりました。解決策は簡単ですが、私が必要とするのはDBから画像IDを渡してJinjaテンプレートで使用することだけです。

class ImageView(ModelView): 
edit_template = 'image_edit.html' 

@expose('/edit/', methods=['GET', 'POST']) 
def edit_view(self): 
    id = request.args.get('id') 
    self._template_args['image'] = db.session.query(Image.path).filter(Image.id == id).first()[0] 
    return super(ImageView, self).edit_view() 

とHTMLテンプレート:どのようなURLで

{% extends "admin/model/edit.html" %} 
{% block body %} 
    <img src=/static/images/{{ image }}/> 
    {{ super() }} 
{% endblock %} 
関連する問題