2012-08-31 2 views
1

시간에 따라 페이지의 내용을 지우려면 장고 템플릿을 어떻게 사용할 수 있습니까?하루 중 시간에 따라 웹 페이지를 표시하지 않음 (DJANGO)

온라인 음식 배달 사이트를 만들고 있습니다. 인도 오더는 시간별로 구분됩니다.

예를 들어 오후 7시에 배달하는 경우 페이지가 그날 오후 6 시까 지 정상적으로 표시되기를 원할 것입니다. 그런 다음 오후 6:01에 "이 배달 시간을 사용할 수 없습니다."와 같은 말을하기를 원합니다.

답변

1

원하지 않는 동작을 방지하려면 템플릿 논리에 의존해서는 안됩니다.

두 변수를 만들 수 있습니다. 예 : 새 변수에 따라

if TIME_OPEN < datetime.now().time() < TIME_CLOSED: 
    urlpatterns += patterns('shop.customers.views', 
    (r'^checkout/$', 'checkout'), 
) 

당신이 UI 로직, 예를 들어, 각 템플릿에 환경 변수를 공급하는 context_processor을 추가 할 수 있습니다 : 당신의 URL 패턴에서

from django.conf import settings 

TIME_OPEN = getattr(settings, 'TIME_OPEN', datetime.now().replace(hour=10, minute=30, second=0, microsecond=0).time()) 
TIME_CLOSED = getattr(settings, 'TIME_CLOSED', datetime.now().replace(hour=21, minute=30, second=0, microsecond=0).time()) 

당신이 뭔가를 추가 할 수 있습니다 {'shop_open': True}.

이 예제는 서버 시간에 의존하므로 로컬 시스템과 다를 수 있으므로 확인해야합니다. 또 다른 접근법은 특정 시간이 필요한 뷰를 감쌀 수있는 데코레이터를 만드는 것입니다.

그럼, 꼭 확인하십시오. 템플릿 로직에 의존하지 않고 뷰를 보호하십시오.

+0

datetime.now(). time()은 urls.py 모듈 초기화 시간이 아닌 요청 시간을 반환합니까? –

+2

나는 시간 논리를 템플릿에서 제거해야하지만'datetime.now() '에 대한 비교는'urls.py'가 아닌 뷰에 속한다는데 동의합니다. URL 패턴은 서버가 시작될 때 한 번만로드됩니다. 비교를'urls.py'에두면'datetime.now()'는 요청 시간이 아니라'urls.py' 모듈이로드 된 datetime에 해당합니다. – Alasdair

+0

@Alasdair 뷰 레이어 접근 방식으로 데코레이터를 제안했지만, 더 깨끗한 데 동의합니다. –

관련 문제