0

我一直在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()

MEDIA_ROOT=我认为 My Models,py 很好,但我认为问题在于 MEDIA URL=

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

而我MEDIA_URL的是“”,它是空白的。

我不知道该为我准备什么,MEDIA_URL这是问题所在。

提前致谢

4

4 回答 4

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 中定义指向媒体文件夹的 url:

MEDIA_URL = '/media/'

然后来自该模型的图像将位于:

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

首先使用一个图像在没有您的模型/库的情况下测试这些设置。然后阅读以下内容:

要回答您的具体问题:

我的 MEDIA_ROOT = '/home/donkey123/mystic/photo' => 查看我的示例,MEDIA_ROOT 应该与您的 settings.py 文件相关,因此它可以在上线时工作,在另一台开发机器上等。

我的 MEDIA_URL= 是 "" 是空白的。=> 那应该是 '/media/' 因为在模型中你正在这样做:

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

希望有帮助

于 2013-02-11T05:57:15.800 回答
0

设置.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/'
于 2013-02-11T05:23:37.030 回答
0

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

于 2013-02-11T05:51:57.693 回答
-1

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

于 2013-03-15T10:55:19.293 回答