2010-12-30 5 views
1

가끔씩 (항상 그런 것은 아니지만) 아약스를 통해 콘텐츠를로드하려는 앱 (장고)이 있다고 가정 해 보겠습니다.Django + jQuery : 가끔 AJAX가 있지만 항상 건조한가요?

간단한 예로 로그인하는 것입니다. 사용자가 로그인하면 페이지를 새로 고치지 않고 주변 환경을 변경하기 만하면됩니다.

그러나 이미 로그인되어 있고 동일한 페이지에 도착 (또는 새로 고침) 한 경우 동일한 콘텐츠를 표시하고 싶습니다.

첫 번째 경우 분명히 내가 일종의 아약스 로그인을하고 이에 따라 페이지에 대한 변경 사항을로드합니다. 충분히 쉬워.

하지만 두 번째 경우는 어떨까요? 다시 돌아가서 {% if user.authenticated %}를 장소 전체에 추가합니까? 이것은 춥고, 어둡고, 젖은 것처럼 보입니다.

반면에, 나는 자바 스크립트 함수 인 loggedIn()에서 모든 ajaxy 항목을 래핑 할 수 있으며 사용자가 인증되면 실행합니다. 하지만 그 대신에 하나가 아닌 두 개의 http 요청이 있습니다. 또한 바람직하지 않다.

그래서 표준 해결책은 무엇입니까?

답변

1

두 번째 옵션을 사용합니다. 예, 두 가지 HTTP 요청으로 인해 약간의 오버 헤드가 발생하지만 둘 모두 페이지의 일부를 검색하므로 동일한 데이터를 두 번로드하는 것과는 다릅니다. 페이지에서 참조되는 이미지 파일 또는 자바 스크립트 라이브러리를 갖는 것과 별개의 요청으로로드됩니다.

로그인 한 사용자와 익명 사용자에 대한 정보가 다르거 나 anon 정보를로드 한 다음 로그인 된 정보로 바꾸고 싶지 않은 경우가 있습니다. 이 경우 메인 페이지에서 공유 요소를로드하고 Ajax (익명 또는 로그인 한 사용자에 따라 다른 데이터)를 통해 항상 가변 부분을로드하십시오.

0

큰 차이가없는 경우 옵션 1을 사용합니다. 상당한 차이가 있다면 두 가지 조건에 대해 두 개의 템플릿을 유지하는 것이 더 쉬울 것이라고 생각합니다. 큰 덩어리가 동일하면 항상 포함시킬 수 있습니다.

1

다른 답변은 다른 답변과 같습니다. 템플릿의 if 조건이 마음에 들지 않으면 템플릿 상속을 사용하는 것이 좋습니다. 예 : 두 가지 템플릿 방식을 사용하고보기에서 하나 또는 다른 것을 렌더링하려면 user.is_authenticated :

인증되지 않은 사용자를위한 기본 템플릿 (예 : main_unauthenticated.html)이 있어야합니다. 일반적인 경우로

{% block userinfo %}Welcome {{ request.user }}{% endblock %} 

을 :

{% block userinfo %}You are not logged in yet{% endblock %} 

이 하나에서 상속 main_authenticated.html 템플릿 확인 : 블록으로 모든 변수 부분을 넣어

{% extends "main_unauthenticated.html" %} 

을 그리고 변수 블록을 제공 템플릿 상속은 포함하는 것보다 강력합니다.

+0

이것은 매우 흥미 롭습니다. 어쩌면 승자 일 겁니다. 내가 그걸로 조금 일하게 해줘. – jMyles

관련 문제