使用 Django Admin 上传图像时出现 TemplateSyntaxError
我尝试了 "使用 Django Admin 上传图像?" 中的示例,但不幸的是我失败了一直。
模型是:
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 是:
MEDIA_ROOT = 'c:/python/django/apps/af/neu/images/media/'
这是网址:
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)),
使用此配置,上传可以正常工作,但是当我尝试编辑然后我得到以下回溯:
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,例如:
MEDIA_ROOT = os.path.join(os.path.dirname(file), "media").replace(r"\\", "//"),
或
MEDIA_ROOT = os.path.join(os.path.dirname(file), "media").replace("\\", "//"),
但甚至上传都不起作用
所以我我真的一无所知。非常感谢任何帮助
I tried the example from "Uploading images using Django Admin?" but unfortunately I am failing all the time.
The model is:
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)
The MEDIA_ROOT is:
MEDIA_ROOT = 'c:/python/django/apps/af/neu/images/media/'
This is the url:
url(r'^media/(?P<path>.*)
With this configuration the upload works, but when I am trying to edit then I get the following traceback:
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
I also tried the MEDIA_ROOT like:
MEDIA_ROOT = os.path.join(os.path.dirname(file), "media").replace(r"\\", "//"),
or
MEDIA_ROOT = os.path.join(os.path.dirname(file), "media").replace("\\", "//"),
but then not even the upload works
So I am really clueless. Any help is highly appreciated
, '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)),
With this configuration the upload works, but when I am trying to edit then I get the following traceback:
I also tried the MEDIA_ROOT like:
or
but then not even the upload works
So I am really clueless. Any help is highly appreciated
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
只需更改 Image 类的 unicode 函数
即可noreferrer">这个讨论供参考。我引用这个错误的原因:
Just change your unicode function of Image class
You an also refer to this discussion for reference.I am quoting the reason of this error:
回溯告诉您到底发生了什么。错误出现在
Image
类的__unicode__
方法中 - 您在那里返回image
属性,但这不是一个字符串,所以可以不输出为 unicode。尝试返回
image.url
。The traceback tells you exactly what is going on. The error is in the
__unicode__
method of theImage
class - you're returning theimage
property there, but that's not a string, so can't be output as unicode.Try returning
image.url
instead.