1

편집 : 변수의 이름을 변경할 수 있음을 알고 있습니다. 내 질문은 그 일을하고 싶지 않은 경우입니다. 나는 장고가 자동으로 생성하는 모든 변수가 무엇인지 알고 싶다.템플릿의 Django 컨텍스트 변수 이름


내가 장고가 시작하기 자습서와 나는 한 지점에서 그것을 설명 generic views section에있어하고 있어요 : 튜토리얼의 이전 부분에서

를, 템플릿은 함께 을 제공 한 문맥을 포함하는 문맥과 latest_question_list 문맥 변수. DetailView의 경우, 질문 변수는 으로 자동 제공됩니다 - Django 모델 (질문)을 사용하고 있으므로 Django는 으로 컨텍스트 변수의 적절한 이름을 결정할 수 있습니다. 그러나 ListView의 경우 자동 생성 된 컨텍스트 변수는 question_list입니다.

제 문제는 장고가이 "적절한 이름"을 어떻게 결정하는지 모릅니다. 내 자신의 템플릿을 쓸 때 이것을 알고 싶습니다. 그런 템플릿에서 사용할 컨텍스트 변수 이름을 알고 싶습니다.

내 모델이 Question 인 경우 question 컨텍스트 변수에 해당 질문이 저장되고 question_list 컨텍스트 변수에는 모든 질문이 저장됩니다.

내 의심 : 다른 컨텍스트 변수 이름을 사용할 수 있습니까? 그리고 그들은 무엇을 저장할 것인가? 설명서에서이 부분을 찾을 수없는 것 같습니다. 어디 있는지 알고 있으면 알려주세요.

+0

는 참고로 자신이 설정 상황에 맞는 템플릿 변수를 설정할 수 있습니다'context_object_name = 'yourname''을 뷰 속성으로 사용하십시오. – makaveli

+0

예,이 이름을 직접 설정할 수 있음을 알고 있습니다. 내 질문은 그 이름을 설정하고 싶지 않은 경우입니다. django가 자동으로 생성하는 변수가 무엇인지 알고 싶습니다. – Adocad

답변

1

:

이 웹 사이트는 모든 장고 버전의 CBVs에 대한 모든 정보를 가지고 문서이지만 ...

이보기에서 조작하는 데이터 목록 을 포함하는 데 사용할 컨텍스트 변수 이름을 반환합니다. object_list가 Django 객체의 이고 context_object_name이 설정되지 않은 경우 컨텍스트 이름 은 쿼리 세트가 구성된 의 출신 모델의 모델 이름이되며 후치 '_list'가 추가됩니다.예를 들어 모델 모델에는 article_list라는 컨텍스트 개체가 있습니다.

get_context_object_name 방법에 따라 부여하는

이 그 방법의 code의 모습입니다, 그것은 모든 의심 정리한다고 :

""" 
    Get the name of the item to be used in the context. 
    """ 
    if self.context_object_name: 
     return self.context_object_name 
    elif hasattr(object_list, 'model'): 
     return '%s_list' % object_list.model._meta.model_name 
    else: 
     return None 
+0

각 일반 뷰가 둘 이상의 컨텍스트 변수를 생성한다고 생각했습니다. [code] (https://github.com/django/django/blob/master/django/views/generic/list.py) 도움이되었습니다. 감사합니다 – Adocad

+0

도움이 된 것을 기쁘게 생각합니다. – e4c5

1

이 기본 컨텍스트 변수 이름은 Django의 클래스 기반 뷰를 처리 할 때만 적용됩니다.

예. 동물 모델에 DetailView를 사용하고 있다면 Django는 템플릿에서 사용할 수 있도록 'animal'이라는 컨텍스트 변수를 자동으로 생성합니다. 나는 또한 그것이 '대상'의 사용을 허용한다고 생각한다.

또 다른 예는 언급 한대로 animal_list라는 컨텍스트 이름을 생성하는 Animal 모델의 ListView입니다.

그러나이 두 경우 모두 기본 컨텍스트 변수 이름을 변경하는 방법이 있습니다. DetailView에 'context_object_name'을 지정하면 템플릿에서 참조하는 이름이됩니다. 이것은 ListView에도 적용됩니다. 당신은 다른이의 그 부분에 모든 것을 잘 설명되지 않는 context_object_name를 사용하여 뭔가에 question_list을 변경할 수 있습니다

https://ccbv.co.uk/projects/Django/1.9/django.views.generic.detail/DetailView/

관련 문제