2010-04-27 3 views
1

중첩 루프를 사용하고 싶습니다. 이 사이트를 검색 한 후 중첩 된 루프를 함수에 넣고 return을 사용하여이를 중단하는 것이 가장 좋은 방법 인 것 같습니다. 뷰가 아닌 views.py 파일 내부의 함수를 사용할 수 있습니까? 이 기능의 위치에 가장 적합한 방법은 무엇입니까? 내 views.py의 예제 코드는 다음과 같습니다.Django에서 중첩 루프 break.py with functions

@login_required 
def save_bookmark(request): 
    if request.method == 'POST': 
     form = BookmarkSaveForm(request.POST) 
     if form.is_valid(): 
      bookmark_list = Bookmark.objects.all() 
      for bookmark in bookmark_list: 
       for link in bookmark.link_set.all(): 
        if link.url == form.cleaned_data['url']: 
         # Do something. 
         break 
        else: 
         # Do something else. 
     else: 
      form = BookmarkSaveForm() 
     return render_to_response('save_bookmark_form.html', {'form': form}) 

답변

3

장고보기는 어떤 식 으로든 특별하다고 생각해서는 안됩니다. 그냥 파이썬입니다. 따라서, 당신은 views.py에서 당신이 좋아하는 기능을 가질 수 있습니다. 유일한 제한은보기 자체가 요청 객체를 가져와 HttpResponse의 하위 클래스를 반환해야한다는 것입니다. 그 외에도 뷰에서 사용하는 함수, 클래스 또는 상수를 포함하여 해당 모듈에서 원하는 것을 할 수 있습니다.

많은 유틸리티 기능을 사용하는 경우 정리를 위해 앱 디렉토리에 lib.py 등으로 추출하는 것이 좋습니다. 그러나 당신이 방금 하나 또는 두 가지를 가지고 있다면 그렇게 할 필요가 없습니다.

3

예. views.py에는보기가 아닌 기능이 있어도 괜찮습니다. (나는 항상이 작업을합니다.) 이는 해당 기능이 해당 모듈 내에서만 사용되는 경우 (즉, views.py의보기로) 또는 단일보기 기능으로 특히 적합합니다.

바깥 세상에 노출되는 것을 걱정하면 항상 private function으로 만들 수 있습니다. 또한 request이라는 매개 변수를 사용하지 않으려 고합니다. 코드를 읽을 때보기 기능으로 요청을받는 함수를 무의식적으로 구문 분석하는 경향이 있습니다.