web-dev-qa-db-ja.com

Django adminおよびサムネイル画像の表示

Django adminでサムネイル画像を表示しようとしていますが、画像へのパスのみが表示され、レンダリングされた画像は表示されません。何が間違っているのかわかりません。

サーバーメディアのURL:

from Django.conf import settings
(r'^public/(?P<path>.*)$', 'Django.views.static.serve',{'document_root': settings.MEDIA_ROOT}),

機能モデル:

def image_img(self):
        if self.image:
            return u'<img src="%s" />' % self.image.url_125x125
        else:
            return '(Sin imagen)'
        image_img.short_description = 'Thumb'
        image_img.allow_tags = True

admin.py:

class ImagesAdmin(admin.ModelAdmin):

    list_display= ('image_img','product',) 

そして結果:

<img src="http://127.0.0.1:8000/public/product_images/6a00d8341c630a53ef0120a556b3b4970c.125x125.jpg" />
47
Asinox

これは photologue のソースにあります(_models.py_を参照して、無関係なものを削除するように少し調整されています):

_def admin_thumbnail(self):
    return u'<img src="%s" />' % (self.image.url)
admin_thumbnail.short_description = 'Thumbnail'
admin_thumbnail.allow_tags = True
_

_list_display_ビットも同じように見えますが、私はそれが機能することを知っています。私が疑うように見える唯一のものはあなたのインデントです-_image_img_コードの最後の_models.py_で始まる2行はdef image_img(self):のレベルである必要があります:

_def image_img(self):
    if self.image:
        return u'<img src="%s" />' % self.image.url_125x125
    else:
        return '(Sin imagen)'
image_img.short_description = 'Thumb'
image_img.allow_tags = True
_
69
Dominic Rodger

更新v。1.9

In Django v.1.9

image_tag.allow_tags = True

廃止されたため、format_html()、format_html_join()、またはmark_safe()を代わりに使用する必要があります

したがって、model.pyは次のようになります。

...
def image_img(self):
    if self.image:
        return marksafe('<img src="%s" />' % self.image.url_125x125)
    else:
        return '(Sin imagen)'
    image_img.short_description = 'Thumb'

そして、あなたのadmin.py追加:

list_display= ('image_img','product',)
readonly_fields = ('image_img',)

そして、admin.py追加で管理パネルの「編集モード」に追加するため:

fields = ( 'image_img', )
10
palamunder

モデルにメソッドを追加します(models.py):

def image_tag(self):
    return u'<img src="%s" />' % <URL to the image>
image_tag.short_description = 'Image'
image_tag.allow_tags = True

modelAdmin(admin.py) 追加:

readonly_fields = ('image_tag',)
7
Avinash Garg

@dominicに追加して、複数のモデルでこれを使用したかったので、表示する画像を入力して、各モデルで呼び出すことができる関数を作成しました。

たとえば、私が持っている1つのアプリで:

from Django.contrib import admin

from .models import Frontpage
from ..admin import image_file


class FrontpageAdmin(admin.ModelAdmin):
    list_display = ('image_thumb', ...)

    image_thumb = image_file('obj.image()') 

admin.site.register(Frontpage, FrontpageAdmin)

with imageは、画像を返すFrontpageの関数です。

私が持っている別のアプリで:

from Django.contrib import admin

from .models import Exhibition
from ..admin import image_file


class ExhibitionAdmin(admin.ModelAdmin):
    list_display = ('first_image_thumb', ...)

    first_image_thumb = image_file('obj.related_object.image',
                                   short_description='First Image')

admin.site.register(Exhibition, ExhibitionAdmin)

これにより、画像オブジェクトとshort_descriptionボイラープレートを別のファイルに保持します。機能は次のとおりです。

from sorl.thumbnail import get_thumbnail
from Django.conf import settings


def image_file(image, short_description='Image'):
    def image_thumb(self, obj):
        image = eval(image_thumb.image)
        if image:
            thumb = get_thumbnail(image.file, settings.ADMIN_THUMBS_SIZE)
            return u'<img width="{}" height={} src="{}" />'.format(thumb.width, thumb.height, thumb.url)
        else:
            return "No Image"

    image_thumb.__dict__.update({'short_description': short_description,
                                 'allow_tags': True,
                                 'image': image})
    return image_thumb
6
saul.shanabrook

allow_tagsは廃止されました なので、format_html 関数。サンプルコードは次のようになります。

models.pyファイル:

class TestAdminModel(models.Model):

    img = models.URLField()

admin.pyファイル:

from Django.utils.html import format_html

class TestAdmin(admin.ModelAdmin):
    list_display = ["id", "img", "thumbnail"]

    def thumbnail(self, obj):
        return format_html('<img src="{}" style="width: 130px; \
                           height: 100px"/>'.format(obj.img))

    thumbnail.short_description = 'thumbnail'

admin.site.register(models.TestAdminModel, TestAdmin)

結果は次のようになります。 enter image description here

詳細は Django documentation。 から見ることができます。

1
ramwin

Django-imagekit を使用すると、次のような任意の画像を追加できます。

from imagekit.admin import AdminThumbnail

@register(Fancy)
class FancyAdmin(ModelAdmin):
    list_display = ['name', 'image_display']
    image_display = AdminThumbnail(image_field='image')
    image_display.short_description = 'Image'

    # set this to also show the image in the change view
    readonly_fields = ['image_display']
1
Risadinha