配置admin以显示thumnails

2024-04-25 20:21:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试配置我的管理员,以便它将显示图片的缩略图。我在缩略图上单击的所有内容(没有图片)都会将我链接到我的项目主页,而不是查看图像。你知道吗

单击缩略图后的URL输出:

http://127.0.0.1:8000/admin/portfolio/photo/%7B%20MEDIA_URL%20%7D%s

这就是目前的情况:

enter image description here

不确定显示图像的原因=/

Here is my models.py for app:

from django.db import models
from django.contrib import admin
from PIL import Image
from Boothie.settings import MEDIA_ROOT
import os.path
from django.utils.html import format_html



class Album(models.Model):
    title = models.CharField(max_length=50)
    # thumbnail = models.ImageField()

    def __str__(self):
        return self.title

    def images(self):
        lst = [x.photo.title for x in self.photo_set.all()]
        return lst

class AlbumAdmin(admin.ModelAdmin):
    # Set search_fields to enable a search box on the admin change list page.
    # This should be set to a list of field names that will be searched whenever
    # somebody submits a search query in that text box.
    search_fields = ["title"]
    # Set list_display to control which fields are displayed on the change list page of the admin.
    list_display = ["title"]


class Photo(models.Model):
    title = models.CharField(max_length=50, blank=True)
    album = models.ForeignKey(Album)
    photo = models.FileField(upload_to="album")
    width = models.IntegerField(blank=True, null=True)
    height = models.IntegerField(blank=True, null=True)
    upload = models.DateTimeField(auto_now_add=True)
    # thumbnail = models.ImageField()

    def save(self, *args, **kwargs):
        # Save image dimensions
        # Save image
        super(Photo, self).save(*args, **kwargs)
        # get image
        pic = Image.open(os.path.join(MEDIA_ROOT, self.photo))
        # set Photo width and height
        self.width, self.height = pic.size
        # save object
        super(Photo, self).save(*args, **kwargs)

    def __str__(self):
        return self.title

    def albums_(self):
        # https://docs.djangoproject.com/en/1.7/ref/models/querysets/#values-list
        lst = [x[1] for x in self.album.value_list()]
        return ', '.join(lst)

    def size(self):
        # Photo size
        return "%s x %s" % (self.width, self.height)

    def thumbnail(self):
        # return """<a href="/media/%s"><img border="0" alt="" src="/media/%s" height="40" /></a>""" % (self.image.name, self.image.name)
        thumbnail_html = format_html("<a href=\"{{ MEDIA_URL }}%s\"><img border=\"0\" alt=\"\" src=\"{{ MEDIA_URL }}%s\" height=\"40\" /></a>", self.photo.name, self.photo.name)
        return thumbnail_html

    # thumbnail.allow_tags = True

class PhotoAdmin(admin.ModelAdmin):
    search_fields = ["title", "photo"]
    list_display = ["photo", "thumbnail", "title", "album", "size"]
    list_filter = ["album"]

你知道吗设置.py媒体设置:

MEDIA_ROOT = os.path.join(BASE_DIR, "../media_root/Boothie/pics")
MEDIA_URL = '/media/'

你知道吗管理员.py地址:

from django.contrib import admin
from portfolio.models import Album, AlbumAdmin, Photo, PhotoAdmin

admin.site.register(Album, AlbumAdmin)
admin.site.register(Photo, PhotoAdmin)

Tags: fromimportselftruereturnadmintitlemodels
2条回答

{{ MEDIA_URL }}是一个模板标记,在模板中使用它。你知道吗

在python代码中:

from django.conf import settings
settings.MEDIA_URL

我看到您已经在设置中定义了MEDIA_ROOT and MEDIA_URL,然后只需在网址.py文件,这样就可以了。你知道吗

from django.conf import settings
urlpatterns += patterns('',
    url(r'^media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT, 'show_indexes': False}),
)

相关问题 更多 >