未找到Django错误页面(404)

时间:2013-02-11 05:17:19

标签: django

我一直在http://lightbird.net/dbe/photo.html处理这个照片管理器和共享应用程序第一部分。我正在尝试添加图片,当我这样做时。我收到了这个错误。

 Page not found (404)
Request Method: GET 
Request URL: http://donkey123.pythonanywhere.com/admin/photo/image/1/images/Penguins_7.jpg/ 

image object with primary key u'1/images/Penguins_7.jpg' does not exist.

You're seeing this error because you have DEBUG = True in your Django settings file. Change that to False, and Django will display a standard 404 page. 

我的模特是

from django.db import models
from django.contrib.auth.models import User
from django.contrib import admin
from string import join
import os
from PIL import Image as PImage
from mysite.settings import MEDIA_ROOT


class Album(models.Model):
    title = models.CharField(max_length=60)
    public = models.BooleanField(default=False)
    def __unicode__(self):
        return self.title

class Tag(models.Model):
    tag = models.CharField(max_length=50)
    def __unicode__(self):
        return self.tag

class Image(models.Model):
    title = models.CharField(max_length=60, blank=True, null=True)
    image = models.FileField(upload_to="images/")
    tags = models.ManyToManyField(Tag, blank=True)
    albums = models.ManyToManyField(Album, blank=True)
    created = models.DateTimeField(auto_now_add=True)
    rating = models.IntegerField(default=50)
    width = models.IntegerField(blank=True, null=True)
    height = models.IntegerField(blank=True, null=True)
    user = models.ForeignKey(User, null=True, blank=True)

    def __unicode__(self):
        return self.image.name
    def save(self, *args, **kwargs):
        """Save image dimensions."""
        super(Image, self).save(*args, **kwargs)
    im = PImage.open(os.path.join(MEDIA_ROOT, self.image.name))
    self.width, self.height = im.size
    super(Image, self).save(*args, ** kwargs)
def size(self):
    """Image size."""
    return "%s x %s" % (self.width, self.height)

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

def tags_(self):
    lst = [x[1] for x in self.tags.values_list()]
    return str(join(lst, ', '))

def albums_(self):
    lst = [x[1] for x in self.albums.values_list()]
    return str(join(lst, ', '))

def thumbnail(self):
    return """<a href="/media/%s"><img border="0" alt="" src="/media/%s" height="40" /></a>""" % (
                                                                (self.image.name, self.image.name))
thumbnail.allow_tags = True





class AlbumAdmin(admin.ModelAdmin):
    search_fields = ["title"]
    list_display = ["title"]

class TagAdmin(admin.ModelAdmin):
    list_display = ["tag"]

class ImageAdmin(admin.ModelAdmin):
    search_fields = ["title"]
    list_display =     ["__unicode__", "title", "user", "rating", "size", "tags_", "albums_","thumbnail","created"]
    list_filter = ["tags", "albums","user"]

def save_model(self, request, obj, form, change):
    obj.user = request.user
    obj.save()

我认为我的模型,py很好,但我认为问题在于 MEDIA_ROOT=MEDIA URL=

我的MEDIA_ROOT = '/home/donkey123/mysite/photo'

我的MEDIA_URL是“”,这是空白的。

我不知道应该为我的MEDIA_URL提出什么问题。

提前致谢

4 个答案:

答案 0 :(得分:1)

在你的模型中(注意最后不需要斜杠):

image = models.FileField(upload_to="images")

这意味着这些图片将进入{media folder}/images/

在settings.py中:

MEDIA_ROOT = os.path.join(os.path.dirname(__file__), '../../web/media').replace('\\','/')

这意味着媒体文件夹是:project_root/web/media

因此,此模型中的图像将显示在:project_root/web/media/images

上面的内容定义了图像在文件系统上的保存位置。现在你要做的是定义通过HTTP访问它们的位置。

在settings.py中定义指向媒体文件夹的网址:

MEDIA_URL = '/media/'

然后这个模型的图像将出现在:

http://my-url/media/images/image_name.jpg

首先使用一个图像测试这些设置,而不使用模型/库。然后阅读以下内容:

回复您的具体问题:

我的MEDIA_ROOT ='/ home / donkey123 / mystic / photo'=&gt;看看我的例子,MEDIA_ROOT应该与你的settings.py文件相关,这样它就可以在上线,在另一台开发机器上工作等。

我的MEDIA_URL =是“”,这是空白的。 =&GT;应该是'/ media /',因为在模型中你这样做:

def thumbnail(self):
    return """<a href="/media/%s">

希望有所帮助

答案 1 :(得分:0)

<强> settings.py

import os

PROJECT_ROOT = os.path.join(os.path.dirname(__file__), '..')
SITE_ROOT = PROJECT_ROOT

MEDIA_ROOT = os.path.join(SITE_ROOT, 'media')
MEDIA_URL = '/media/'

答案 2 :(得分:0)

问题在于urls.py中的正则表达式,它将1之后的所有内容都作为主键传递。

答案 3 :(得分:-1)

我认为,当删除或移动任何网页时,会发生404。否则你的托管服务提供商不好。

相关问题