Чтобы узнать как правильно вытащить значения, надо сначала узнать почему они вообще приходят в таком неудобном виде, а если возможности узнать и исправить нету - преобразовать в более удобный вид, например во вложенные списки:
def table_view(request):
data = {'2A':
['Name', 'State',
'Name2', 'State2',
'Name3', 'State3',
'Name4', 'State4',
'Name5', 'State5']
}
data['2A'] = [data['2A'][i:i+2] for i in range(0, len(data['2A']), 2)]
return render(request, 'app/template.html', {'students_data': data})
И тогда в шаблоне:
{% for student in data %}
<tr>
<input type="hidden" name="stud" value="{{ student.0 }}" />
<td>{{student.0 }}</td>
<input type="hidden" name="state" value="" class="state"/>
<td id="editable">{{ student.1 }}</td>
</tr>
{% endfor %}
или как вариант - использовать namedtuple, но что там по скорости будет не знаю.