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 Я предполагаю, что вы хотите отобразить объекты файлов. Поэтому вам нужно передать эти объекты в ваш контекст на втором представлении, иначе нечего будет отображать. Если вам нужно отображать совершенно другие объекты во втором представлении, то лучше использовать другой шаблон.

Вернуться на верх