2010-01-09 1 views
9

장고 관리자 용으로 강력하고 안정된 장고 파일 관리자를 찾고 있습니다. 관리자 용으로 좋은 장고 파일 관리자를 추천 할 수 있습니까?

  • 파일을 업로드 할 수 있습니다 (예를 들어, 이미지)

    1. 서버에 검색 및 선택 파일을 할 수 있습니다 :

      내 요구 사항 목록을 기원합니다. 여러 파일 업로드 (예 : 업로드)

    2. 내 모델 정의에서 django-filebrowser와 같은 맞춤 필드를 사용하지 않아도됩니다. 칼 마이어 (Carl Meyer)의 django-adminfiles처럼 admin.py의 CharField (또는 FileField의 ImageField)에 이상적으로 붙일 수있는 것이 필요합니다.

    나는 django-filebrowser (그라 펠리가 아닌 버전)을 사용했으며 django-adminfiles도 보았지만 사용하지는 않았습니다. 둘 다 아주 좋습니다. 하지만 django-filebrowser는 내 모델에서 사용자 정의 필드를 사용해야하며 '버전'(다중 이미지 크기) 기능을 원하지 않습니다. django-adminfiles는 파일을 텍스트 영역에 인라인으로 삽입하기위한 것이므로 찾고자하는 내용이 아닙니다.

    내 요구 사항에 맞게이 중 하나를 수정해도 좋지만 다른 대안이 있다면 그럴 수 있습니다. 실종 됐습니다.

  • +0

    https://github.com/sehmaschine/django-filebrowser에서 모델에 사용자 정의 필드가 더 이상 필요하지 않은 것 같습니다. –

    답변

    2

    FWIW, django-adminfiles도 파일 브라우저를 선택 드롭 다운 대체로 사용하기 위해 일부 최신 기능을 포함 시켰습니다. 따라서 모델에 "FileUpload"모델에 대한 ForeignKey가있게되고 ForeignKey를 채우기 위해 찾아보십시오. 그것은 당신이 찾고있는 것과 더 가깝습니까?

    필자는 오랫동안이 기능을 필요로하지 않았거나 사용하지 않았으며, 문서화되거나 테스트되지 않았으며, 추가 한 이후 많은 재 작성이 있었기 때문에 작동 상태에 있거나 없을 수도 있습니다. 하지만 요즘의 근무 조건 중 하나에 그것을 되 돌리는 것은 나의 할일 목록에 있으며, 나는 약간의 동기 부여 된 도움에 확실히 반대하지 않을 것이다 ;-)

    +1

    그게 내가 찾고있는 것에 더 가깝지만, 그렇지는 않습니다.다른 응용 프로그램의 종속성을 제거하기 위해 CharField/FileField/ImageField를 사용하여 모델을 가져 오십시오. 그런 다음 파일 관리자는 CharField를 사용자 선택에 따라 상대 경로로 업데이트합니다. django-adminfiles가 텍스트 영역에 "인라인"삽입을 위해 유사한 작업을하고있는 것 같습니다. 다른 답변이 여기에 팝업되지 않으면 django-admin 파일을 변경하려고합니다. (고마워요. 고맙습니다!) – zlovelady

    +0

    위젯이있는 경우 위젯을 수정하고 위젯으로 사용할 수 있습니다. 'FilePathField'에서 위젯으로 사용할 수 있습니다.이 옵션은 선택을 제한하는'CharField'와 같다고 생각합니다. 특정 경로에있는 파일로 – LeafStorm

    +0

    @zlovelady - 그것은 분리 된 사용을위한 정말 좋은 생각입니다; 내가 장고 - adminfiles 이러한 기능을 뽑아 싫어하지 않을 것이다. –

    1

    django-filebrowser는 FileBrowseWidget. 적용된 몇 가지 못생긴 해킹과 함께, 나는 ImageField 및 FileField (더 이상 filebrowser.fields.FileBrowseField 모델에 필요)에 대한 장고 관리자에서 일하게 할 수있었습니다.

    저는 이것을 (github의 wardi에서 non-grappelli-dependent django-filebrowser과 함께) 사용하고 있습니다.

    # a few changes to filebrowser/fields.py 
    
    class FileBrowseWidget(Input): 
        ... 
    
        # change the default value of attrs from None to {} 
        def __init__(self, attrs={}): 
         ... # the rest unchanged 
    
        # change the default value of attrs, and the first few lines of render, like so 
        def render(self, name, value, attrs={}): 
         if value is None: 
          value = "" 
         else: 
          # set an attribute on value that the filebrowser templates need in 
          # order to display the thumbnail photo in the admin 
          for suffix in ['gif', 'GIF', 'jpg', 'JPG', 'png', 'PNG']: 
           if hasattr(value, 'path') and value.path.endswith("." + suffix): 
            value.filetype = "Image" 
            break 
         ... # the rest unchanged 
    
    
    # admin.py 
    
    from filebrowser.fields import FileBrowseWidget 
    
    class FileBrowseForm(forms.ModelForm): 
        # Use a CharField, not an ImageField or FileField, since filebrowser 
        # is handling any file uploading 
        image = forms.CharField(required=True, widget=FileBrowseWidget()) 
    
    class SomeModelAdmin(admin.ModelAdmin): 
        # SomeModel has an ImageField named image 
        form = FileBrowseForm 
    
        ... # the rest of the admin definition 
    

    이것은 약간 못 생겼지 만 지금은 효과가있는 것처럼 보입니다. 그것은 django-filebrowser에 대한 모델 수준의 종속성을 제거하고 의존성을 관리자에게 푸시합니다.

    2

    @zlovelady의 답에 대한 부록으로, 나는 또한 내 모델 정의에서 django-filebrowser를 분리하려고합니다.

    아마도 코드가 변경되었지만 제조법이 더 이상 작동하지 않았을 수 있습니다. 나는 그것이 작동하게하려면이와 결국 (가 하위 클래스라는 FileBrowserWidget 일) :

    from filebrowser.base import FileObject 
    from filebrowser.fields import FileBrowseWidget as fb_FileBrowseWidget 
    from filebrowser.sites import site as filebrowser_site 
    
    class FileBrowseWidget(fb_FileBrowseWidget): 
        def render(self, name, value, attrs=None): 
         if value is None: 
          value = "" 
         else: 
          value = FileObject(value.name, site=self.site) 
         return super(FileBrowseWidget, self).render(name, value, attrs) 
    
    class FileBrowseForm(forms.ModelForm): 
        # Use a CharField, not an ImageField or FileField, since filebrowser 
        # is handling any file uploading 
        image = forms.CharField(
         required=True, 
         widget=FileBrowseWidget(attrs={'site':filebrowser_site}) 
        ) 
    

    나는 노 grappelli 버전을 사용하지 않는하지만 난 관련 코드에 같은 모습은, 중요한 생각하지 않는다 두 버전.

    +0

    이것은 나를 도와 줬다. – sdornan