用函数在Django views.py中打破嵌套循环

1 投票
2 回答
2685 浏览
提问于 2025-04-15 22:03

我有一个嵌套循环,想要跳出这个循环。经过在这个网站的搜索,似乎最好的做法是把嵌套循环放到一个函数里,然后用返回值来跳出它。请问在views.py文件里放一些不是视图的函数可以吗?这个函数放在哪里比较好?下面是我在views.py里的示例代码:

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

2 个回答

2

没问题,在 views.py 文件里写一些不是视图的函数是可以的——我经常这么做。这种做法特别合适,如果这个函数只是为了在这个模块内部使用(也就是说,只被 views.py 里的视图调用),或者只被一个特定的视图函数使用。

如果你担心这个函数被外部调用,可以把它设为私有函数。另外,尽量避免给它起个叫 request 的参数名,因为我在读代码的时候,看到带有 request 参数的函数,脑海里会不自觉地把它当成视图函数。

2

你不需要把Django的视图想得特别复杂。它其实就是Python。所以在views.py文件里,你可以写任何你想要的函数。唯一的要求是,视图函数必须接收一个请求对象,并返回一个HttpResponse的子类。除此之外,你可以在这个模块里随意操作,包括定义函数、类或者常量,这些都可以在你的视图中使用。

如果你有很多实用的函数,可能会想把它们提取到一个比如lib.py的文件里,这样看起来更整洁。但如果你只有一两个函数,那就没必要这么做。

撰写回答