2017-12-07 3 views
1

질문이 있습니다. 내 생각에 장고에서 upload_to하는 것이 쉽지만 생각하기가 어렵습니다. 희망이 당신의 도움이됩니다! 보시다시피업로드 이름에 개체 이름

# Upload_to Def 
from datetime import datetime 
def avatar_country_path(instance, filename): 
    ext = filename.split('.')[-1] 
    filename = '%s' % (instance.id) 
    datetime_str = datetime.now().strftime("%Y%m%d%H%M%S") 
    return "geo/country/%s/%s_avatar.%s" %(filename, datetime_str, ext) 

def cover_country_path(instance, filename): 
    ext = filename.split('.')[-1] 
    filename = '%s' % (instance.id) 
    datetime_str = datetime.now().strftime("%Y%m%d%H%M%S") 
    return "geo/country/%s/%s_cover.%s" %(filename, datetime_str, ext) 

def flag_country_path(instance, filename): 
    ext = filename.split('.')[-1] 
    filename = '%s' % (instance.id) 
    datetime_str = datetime.now().strftime("%Y%m%d%H%M%S") 
    return "geo/country/%s/%s_flag.%s" %(filename, datetime_str, ext) 

class BaseCountry(Place, SlugModel): 
    # More 
    avatar = models.ImageField(max_length=1024, upload_to=avatar_country_path, blank=True) 
    cover = models.ImageField(max_length=1024, upload_to=cover_country_path, blank=True) 
    flag = models.ImageField(max_length=1024, upload_to=flag_country_path, blank=True 

, 나는 NAME OF FIELDS (avatar, cover, flag) 단지 다른 유사한 경로로 upload_to하기 위해 3 개 기능을 필요로하지만 난 그것을 단축하는 방법을 잘 모릅니다.

내가 도와 줄 수 있겠 니?

+0

"Def"와 같은 것은 없습니다. 이들은 함수 또는 메소드입니다. –

답변

2

이과 같이 나머지 매개 변수화 시도하십시오 중복 라인을 찾아하는 것입니다 같은 코드를 단축하는 방법을 파악하기위한 트릭 :

from datetime import datetime 

def inject_field_type(instance, filename, suffix): 
    ext = filename.split('.')[-1] 
    filename = '%s' % (instance.id) 
    datetime_str = datetime.now().strftime("%Y%m%d%H%M%S") 
    return "geo/country/%s/%s_%s.%s" %(filename, datetime_str, ext, suffix) 

def avatar_country_path(instance, filename): 
    return inject_field_type(instance, filename, 'avatar') 

def cover_country_path(instance, filename): 
    return inject_field_type(instance, filename, 'cover') 

def flag_country_path(instance, filename): 
    return inject_field_type(instance, filename, 'flag') 

class BaseCountry(Place, SlugModel): 
    avatar = models.ImageField(max_length=1024, upload_to=avatar_country_path, blank=True) 
    cover = models.ImageField(max_length=1024, upload_to=cover_country_path, blank=True) 
    flag = models.ImageField(max_length=1024, upload_to=flag_country_path, blank=True 

당신이 경로를 만드는 데 필요한 논리를 변경할 수 있습니다이 방법을 3 가지 다른 기능으로 변경하지 않고 모든 3 개의 필드에 영향을줍니다.

+0

어쨌든 1 Def for 3 fields를 사용 하시겠습니까? –