2013-02-11 153 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發生。否則你的託管服務提供商不好。