我期待從ImageField覆蓋_get_url方法的最佳方式,我需要自定義url,因爲我不想默認返回的url(我將這個圖像分發給一個視圖管理ACL,以便基於MEDIA_ROOT的URL不正確)。從ImageField覆蓋_get_url()
我是否需要創建自己的ImageField?或者是否有解決方案使用較少的代碼?
預先感謝 法比安斯基
我期待從ImageField覆蓋_get_url方法的最佳方式,我需要自定義url,因爲我不想默認返回的url(我將這個圖像分發給一個視圖管理ACL,以便基於MEDIA_ROOT的URL不正確)。從ImageField覆蓋_get_url()
我是否需要創建自己的ImageField?或者是否有解決方案使用較少的代碼?
預先感謝 法比安斯基
的網址返回是_get_url
實際上是由用於存儲類生成的;創建自己的存儲並在創建ImageField
時使用它可能會更有意義! 參見:http://docs.djangoproject.com/en/dev/topics/files/#file-storage,http://docs.djangoproject.com/en/dev/howto/custom-file-storage/
您將neet覆蓋爲此的方法Storage.url
!
感謝lazerscience,在這裏我的最終解決方案:
from django.core.files.storage import FileSystemStorage
from django.db.models import get_model
from django.core.urlresolvers import reverse
from django.db import models
from django.conf import settings
class PhotographerStorage(FileSystemStorage):
def __init__(self, location=None):
super(PhotographerStorage, self).__init__(location)
def url(self, name):
photo_model = get_model('photographer', 'photo')
photo = photo_model.objects.get(original_image=name)
url = super(PhotographerStorage, self).url(name)
return '%s?size=%d' % (reverse('photographer_photo_display',
args=[photo.slug]), 300)
fs = PhotographerStorage(location=settings.PHOTOGRAPHER_LOCATION)
class Photo(models.Model):
...
original_image = models.ImageField(storage=fs)
...
它的工作原理就像一個魅力:)
我在想該URL是由模型管理。現在,這是有道理的,謝謝:) – 2010-07-06 12:10:01