如何在Django模板中访问部分URL地址(不是完整URL)

时间:2019-03-22 15:18:26

标签: python django

在Django模板的此路径中,如何从教师模型的id中获得“ 12”?

  

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中获取老师的id并将其从数据库中删除

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 个答案:

答案 0 :(得分:2)

这种逻辑属于视图而不是模板。您可以将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 ='teachers'`),则需要在标记中包含此名称:

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

类似地,在您的视图中,您可以在重定向时使用URL名称,而不是对URL进行硬编码:

return redirect('list-teacher')