Как получить доступ к части URL-адреса (не полный URL) в шаблоне Django - PullRequest
0 голосов
/ 22 марта 2019

Как мне получить '12', которая является id моделью учителя на этом пути из шаблона Django?

http://localhost:8000/editTeacher/12/

Я искалнемного, и я знаю, как получить весь URL, но не знаю, как мне получить его часть.

Я также пытался использовать request.get('id'), но это не сработало!

Мои urls.py:

urlpatterns = [
    path('admin/', admin.site.urls),
    path('addTeacher/', addTeacherView, name='add-teacher'),
    path('listTeacher/', listTeacherView, name='list-teacher'),
    path('teacherIndex/<int:my_id>/', teacherIndexView, name='teacher-index'),
    path('deleteTeacher/<int:my_id>/',
         deleteTeacherView, name='delete-teacher-view'),
    path('editTeacher/<int:my_id>/', editTeacherView, name='edit-teacher'),
    path('', homeView, name='home')
]

Мои views.py:

def editTeacherView(request, my_id):
    my_instance = Teacher.objects.get(id=my_id)
    teacher = TeacherForm(request.POST or None, instance=my_instance)
    if teacher.is_valid():
        teacher.save()
        return redirect('../../listTeacher/')
    context = {
        'editTeacher': teacher
    }
    return render(request, 'teacher/editTeacher.html/', context)

А вот этот вид, который я буду использовать, чтобы получить идентификатор учителя из URL и удалить его из базы данных

def deleteTeacherView(request, my_id):
    try:
        teacher = Teacher.objects.get(id=my_id)
        if request.method == 'POST':
            teacher.delete()
            return redirect('../../listTeacher/')
    except Teacher.DoesNotExist:
        raise Http404
    context = {
        'teacherId': teacher
    }
    return render(request, 'teacher/deleteTeacher.html', context)

Это страница editTeacher.html:

<form method='POST'>
    {% csrf_token %}
    {{ editTeacher.as_p }}
    <input type="submit" value="Save">
    <a href="../../deleteTeacher/{{ #grab_id }}/">Delete</a>

</form>

1 Ответ

2 голосов
/ 22 марта 2019

Этот вид логики принадлежит представлению, а не шаблону.Вы можете передать my_id в контекст шаблона в вашем представлении, например:

def editTeacherView(request, my_id):
    context = {
        ...
        my_id: my_id,
    }
    return render(request, "edit_teacher.html", context}

Затем в вашем шаблоне вы можете сделать {{ my_id }}

<a href="../../deleteTeacher/{{ my_id }}/">Delete</a>

Обратите внимание, что этоплохая идея жестко закодировать URL-адреса, как это.Вместо этого вы можете использовать тег {% url %}:

<a href="{% url 'delete-teacher-view' my_id %}>

Если вы используете пространство имен (например, app_name = 'teacher'`), то вам необходимо включить это в тег:

<a href="{% url 'teachers:delete-teacher-view' my_id %}>

Аналогично, в ваших представлениях вы можете использовать имя URL при перенаправлении вместо жесткого кодирования URL:

return redirect('list-teacher')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...