2010-02-09 2 views
0

저는 장고에서 초보자이며 어떻게해야할지 모르겠습니다.Django : 기본 페이지로 한 페이지 설정

필자는 모델 SimplePage를 가지고 있습니다.이 모델은 웹 사이트에서 볼 수있는 웹 페이지를 나타내며 관리자가 콘텐츠를 편집 할 수 있습니다. (나는 이것이 FlatPage와 비슷하다고 생각한다.)

그래서 나는 내 사이트에 대해 SimplePages를 많이 가지고 있는데, 그 중 하나를 메인 페이지로하고 싶다. (a.k.a. 인덱스 페이지.) URL /에서 사용 가능하게 만드는 방법을 알고 있습니다. 그러나 약간 다른 처리를 받기를 원합니다. (다른 페이지와 다른 페이지 요소가 포함되어 있습니다.)

페이지를 기본 페이지로 표시하는 좋은 방법은 무엇입니까? 부울 필드 is_main_page을 SimplePage 모델에 추가하는 방법을 고려해 보았지만 기본 페이지로 표시 될 수있는 페이지는 단 하나 뿐이라고 어떻게 확신 할 수 있습니까?

답변

1

기본 키가있는 settings.py 내에 MAIN_PAGE 설정을 만듭니다. 그런 다음 main_page 뷰를 생성하여 설정을 사용하여 데이터베이스에서 main_page 객체를 검색하십시오.

편집 :

당신은 이런 식으로 할 수도 있습니다 : 메인 페이지에 SimplePage 및 지점을 참조하는 모델을 추가 할 수 있습니다. 기본 페이지보기에서 원하는 SimplePage를 검색하고 django admin의 누구든지 쉽게 변경할 수 있습니다.

+0

"마법 값"을 설정 파일에 저장하면 유연성이 떨어지며 더 나은 해결책이 있습니다. –

+0

예, 최선의 방법은 아닙니다. 나는 편집을 추가했습니다. – gruszczy

0

가장 쉬운 방법은 제안한대로 부울 값을 만드는 것입니다. pre_save 신호를 사용하여 데이터베이스의 다른 모든 것에서 부울 값을 제거하는 것이 가장 간단합니다.

from django.db.models import signals 
def simple_page_pre_save(sender, instance, **kwargs): 
    if instance.is_main_page == True: 
     SimplePage.objects.update(is_main_page=False) 

signals.pre_save.connect(simple_page_pre_save, sender=SimplePage) 

당신이 SimplePage를 저장할 때마다이 방법이 False에 다른 모든 페이지에 대한 is_main_page를 설정하면, 그것은 is_main_page에 해당하는 경우를 참조 할 것. 항상 하나의 is_main_page이 있음을 보장하기 위해 수행해야 할 작업이 있지만 그보다 더 많은 일이 있습니다.

관련 문제