用函数在Django views.py中打破嵌套循环
我有一个嵌套循环,想要跳出这个循环。经过在这个网站的搜索,似乎最好的做法是把嵌套循环放到一个函数里,然后用返回值来跳出它。请问在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
的文件里,这样看起来更整洁。但如果你只有一两个函数,那就没必要这么做。