2010-04-27 5 views
1

J'ai une boucle imbriquée dont je voudrais sortir. Après avoir recherché ce site, il semble que la meilleure pratique consiste à mettre la boucle imbriquée dans une fonction et à utiliser le retour pour en sortir. Est-il acceptable d'avoir des fonctions dans le fichier views.py qui ne sont pas une vue? Quelle est la meilleure pratique pour l'emplacement de cette fonction? Voici l'exemple de code à l'intérieur de mes vues.pyBriser la boucle imbriquée dans Django views.py avec une fonction

@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}) 

Répondre

3

Vous ne devriez pas considérer les vues Django comme étant quelque chose de spécial. C'est juste Python. En tant que tel, vous pouvez avoir toutes les fonctions que vous aimez dans views.py. La seule limitation est que les vues elles-mêmes doivent prendre un objet de requête et renvoyer une sous-classe de HttpResponse. En dehors de cela, vous pouvez faire ce que vous aimez dans ce module, y compris avoir des fonctions, des classes ou des constantes qui sont utilisées par vos vues.

Si vous avez beaucoup de fonctions utilitaires, vous voudrez peut-être les extraire par exemple dans votre répertoire d'application pour des raisons de propreté. Mais il n'y a pas besoin de faire ça si vous en avez juste un ou deux.

3

Oui. il est bien d'avoir des fonctions dans views.py qui ne sont pas des vues - (je le fais tout le temps). Ceci est particulièrement approprié si la fonction est uniquement destinée à être utilisée dans ce module (c'est-à-dire par des vues dans celle views.py), ou par une seule fonction de visualisation.

Vous pourriez toujours en faire un private function si vous craignez de l'exposer au monde extérieur. Aussi, évitez de lui donner un paramètre appelé request, j'ai tendance à analyser inconsciemment des fonctions qui prennent une requête en vue de la lecture de code.

Questions connexes