2010-02-01 62 views
3

我想有我在Django管理面板上传图片显示为缩略图,而不是路径Django管理面板。我已经安装了sorl,并可以制作出我的视图中显示的缩略图。缩略图使用SORL

我发现了2个片段(http://www.djangosnippets.org/snippets/579/http://www.djangosnippets.org/snippets/934/),我试图实现,但是由于微薄的文档和我对Django框架的深入理解,两种尝试都失败了。

可能有人请提供我怎么能得到这个工作简单化向下一步一步的指导?

谢谢!

回答

4

呀:)我可以;)

首先,你需要创建处理缩略图的自定义模板标签:

from django.template import Library 
from django.utils.safestring import mark_safe 
from django.contrib.admin.templatetags.admin_list import result_headers 

register = Library() 

def results(cl): 
    out = [] 
    for item in cl.result_list: 
     url = cl.url_for_result(item) 
     code = '<a href="%(url)s">%(img)s</a> <div><a href="%(url)s">%(title)s</a></div>' % { 
      'url': url, 
      'img': item.preview.thumbnail_tag, 
      'title': item.title, 
     } 
     out.append(mark_safe(code)) 

    return out 

def gallery_result_list(cl):  
    return {'cl': cl, 
      'result_headers': list(result_headers(cl)), 
      'results': results(cl)} 
result_list = register.inclusion_tag("admin/app_name/model/change_list_results.html")(gallery_result_list) 

其中item.preview.thumbnail_tag是SORL创建的略图:) [我从默认的模板标签的原代码]

其次,你需要创建一个模板模型(使用新的自定义模板标签),那一定是在这个目录模式: templates_d IR /管理/ APP_NAME /模型/ change_list.html

,并有下面的代码:

{% extends "admin/change_list.html" %} 
{% load adminmedia admin_list my_admin_tags i18n %} 

{% block result_list %} 
    {% if action_form and actions_on_top and cl.full_result_count %}{% admin_actions %}{% endif %} 
    {% gallery_result_list cl %} 
    {% if action_form and actions_on_bottom and cl.full_result_count %}{% admin_actions %}{% endif %} 
{% endblock %} 

,你可以在你需要创建一个多个模板(称为change_list_result.html)的标签功能查看正确显示图像:

<style> 
td.page { text-align: center; } 
td.page a { font-weight: bold; } 
</style> 
{% if results %} 
<table cellspacing="0"> 
<tbody> 
<tr> 
{% for result in results %} 
    <td class="page"> 
     {{ result }} 
    </td> 
    {% if forloop.counter|divisibleby:3 %} 
</tr><tr> 
    {% endif %} 
{% endfor %} 
</tr> 
</tbody> 
</table> 
{% endif %} 

所以在最后,你将有3个文件:

  1. templates_dir /管理/应用程序_name/MODEL_NAME/change_list.html
  2. templates_dir /管理/ APP_NAME /模型名称/ change_list_result.html
  3. your_project/APP_NAME/templatetags/my_admin_tags.py

,当然,templatetags必须添加到INSTALLED_APP在设置;)

这是所有;)希望这可能会有所帮助。

13

我知道这是旧的文章,但我想我可能已经发现比上面的管理模板重写方法更短的方式(尽管这是一个相当真棒的解决方案 - 我会在其他情况下使用它)。这只是直接调用sorl函数来生成缩略图。

在MYAPP/admin.py

from myapp import models 
from sorl.thumbnail import default 
ADMIN_THUMBS_SIZE = '60x60' 

class MyModelAdmin(admin.ModelAdmin): 
    model = models.MyModel 
    list_display = ['my_image_thumb', 'my_other_field1', 'my_other_field2', ] 

    def my_image_thumb(self, obj): 
     if obj.image: 
      thumb = default.backend.get_thumbnail(obj.image.file, ADMIN_THUMBS_SIZE) 
      return u'<img width="%s" src="%s" />' % (thumb.width, thumb.url) 
     else: 
      return "No Image" 
    my_image_thumb.short_description = 'My Thumbnail' 
    my_image_thumb.allow_tags = True 

我基于这一关以下问题的,但添加的SORL功能。

Django admin and showing thumbnail images