2013-02-10 21 views
5

मैं इस फोटो ऑर्गनाइज़र पर काम कर रहा हूं और http://lightbird.net/dbe/photo.html पर ऐप पार्ट I साझा कर रहा हूं। मैं एक थंबनेल उत्पन्न करने की कोशिश कर रहा हूं और जब मैं करता हूं। मुझे यह त्रुटि मिलती है।Django त्रुटि (13, 'अनुमति अस्वीकृत')

मेरे पास विंडोज विस्टा है।

IOError at /admin/photo/image/add/ 
    (13, 'Permission denied') 
    Request Method: POST 
    Request URL: http://127.0.0.1:8000/admin/photo/image/add/ 
    Django Version: 1.4.3 
    Exception Type: IOError 
    Exception Value: (13, 'Permission denied') 

    Exception Location:C:\Python26\lib\site-packages\PIL\Image.py in save, line 1399 
    Python Executable:C:\Python26\python.exe 
    Python Version: 2.6.0 
    Python Path: 

    ['C:\\djcode\\mysite', 
    'C:\\Python26\\python26.zip', 
    'C:\\Python26\\DLLs', 
    'C:\\Python26\\lib', 
    'C:\\Python26\\lib\\plat-win', 
    'C:\\Python26\\lib\\lib-tk', 
    'C:\\Python26', 
    'C:\\Python26\\lib\\site-packages', 
    'C:\\Python26\\lib\\site-packages\\PIL'] 

    Server time: Sun, 10 Feb 2013 23:49:34 +1100 

मेरे models.py

from django.db import models 
from django.contrib.auth.models import User 
from django.contrib import admin 
from string import join 
from django.core.files import File 
from os.path import join as pjoin 
from tempfile import * 

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) 
    thumbnail2 = models.ImageField(upload_to="images/", blank=True, null=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(pjoin(MEDIA_ROOT, self.image.name)) 
     self.width, self.height = im.size 

     # large thumbnail 
     fn, ext = os.path.splitext(self.image.name) 
     im.thumbnail((128,128), PImage.ANTIALIAS) 
     thumb_fn = fn + "-thumb2" + ext 
     tf2 = NamedTemporaryFile() 
     im.save(tf2.name, "JPEG") 
     self.thumbnail2.save(thumb_fn, File(open(tf2.name)), save=False) 
     tf2.close() 

     # small thumbnail 
     im.thumbnail((40,40), PImage.ANTIALIAS) 
     thumb_fn = fn + "-thumb" + ext 
     tf = NamedTemporaryFile() 
     im.save(tf.name, "JPEG") 
     self.thumbnail.save(thumb_fn, File(open(tf.name)), save=False) 
     tf.close() 

     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"] 
def save_model(self, request, obj, form, change): 
    obj.user = request.user 
    obj.save() 

समस्या यहां है:

from django.core.files import File 
from os.path import join as pjoin 
from tempfile import * 

class Image(models.Model): 
    # ... 

    thumbnail2 = models.ImageField(upload_to="images/", blank=True, null=True) 

def save(self, *args, **kwargs): 
    """Save image dimensions.""" 
    super(Image, self).save(*args, **kwargs) 
    im = PImage.open(pjoin(MEDIA_ROOT, self.image.name)) 
    self.width, self.height = im.size 

    # large thumbnail 
    fn, ext = os.path.splitext(self.image.name) 
    im.thumbnail((128,128), PImage.ANTIALIAS) 
    thumb_fn = fn + "-thumb2" + ext 
    tf2 = NamedTemporaryFile() 
    im.save(tf2.name, "JPEG") 
    self.thumbnail2.save(thumb_fn, File(open(tf2.name)), save=False) 
    tf2.close() 

    # small thumbnail 
    im.thumbnail((40,40), PImage.ANTIALIAS) 
    thumb_fn = fn + "-thumb" + ext 
    tf = NamedTemporaryFile() 
    im.save(tf.name, "JPEG") 
    self.thumbnail.save(thumb_fn, File(open(tf.name)), save=False) 
    tf.close() 

    super(Image, self).save(*args, ** kwargs) 

मैं यह त्रुटि कैसे ठीक करूं?

+0

आप 'MEDIA_ROOT' पर की छवियों 'फ़ोल्डर बनाया है हो सकता है? – asermax

उत्तर

1

ऐसा लगता है कि django में आपके MEDIA_ROOT फ़ोल्डर तक पहुंचने की अनुमति नहीं है।

अपनी सेटिंग्स.py फ़ाइल में अपनी MEDIA_ROOT सेटिंग देखें। फिर फ़ोल्डर पर अनुमतियां जांचें (ls -lsa /path/to/media_root जैसे बैश खोल से)। सुनिश्चित करें कि उपयोगकर्ता django को फ़ोल्डर में लिखने की अनुमति के रूप में चला रहा है।

साथ ही, जैसा कि एस्सेक्स बताता है, सुनिश्चित करें कि आपने अपने MEDIA_ROOT के भीतर एक छवि निर्देशिका बनाई है।

पर serving other directories

अद्यतन

शायद यह this issue है serving static files विशेष रूप से खंड के लिए दस्तावेज़ पर एक नज़र डालें। im.save(tf2, "JPEG")

+0

मैं विंडो विस्टा एटीएम का उपयोग कर रहा हूँ। मैं अपने मीडिया फ़ोल्डर को ढूँढता हूं जो MEDIA_ROOT = 'C:/djcode/mysite/photo/media' पर है और मैंने अनुमति पर पूर्ण नियंत्रण जोड़ा है। त्रुटि अभी भी दिखाई देती है। क्या करना चाहिए ? – supersheep1

+0

asermax, क्या यह मेरा छवि फ़ोल्डर सी है:/djcode/mysite/photo/media ' – supersheep1

+0

नहीं, आपका छवि फ़ोल्डर सी:/djcode/mysite/photo/media/images पर होना चाहिए। आपने अपने model.py के upload_to पैरामीटर में कहा है कि आप इस निर्देशिका में छवियां अपलोड कर रहे हैं। जैसा कि Asermax सही ढंग से इंगित करता है, यदि आप पहले से नहीं हैं तो आपको फ़ोल्डर बनाना होगा। –

संबंधित मुद्दे