0

ここ(SO.com) にあるコードを使用して、同じテンプレートを使用してレコードの追加と編集の両方を行っていますが、新しいレコードを追加して [送信] をクリックすると、URLhttp://192.168.1.3:5678/app/student/edit/None/に 404 が表示されますが、そうではありません。その理由を正確に確認してください。

my の関連部分は次のurls.pyとおりです。

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

my の関連部分は次の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">

そして、最初にアクセスに使用したURLにPOSTバックします。これはあなたが望むものです。

于 2012-05-25T08:42:23.033 に答える
0

追加の場合{{ lesson.id }}は None です。これlessonはインスタンスが保存Lesson()されておらず、pk がないため、フォームが存在しない URL に送信されているためです。

作成ビューと編集ビューを分離し、それらをさまざまな方法で処理することをお勧めします (または、ジェネリック ビューを継承することもできます。新しいクラス ベースのジェネリック ビューを使用すると、簡単で快適です)。

また、{% url %}ハードコーディングされた URL の代わりに、あらゆる場所でテンプレート タグを使用してください。

于 2012-05-25T05:43:09.430 に答える