2010-02-01 96 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