我使用代碼找到here(SO.com)使用相同的模板來添加和編輯記錄,但是當我添加新記錄並單擊提交,我在網址http://192.168.1.3:5678/app/student/edit/None/
上收到404,我不確定爲什麼。添加表單返回無作爲記錄ID,導致URL錯誤
這裏是我的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
請不要分開添加和編輯視圖,除非您有充分的理由這麼做。需要自定義表單的動作*不是一個很好的理由,因爲您可以將其留爲空白,因爲@DanielRoseman解釋說只需執行回發。 –
這不僅僅是表單操作。在topicstarter的代碼中,有不同的處理程序,用'if id:...'來編輯和添加案例。在視圖中設置了活動頁面標題!是的,他應該爲POST處理重複一些東西來單獨添加和編輯,但是對於通用視圖,所有這些東西都會消失。 – ilvar