2011-04-28 2 views
3

나는 "Uploading images using Django Admin?"에서 예제를 시도했지만 불행히도 나는 항상 실패하고 있습니다.장고 관리자를 사용하여 이미지를 업로드하는 동안 TemplateSyntaxError

모델은 다음과 같습니다

from django.db import models 
from django.contrib import admin 

class Celebrity(models.Model): 
    name = models.CharField(max_length=200) 

    def __unicode__(self): 
     return self.name 


class Image(models.Model): 
    celebrity = models.ForeignKey(Celebrity) 
    image = models.ImageField('Bild', upload_to="files/") 

    def __unicode__(self): 
     return self.image 

class InlineImage(admin.TabularInline): 
    model = Image 

class CelebrityAdmin(admin.ModelAdmin): 
    inlines = [InlineImage] 

admin.site.register(Celebrity, CelebrityAdmin) 

MEDIA_ROOT은 다음과 같습니다

url(r'^media/(?P<path>.*)$', 'django.views.static.serve', 
{ 'document_root': 'c:/python/django/apps/af/neu/images/media/files' }), 

# Uncomment the next line to enable the admin: 
url(r'^admin/', include(admin.site.urls)), 

:

MEDIA_ROOT = 'c:/python/django/apps/af/neu/images/media/' 
는 URL입니다 이 구성 업로드가 작동하지만로 그때 나는 다음 역 추적 얻을 편집하려고 할 때 :

MEDIA_ROOT = os.path.join(os.path.dirname(file), "media").replace(r"\\", "//"), 

또는

: 나는 또한 같은 MEDIA_ROOT을 시도

Environment: 


Request Method: GET 
Request URL: http://localhost:8000/admin/image/celebrity/3/ 

Django Version: 1.3 
Python Version: 2.6.6 
Installed Applications: 
['django.contrib.auth', 
'django.contrib.contenttypes', 
'django.contrib.sessions', 
'django.contrib.sites', 
'django.contrib.messages', 
'django.contrib.staticfiles', 
'django.contrib.admin', 
'debug_toolbar', 
'images.image'] 
Installed Middleware: 
('debug_toolbar.middleware.DebugToolbarMiddleware', 
'django.middleware.common.CommonMiddleware', 
'django.contrib.sessions.middleware.SessionMiddleware', 
'django.middleware.csrf.CsrfViewMiddleware', 
'django.contrib.auth.middleware.AuthenticationMiddleware', 
'django.contrib.messages.middleware.MessageMiddleware') 


Template error: 
In template c:\python\lib\site-packages\django\contrib\admin\templates\admin\edit_inline\tabular.html, error at line 27 
    Caught TypeError while rendering: coercing to Unicode: need string or buffer, ImageFieldFile found 
    17 : 


    18 :  <tbody> 


    19 :  {% for inline_admin_form in inline_admin_formset %} 


    20 :   {% if inline_admin_form.form.non_field_errors %} 


    21 :   <tr><td colspan="{{ inline_admin_form|cell_count }}">{{ inline_admin_form.form.non_field_errors }}</td></tr> 


    22 :   {% endif %} 


    23 :   <tr class="{% cycle "row1" "row2" %} {% if inline_admin_form.original or inline_admin_form.show_url %}has_original{% endif %}{% if forloop.last %} empty-form{% endif %}" 


    24 :    id="{{ inline_admin_formset.formset.prefix }}-{% if not forloop.last %}{{ forloop.counter0 }}{% else %}empty{% endif %}"> 


    25 :   <td class="original"> 


    26 :   {% if inline_admin_form.original or inline_admin_form.show_url %}<p> 


    27 :   {% if inline_admin_form.original %} {{ inline_admin_form.original }} {% endif %} 


    28 :   {% if inline_admin_form.show_url %}<a href="../../../r/{{ inline_admin_form.original_content_type_id }}/{{ inline_admin_form.original.id }}/">{% trans "View on site" %}</a>{% endif %} 


    29 :    </p>{% endif %} 


    30 :   {% if inline_admin_form.has_auto_field %}{{ inline_admin_form.pk_field.field }}{% endif %} 


    31 :   {{ inline_admin_form.fk_field.field }} 


    32 :   {% spaceless %} 


    33 :   {% for fieldset in inline_admin_form %} 


    34 :    {% for line in fieldset %} 


    35 :    {% for field in line %} 


    36 :     {% if field.is_hidden %} {{ field.field }} {% endif %} 


    37 :    {% endfor %} 


Traceback: 
File "C:\Python\lib\site-packages\django\core\handlers\base.py" in get_response 
    111.       response = callback(request, *callback_args, **callback_kwargs) 
File "C:\Python\lib\site-packages\django\contrib\admin\options.py" in wrapper 
    307.     return self.admin_site.admin_view(view)(*args, **kwargs) 
File "C:\Python\lib\site-packages\django\utils\decorators.py" in _wrapped_view 
    93.      response = view_func(request, *args, **kwargs) 
File "C:\Python\lib\site-packages\django\views\decorators\cache.py" in _wrapped_view_func 
    79.   response = view_func(request, *args, **kwargs) 
File "C:\Python\lib\site-packages\django\contrib\admin\sites.py" in inner 
    197.    return view(request, *args, **kwargs) 
File "C:\Python\lib\site-packages\django\utils\decorators.py" in _wrapper 
    28.    return bound_func(*args, **kwargs) 
File "C:\Python\lib\site-packages\django\utils\decorators.py" in _wrapped_view 
    93.      response = view_func(request, *args, **kwargs) 
File "C:\Python\lib\site-packages\django\utils\decorators.py" in bound_func 
    24.     return func(self, *args2, **kwargs2) 
File "C:\Python\lib\site-packages\django\db\transaction.py" in inner 
    217.     res = func(*args, **kwargs) 
File "C:\Python\lib\site-packages\django\contrib\admin\options.py" in change_view 
    1030.   return self.render_change_form(request, context, change=True, obj=obj) 
File "C:\Python\lib\site-packages\django\contrib\admin\options.py" in render_change_form 
    708.   ], context, context_instance=context_instance) 
File "C:\Python\lib\site-packages\django\shortcuts\__init__.py" in render_to_response 
    20.  return HttpResponse(loader.render_to_string(*args, **kwargs), **httpresponse_kwargs) 
File "C:\Python\lib\site-packages\django\template\loader.py" in render_to_string 
    188.   return t.render(context_instance) 
File "C:\Python\lib\site-packages\django\template\base.py" in render 
    123.    return self._render(context) 
File "C:\Python\lib\site-packages\django\test\utils.py" in instrumented_test_render 
    57.  return self.nodelist.render(context) 
File "C:\Python\lib\site-packages\django\template\base.py" in render 
    744.     bits.append(self.render_node(node, context)) 
File "C:\Python\lib\site-packages\django\template\debug.py" in render_node 
    73.    result = node.render(context) 
File "C:\Python\lib\site-packages\django\template\loader_tags.py" in render 
    127.   return compiled_parent._render(context) 
File "C:\Python\lib\site-packages\django\test\utils.py" in instrumented_test_render 
    57.  return self.nodelist.render(context) 
File "C:\Python\lib\site-packages\django\template\base.py" in render 
    744.     bits.append(self.render_node(node, context)) 
File "C:\Python\lib\site-packages\django\template\debug.py" in render_node 
    73.    result = node.render(context) 
File "C:\Python\lib\site-packages\django\template\loader_tags.py" in render 
    127.   return compiled_parent._render(context) 
File "C:\Python\lib\site-packages\django\test\utils.py" in instrumented_test_render 
    57.  return self.nodelist.render(context) 
File "C:\Python\lib\site-packages\django\template\base.py" in render 
    744.     bits.append(self.render_node(node, context)) 
File "C:\Python\lib\site-packages\django\template\debug.py" in render_node 
    73.    result = node.render(context) 
File "C:\Python\lib\site-packages\django\template\loader_tags.py" in render 
    64.    result = block.nodelist.render(context) 
File "C:\Python\lib\site-packages\django\template\base.py" in render 
    744.     bits.append(self.render_node(node, context)) 
File "C:\Python\lib\site-packages\django\template\debug.py" in render_node 
    73.    result = node.render(context) 
File "C:\Python\lib\site-packages\django\template\defaulttags.py" in render 
    227.     nodelist.append(node.render(context)) 
File "C:\Python\lib\site-packages\django\template\loader_tags.py" in render 
    170.    return self.render_template(template, context) 
File "C:\Python\lib\site-packages\django\template\loader_tags.py" in render_template 
    141.   output = template.render(context) 
File "C:\Python\lib\site-packages\django\template\base.py" in render 
    123.    return self._render(context) 
File "C:\Python\lib\site-packages\django\test\utils.py" in instrumented_test_render 
    57.  return self.nodelist.render(context) 
File "C:\Python\lib\site-packages\django\template\base.py" in render 
    744.     bits.append(self.render_node(node, context)) 
File "C:\Python\lib\site-packages\django\template\debug.py" in render_node 
    73.    result = node.render(context) 
File "C:\Python\lib\site-packages\django\template\defaulttags.py" in render 
    227.     nodelist.append(node.render(context)) 
File "C:\Python\lib\site-packages\django\template\defaulttags.py" in render 
    311.    return self.nodelist_true.render(context) 
File "C:\Python\lib\site-packages\django\template\base.py" in render 
    744.     bits.append(self.render_node(node, context)) 
File "C:\Python\lib\site-packages\django\template\debug.py" in render_node 
    73.    result = node.render(context) 
File "C:\Python\lib\site-packages\django\template\defaulttags.py" in render 
    311.    return self.nodelist_true.render(context) 
File "C:\Python\lib\site-packages\django\template\base.py" in render 
    744.     bits.append(self.render_node(node, context)) 
File "C:\Python\lib\site-packages\django\template\debug.py" in render_node 
    73.    result = node.render(context) 
File "C:\Python\lib\site-packages\django\template\debug.py" in render 
    92.    output = force_unicode(output) 
File "C:\Python\lib\site-packages\django\utils\encoding.py" in force_unicode 
    71.     s = unicode(s) 

Exception Type: TemplateSyntaxError at /admin/image/celebrity/3/ 
Exception Value: Caught TypeError while rendering: coercing to Unicode: need string or buffer, ImageFieldFile found 

MEDIA_ROOT = os.path.join(os.path.dirname(file), "media").replace("\\", "//"), 

하지만 업로드조차도 작동하지 않습니다.

그래서 저는 정말로 우둔합니다. 어떤 도움을 높이 평가합니다

답변

6

그냥이 오류의 이유를 인용하고

class Image(models.Model): 
    celebrity = models.ForeignKey(Celebrity) 
    image = models.ImageField('Bild', upload_to="files/") 

    def __unicode__(self): 
     return self.image.name 

당신도 reference.I에 대한 this 토론을 참조 이미지 클래스의 당신의 유니 코드 기능을 변경

def __unicode__(self): 
    return self.file.name 

to achieve the same result.

+0

훌륭한 작품입니다. Thanx so much – Helmut

+1

행복하게 도와 줬습니다. :) – Konstant

2

추적은 당신에게 정확히 무슨 일이 일어나는지 알려줍니다. 오류는 클래스의 Image 클래스에 있습니다. image 속성을 반환하지만 문자열이 아니므로 유니 코드로 출력 할 수 없습니다.

image.url 대신 답장을 보내보세요.

The problem with this issue finally had nothing to do with the forms themselves, but the unicode method of the Image-model. Older implementations of ImageField had a unicode method of their own so

def __unicode__(self): 
    return self.file 

worked fine. Now this needs to be

:
관련 문제