0

我正在使用此处找到的代码(SO.com) 使用相同的模板来添加和编辑记录,但是当我添加新记录并单击提交时,我在 URL 上得到一个 404 http://192.168.1.3:5678/app/student/edit/None/,而我不是完全确定为什么。

这是我的相关部分urls.py

    url(r'^app/lesson/new/$', 'edit_lesson', {}, 'lesson_new'),
url(r'^app/lesson/edit/(?P<id>\d+)/$', 'edit_lesson', {}, 'lesson_edit'),

这是我的相关部分views.py

def edit_lesson(request, id=None, template_name='lesson_edit_template.html'):
if id:
    t = "Edit"
    lesson = get_object_or_404(Lesson, pk=id)
    stu = get_object_or_404(Student, pk=sid)
    if stu.teacher != request.user:
        raise HttpResponseForbidden()
else:
    t = "Add"
    lesson = Lesson()

    if request.POST:
        form = LessonForm(request.POST, instance=lesson)
        if form.is_valid():
            form.save()

            # If the save was successful, redirect to another page
            return view_lessons(request)

    else:
        form = LessonForm(instance=lesson)

    return render_to_response(template_name, {
        'form': form,
        't': t,
        'lesson': lesson,
            }, context_instance=RequestContext(request))

最后,这是我的模板:

<h1>{{ t }} Lesson</h1>
<form action="/app/lesson/edit/{{ lesson.id }}/" method="post"> {% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Submit" />
</form>

我确定我错过了一些非常简单的东西,但我似乎无法找到它。如果这有什么不同,我正在使用 Django 1.3.1。

谢谢,MC

4

2 回答 2

1

无需在表单的action属性中指定任何 URL。做就是了

<form action="" method="post">

它会 POST 回您最初用来访问它的 URL,这就是您想要的。

于 2012-05-25T08:42:23.033 回答
0

在添加情况下{{ lesson.id }}是无,因为lesson是未保存的Lesson()实例,没有 pk,所以您的表单被触发到不存在的 URL。

我建议分离创建和编辑视图并以不同的方式处理它们(甚至继承通用视图 - 使用新的基于类的通用视图很容易和愉快)。

此外,{% url %}在任何地方都使用模板标签,而不是硬编码的 url。

于 2012-05-25T05:43:09.430 回答