2017-11-08 7 views
0

플라스크에 이미지 경로에 따라 질문이 있습니다. 나는 path - '/animals/sometype/image.jpg'를 포함하여 이미지에 대한 모든 필요한 정보를 담고있는 DB 모델 Image를 가지고있다.플라스크 - 관리자 | 이미지 경로를 수정하는 방법

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

모든 이미지는 '정적/이미지'의 프로젝트 루트에 있고 '이미지'디렉토리의 많은 폴더에 있습니다. – 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 %}