2009-09-06 10 views
46

मैं Django व्यवस्थापक में थंबनेल छवियों को दिखाने की कोशिश कर रहा हूं, लेकिन मैं केवल छवियों का पथ देख सकता हूं, लेकिन प्रस्तुत छवियों को नहीं। मुझे नहीं पता कि मैं क्या गलत कर रहा हूं।Django व्यवस्थापक और थंबनेल छवियों को दिखा रहा है

सर्वर मीडिया यूआरएल:

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

उत्तर

67

यह (models.py देखते हैं, थोड़ा अप्रासंगिक सामान को हटाने के लिए अनुकूलित) photologue के लिए स्रोत में है:

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

list_display सा भी समान लगता है, और मुझे पता है कि काम करता है। केवल एक चीज है कि मेरे पास संदिग्ध लग रहा है अपने खरोज है - अपने models.py कोड के अंत में image_img शुरुआत दो पंक्तियों 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 
+0

+1 इंडेंटेशन समस्या के लिए +1। –

+0

हां, इंडेंटेशन था, धन्यवाद – Asinox

+1

जहां आप उस image_img फ़ंक्शन को डालते हैं? मैंने इसे 'क्लास इमेजएडमिन (admin.ModelAdmin) के तहत लिखा है:' लेकिन यह मुझे त्रुटि देता है 'रेंडर करते समय पकड़ा गया टाइपर: image_img() बिल्कुल 1 तर्क लेता है (2 दिया गया) ' – brsbilgic

6

@dominic करने पर जोड़ा जा रहा है, मैं उपयोग करना चाहता था यह कई मॉडलों में है, इसलिए मैंने एक ऐसा फ़ंक्शन बनाया जिसे मैं प्रत्येक मॉडल में कॉल कर सकता हूं, छवि को प्रदर्शित करने के लिए इनपुट कर रहा हूं।

एक ऐप्लिकेशन में उदाहरण के लिए मेरे पास है:

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) 

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 
7

अपने मॉडल में एक विधि जोड़ें (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',) 
+0

पायथन मानक plz के लिए प्रारूप ... –

+1

भूलना न भूलें फ़ील्ड में image_tag भी जोड़ें: 'फ़ील्ड = ['image_tag', ...]' –

9

अद्यतन वी 1.9

ध्यान दें कि Django v.1.9

में
image_tag.allow_tags = True 

is depricated and you should use format_html(), format_html_join(), or mark_safe() instead

तो अपने मॉडल।अपने admin.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' 

और: py इस तरह दिखना चाहिए

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

और अपने admin.py में अपने व्यवस्थापक पैनल के 'संपादन मोड' में इसे जोड़ने के लिए ऐड:

fields = ('image_img',) 
+0

नोट्स: 'image_img()' विधि को 'instance'' स्वीकार करना चाहिए: 'def image_img (self, instance):' और ' यूआरएल प्राप्त करने के लिए 'स्वयं' के बजाय उदाहरण '। –

+0

'def image_img (self): ', तो आप फ़ील्ड प्राप्त करने के लिए' self.field_name' का उपयोग कर सकते हैं, उदाहरण की आवश्यकता नहीं है (मेरा Django संस्करण v1.9) @ फिल Gyford –

1

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'] 
संबंधित मुद्दे