2013-02-11 156 views
0

我一直在这个照片管理器和共享应用程序第一部分在http://lightbird.net/dbe/photo.html。我试图添加一张照片,当我这样做。我得到这个错误。Django错误页面未找到(404)

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是什么问题。

在此先感谢

+0

你的根目前正在硬编码,使用进口操作系统 – catherine 2013-02-11 05:20:32

回答

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应该是相对于你的settings.py文件

我MEDIA_ROOT =“/家庭/ donkey123 /神秘/摄”所以它将在上线时,在另一个开发机器上等工作。

和我的MEDIA_URL =是“”,它是空白的。=>这应该是“/媒体/”,因为在模型中,你这样做是:

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

希望帮助

+0

谢谢弗朗索瓦。 – supersheep1 2013-02-11 06:33:14

+0

这个社区非常友好和乐于助人。弗朗索瓦你是一个善良的人 – supersheep1 2013-02-11 06:40:49

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/' 
+0

cathy我试过你的答案,它不起作用。 – supersheep1 2013-02-11 05:39:30

+0

这是您的路径的正确代码,您必须更新您保存数据的方式。你是否通过管理面板保存图像? – catherine 2013-02-11 05:48:11

+0

@ supersheep1是的代码绝对正确,看到我的答案更多详细信息... – 2013-02-11 06:00:15

0

问题是与正则表达式中的urls.py,这是1后采取一切,在把它当作主键。

+0

我点击了滴答按钮我的意外。对不起@burhan khalid我该怎么办? – supersheep1 2013-02-11 05:56:51

+0

检查您的'urls.py'中的正则表达式 – 2013-02-11 06:25:18

-1

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