First of all, your PhotoListView is the packaging of the collection, so you should use this.collection inside the view and new PhotoListView({ collection: c }) to create it. Views view the collection parameter in the same way as they relate to model :
constructor / initialization new View([options])
[...] There are several special options that, if passed, will be attached directly to the view: model , collection , el , id , className , tagName and attributes.
Using the correct names will help prevent confusion. In addition, there are several Underscore methods in the views that you can add this.collection.each(...) instead of _.each(this.collection.models, ...) or _(this.collection.models).each(...) . You can also use this.$el instead of $(this.el) .
And now to your real problem. You can add two templates to the view for each model:
PhotoListItemView = Backbone.View.extend({ template0: _.template($('#the-first-template-id').html()), template1: _.template($('#the-other-template-id').html()),
and the ability to specify which one to use:
initialize: function(options) { this.template = this['template' + options.template_number];
Then you just need to specify the group option from the collection view. An underscore each passes the iteration index of the callback function as the second argument, so you only need a little integer math to figure out which template_number use:
this.collection.each(function(photo, i) {