2010-02-01 4 views
3

장고 관리 패널에서 업로드하는 사진을 경로 대신 썸네일로 표시하려고합니다. 나는 sorl을 설치했고 내 견해에 나타나는 축소판을 만들 수 있습니다.sorl을 사용하는 django admin 패널의 썸네일

나는 구현하려고 시도한 2 단편 (http://www.djangosnippets.org/snippets/579/http://www.djangosnippets.org/snippets/934/)을 발견했지만, 두 가지 시도 모두가 부족한 문서와 장고 프레임 워크에 대한 얕은 이해 때문에 실패했습니다.

누군가이 기능을 어떻게 사용할 수 있는지 단계별로 설명해주십시오.

감사합니다.

답변

4

예 : I 수)

먼저 섬네일 처리하는 사용자 지정 템플릿 태그를 만들어야합니다

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에 의해 생성 된 thumnail입니다 :) [기본 템플릿 태그에서 원본 코드를 가져 왔습니다.]

두 번째로 (새 맞춤 템플릿 태그를 사용하는) 모델의 템플릿을 만들어야하며이 디렉토리 스키마에 있어야합니다 : 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)을 만들 필요가있는 태그 기능에서 볼 수 있듯이를 들어 이미지를 올바르게 표시 :

  1. templates_dir/관리자/응용 프로그램 :
    <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 개 개의 파일이있을 것이다 _name/MODEL_NAME/change_list.html
  2. 이 templates_dir/관리/APP_NAME/MODEL_NAME/change_list_result.html
  3. your_project/APP_NAME/templatetags/my_admin_tags.py

을하고, 물론, templatetags이 INSTALLED_APP에 추가해야합니다 in 설정;)

이것은 모두;) 희망이 도움이 될 수 있습니다.

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