Проблемы с маршрутизацией URL в Django
Я создаю веб-сайт, который будет использоваться в стоматологической практике, однако у меня возникли проблемы с маршрутизацией URL. Мне нужен шаблон URL типа: Denthelp/kartotek/#nameofclinic#/opretpatient. Мое предложение выглядит следующим образом:
urls.py:
path('kartotek/<str:kl_id>/', views.kartotek, name="kartotek"),
path('kartotek/<str:kl_id>/opretpatient/', views.opretpatient, name="opret_patient"),
Views. py:
def kartotek(request, kl_id):
kliniknavn = Klinik.objects.get(navn=kl_id)
E_patient = kliniknavn.patient_set.all()
context = { 'kliniknavn':kliniknavn, 'E_patient':E_patient}
return render(request,'DentHelp/kartotek.html', context )
def opretpatient(request, kl_id):
kliniknavn = Klinik.objects.get(navn=kl_id)
form = PatientForm()
if request.method == 'POST':
form = PatientForm(request.POST)
if form.is_valid():
form.save()
return redirect('kartotek/<str:kl_id>/')
context = {'form':form, 'kliniknavn':kliniknavn}
return render(request,'DentHelp/kartotek/<str:kl_id>/opretpatient.html', context)
При выполнении кода я получаю OSError для последней строки кода, показанной здесь.
Есть ли у вас какие-нибудь советы, чтобы это работало?
Вы путаете render с redirect. render рендерит шаблон динамически с атрибутами из context, где redirect перенаправляет пользователя на другой вид. Для вызова render необходимо указать имя шаблона и контекст. Для перенаправления необходимо указать имя url и параметры (если требуется). Вот как вы должны сделать это в своем коде:
def opretpatient(request, kl_id):
kliniknavn = Klinik.objects.get(navn=kl_id)
form = PatientForm()
if request.method == 'POST':
form = PatientForm(request.POST)
if form.is_valid():
form.save()
return redirect('kartotek', kl_id) # url name and parameter
context = {'form':form, 'kliniknavn':kliniknavn}
return render(request, 'DentHelp/kartotek/opretpatient.html', context) # template name and context