Страница ошибки Django не найдена (404)

Я работаю над этой первой частью Организатора фотографий и приложения для обмена ими на 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= а также MEDIA URL=

мой MEDIA_ROOT = '/home/donkey123/mysite/photo'

и мой MEDIA_URL это "", который является пустым.

Я не знаю, что поставить для моего MEDIA_URL в чем проблема.

заранее спасибо

4 ответа

Решение

В вашей модели (обратите внимание, что слеш в конце не нужен):

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">

надеюсь, это поможет

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

Проблема с регулярным выражением в вашем urls.py, который принимает все после 1 и передать его в качестве первичного ключа.

Я думаю, когда любая веб-страница удаляется или перемещается, то происходит 404. В противном случае ваш хостинг-провайдер не очень хорош.

Другие вопросы по тегам