Страница ошибки 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. В противном случае ваш хостинг-провайдер не очень хорош.