Django: Как преобразовать два или более FBV в один шаблон
Я хотел бы направить более одного представления на мой шаблон file.html
. К сожалению, моя функция второго представления file_category
не отображает контекст на моей странице. Есть ли конкретный способ сделать это?
Спасибо
ПРОСМОТРОВ
def file_view(request, file_id):
file = File.objects.filter(pk=file_id)
files_p = File.objects.filter(user=request.user.userprofile)
context = {
'file': file,
'files_p': files_p ,
}
return render(request, 'file.html', context)
def file_category(request):
cat = list(for num in range(0, 37))
context = {
'cat': cat
}
return render(request, 'file.html', context)
УРЛЫ
urlpatterns = [
path('show/<file_id>', views.file_view, name="file"),
path('show/<file_id>', views.file_category),
]
Вы можете иметь несколько представлений, указывающих на один и тот же html-шаблон. При условии, что он правильно обрабатывает контекстные переменные.
Например, шаблон не требует файл, так как он не передается в контексте на представление file_category.
Похоже, что проблема заключается в том, что вы не можете иметь один и тот же шаблон url, указывающий на разные представления. Как он узнает, какой из них вы хотите использовать?
Попробуйте это:
path('show/<file_id>/category', views.file_category, name='file_category')
Кроме того, что ваши урлы одинаковы, как сказал Rowan, ваш контекст на втором представлении имеет только cat
и не имеет files_p
Я предполагаю, что вы хотите отобразить объекты файлов. Поэтому вам нужно передать эти объекты в ваш контекст на втором представлении, иначе нечего будет отображать. Если вам нужно отображать совершенно другие объекты во втором представлении, то лучше использовать другой шаблон.