我有一个我想要打破的嵌套循环。在搜索这个站点之后,似乎最好的做法是将嵌套循环放入一个函数中并使用return来突破它。在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})
答案 0 :(得分:2)
是。在views.py
中使用不是视图的函数是很好的(我一直这样做)。如果该函数仅用于该模块中(即通过views.py
中的视图),或仅通过单个视图函数,则这是特别合适的。
如果您担心将其暴露给外界,您可以随时将其设为private function。另外,尝试避免给它一个名为request
的参数,我倾向于下意识地解析在读取代码时将请求作为视图函数的函数。
答案 1 :(得分:2)
你不应该认为Django的观点在任何方面都是特殊的。 只是Python 。因此,您可以在views.py中拥有您喜欢的任何功能。唯一的限制是视图本身必须获取请求对象并返回HttpResponse
的子类。除此之外,您可以在该模块中执行您喜欢的操作,包括您的视图使用的函数,类或常量。
如果您有很多实用程序功能,为了整洁,您可能需要考虑将它们提取到例如应用程序目录中的lib.py
。但如果你只有一两个,就没有必要这样做。