2012-04-19 4 views
0

업그레이드 후 장고에서 클래스 기반 뷰로 변경하려고하고 있는데 두 가지 질문이 있습니다. 이것은 내 코드입니다.장고에서 클래스 뷰로 변경하는 동안의 문제

# urls.py 

urlpatterns += patterns('project.app.views', 
    ('^$', 'index'), # Old style 
    url(r'^test/$', SearchView.as_view()), # New style 
) 


# views.py 

class SearchView(TemplateView): 
    template_name = 'search.html' 

    def get_context_data(self, **kwargs): 
     messages.success(request, 'test') 
     return {'search_string': 'Test'} 

이 코드를 실행하면 처음에는 name 'SearchView' is not defined 오류가 발생합니다. 아무도 이유를 아나요?

from project.app.views import SearchView을 추가하는 것은 엉망이며 내가 원하는 방식이 아니지만, 나머지 작업을 할 수 있는지 알아보기 위해 노력합니다. 그렇다면 messages 때문에 global name 'request' is not defined이 나옵니다. 이것은 의미가 있지만 여기에 요청 객체를 얻으려면 어떻게해야합니까?

그래서 알고 싶습니다. : 의도 한대로보기가 작동하고 메시지를 get_context_data()에 어떻게 사용합니까?

답변

1

당신은 name 'SearchView' is not defined를보고있다. 이것이 추한 것 같으면 views.pysearch = SearchView.as_view()을 입력하고 이전 스타일을 사용하여보기를 search으로 대신 참조 할 수 있습니다. 요청을 메시지를 추가하려면 self.request에서 액세스 할 수 있습니다. 업데이트 된 소스 예제가 아래에 나와 있습니다.

# views.py 
class SearchView(TemplateView): 
    template_name = 'search.html' 

    def get_context_data(self, **kwargs): 
     messages.success(self.request, 'test') 
     return {'search_string': 'Test'} 

search = SearchView.as_view() 

# urls.py 
urlpatterns += patterns('project.app.views', 
    url('^$', 'index'), # Old style 
    url(r'^test/$', 'search'), # New style 
) 
+0

감사합니다. 장고는 'project.app.views'의 SearchView 클래스를 이전 스타일 함수와 마찬가지로 패턴으로 찾을 것이라고 생각했습니다. 나는 그것이 이상하지 않다는 것을 안다. – olofom

+0

가져 오기를하지 않으면 원래 'urls.py'가 유효한 Python이 아닙니다. 장고는 그렇게 할 수 없습니다. –

0

한 번에 하나의 질문 (StackOverflow 가이드 라인)을 부탁드립니다. 어쨌든

는 :

  • 이 클래스 기반 뷰 작동하도록하는 방법이다. 자동 가져 오기 마법은 없으며 클래스를 가져 와서 as_view() 메소드를 사용하면됩니다.
  • 보기 클래스의 요청 개체는 self.request을 통해 액세스 할 수 있습니다. 당신이 당신의 urls.pySearchView를 가져 오지 않았기 때문에
+3

첫 번째 단어는 맞지만 두 번째 단어는 올바르지 않습니다. 모든 클래스 기반 뷰는 요청을'self.request'로 설정합니다.이 요청은'get_context_data '를 포함하여 어디서나 액세스 할 수 있습니다. 실제로 dispatch 기능을 변경해야하는 경우가 아니라면'dispatch'를 재정의해서는 안됩니다. –

+0

당신이 맞습니다. 최대한 빨리 수정 될 것입니다. – Dor