2012-03-04 4 views
2

저는 아주 기본적인 CMS/블로그 작업을하고 있습니다. 내 자신의 사용을 위해 그것은 django-adminfiles와 django- markitup에 달려있다. 앱을 배포하고 싶을 수도 있기 때문에 설치된 종속성이 없는지 확인하기 위해 종속성이 충족되어 있는지 확인하고 django의 기본값으로 되돌아가는 방법을 찾아 내려고 노력했습니다.종속성 처리 및 응용 프로그램 유지 관리

나는 아래 코드를 생각해 냈다. 문제는 성가신 느낌이며 스크립트의 머리 부분에 많은 코드를 추가합니다. 종속성을 다루는 다른 (권장되는) 방법이 있는지 궁금합니다. 내 자신의 질문에 대답 한 경우 (코드가 작동하고 있기 때문에) 모든 의견을 환영합니다.

from django.conf import settings as django_settings 

# Check installed apps for django-markitup and django-adminfiles 
if 'adminfiles' in django_settings.INSTALLED_APPS: 
    from adminfiles.admin import FilePickerAdmin 
    adminfiles = True 

    #inherit from FilePickerAdmin 
    class ModelAdmin(FilePickerAdmin): 
     pass 
else: 
    adminfiles = False 

    #inherit from admin.ModelAdmin if adminfiles =false 
    class ModelAdmin(admin.ModelAdmin): 
     pass 

#then my own admin class inherits from ModelAdmin above  
class HomePageAdmin(ModelAdmin): 
    exclude = ('slug',)  
    list_display = ('title', 'status',) 
    list_filter = ('section',) 

    if adminfiles: 
     adminfiles_fields = ('body') 

나는 신선한 장고 프로젝트에 응용 프로그램을 사용하거나 설치된 앱에서 adminfiles를 제거하고 여전히 관리자에서 작동 할 수 있습니다.

+0

당신이 당신의'HomePageAdmin' 클래스의 if 문 필요하십니까 :

그런 다음 admin.py에 다음을 추가? 'admin.ModelAdmin'을 직접적으로 하위 클래스로 만들면'adminfiles_fields'는 무시되지 않을까요? – Alasdair

+0

지적 해 주셔서 고맙습니다. adminfiles_fields에 대한 if if 문은 필요하지 않습니다. MarkitupWidget에 대해서는 코드를 변경했습니다. 이 모든 것을 켜거나 끌 수있는 좋은 settings.py를 작성할 수 있는지 알게 될 것입니다. – Maarten

답변

1

이 내가 결국 그것을 어떻게 있습니다 :

import django 
from django.conf import settings 

SECTIONS_EXTRAS = getattr(settings, 'SECTIONS_EXTRAS', False) 

내가 지금 쉽게에 설정하고 내 프로젝트의 설정 파일에서 해제 할 수 있습니다

이 응용 프로그램 모듈 내부의 settings.py 파일을 만듭니다.

from django.conf import settings as django_settings 
from sections.models import HomePage, 
from sections import settings 

markitup = False 

if settings.SECTIONS_EXTRAS: 
    # Check installed apps for django-markitup and django-adminfiles 
    if 'adminfiles' in django_settings.INSTALLED_APPS: 
     from adminfiles.admin import FilePickerAdmin 

    class ModelAdmin(FilePickerAdmin): 
     pass 

    if 'markitup' in django_settings.INSTALLED_APPS: 
     from markitup.widgets import MarkItUpWidget 

    markitup = True 
else: 
    class ModelAdmin(admin.ModelAdmin): 
     pass 

class HomePageAdmin(ModelAdmin): 
    exclude = ('slug',) 

    list_display = ('title', 'status', 'section') 
    list_filter = ('section',) 

    # Extras 

    adminfiles_fields = ('body') 

    if markitup: 
     def formfield_for_dbfield(self, db_field, **kwargs): 
      if db_field.name == 'body': 
       kwargs['widget'] = MarkItUpWidget() 
      return super(HomePageAdmin, self).formfield_for_dbfield(db_field, **kwargs) 
관련 문제