使用默认的 FileField,只有在给定的图像文件非常小的情况下,从模型的管理页面上传才会成功。否则会抛出错误:
使用 astrobanana.urls 中定义的 URLconf,Django 尝试了这些 URL 模式,顺序如下:
1. ^$ [name='index']
2. ^(?P\d+)/$ [name='comic']
.. .等等等等...当前 URL 500.shtml 与其中任何一个都不匹配。
请注意,我曾经使用过 ImageField,但为了解决问题,我转而使用 FileField,认为可能 django 禁止上传图像,因为它没有将图像读取为图像。
不用说,我很困惑。小图像有效,大图像会引发神秘错误。settings.py 中的所有相关内容似乎都已定义且正确,尤其是在正确上传小图像时。不过,这里是我目前的相关设置供参考。
MEDIA_ROOT = '/home/astroban/public_html/astrobanana/media/'
MEDIA_URL = 'http://astrobanana.com/media/'
FILE_UPLOAD_HANDLERS = (
'django.core.files.uploadhandler.MemoryFileUploadHandler',
'django.core.files.uploadhandler.TemporaryFileUploadHandler',
)
FILE_UPLOAD_MAX_MEMORY_SIZE = 2621440
FILE_UPLOAD_PERMISSIONS = None
FILE_UPLOAD_TEMP_DIR = None
此外,这里是相关模型的代码:
from django.db import models
class ComicPost(models.Model):
title = models.CharField(max_length=150)
comic = models.FileField(upload_to='comics/')
hovertext = models.CharField(max_length=150,blank=True,null=True)
timestamp = models.DateTimeField()
hits = models.IntegerField(editable=False,default=0)
def save(self, *args, **kwargs):
if not self.id:
i = ComicPost.objects.all().order_by('-id')[0]
self.id = i.id+1
super(ComicPost, self).save(*args, **kwargs)
def __unicode__(self):
return self.title
class Meta:
ordering = ('-timestamp',)
... 这是 admin.py:
from django.contrib import admin
from astrobanana.comic.models import ComicPost
class ComicPostAdmin(admin.ModelAdmin):
list_display = ('title','timestamp','hits')
admin.site.register(ComicPost,ComicPostAdmin)
一切看起来都很标准。这有什么问题?感谢任何帮助我已经绞尽脑汁。