Не знаю, почему @ dm03514 удалил свой ответ, но я опубликую что-то вроде этого, так как это было бы и моими мыслями.
Если шаблоны достаточно разные, то вы правыветвление повсюду - плохая идея.Это просто сделает ваш шаблон запутанным беспорядком.Так что просто создайте отдельный шаблон для каждого типа пользователя.Затем, по вашему мнению, вы можете выбрать тот или иной шаблон для отображения в зависимости от типа пользователя.Например:
Представления на основе функций старого стиля:
def profile_view(request):
if request.user.get_profile().type == 'foo':
template = 'path/to/foo_profile.html'
elif request.user.get_profile().type == 'bar':
template = 'path/to/bar_profile.html'
else:
template = 'path/to/generic_profile.html' # if you want a default
return render_to_response(template, {'data': 'data'}, context_instance=RequestContext(request))
Представления на основе классов нового стиля:
class MyView(View):
def get_template_names(self):
if self.request.user.get_profile().type == 'foo':
return ['path/to/foo_profile.html']
elif self.request.user.get_profile().type == 'bar':
return ['path/to/bar_profile.html']
else:
return ['path/to/generic_profile.html']
Я не уверен, как настроены ваши типы пользователей, но если он основан на строковом значении, вы даже можете создать что-то гораздо более автоматизированное, например:
template = 'path/to/%s_profile.html' % request.user.get_profile().type
Тогда простосоздайте шаблон для каждого типа на основе этой схемы именования.
И, конечно, каждый шаблон может расширять шаблон base profile.html, позволяя вам исключить некоторые общие функции.