7

views.py からのコード:

def feedback(request):
    if request.method == "POST":
        form = CommentForm(request.POST)
        if form.is_valid():
            form.save()
        else:
            print("form.errors:", form.errors)
    else:
        form = CommentForm()
    articles = Comment.objects.all()
    ResponseDict = {"articles": articles, "form": form}
    return render_to_response("feedback.html", ResponseDict, 
        context_instance = RequestContext(request))

これと、同様の質問への回答からいくつかの変更を試みましたが、何も機能しません。送信ボタンを押すと、html のすべてのフォーム フィールドが空になります。

編集: feedback.html からのコード:

{% extends "base.html" %}
{% block main %}
    <table>
        <form action="/feedback/" method="POST">
            {% csrf_token %}
            <div class="article">
                <label for="name">
                    Ваше имя:
                </label>
                <br />
                <input type="text" name="name" id="name" size="40" class="inputbox" value="" />
                <br />
                <!-- class="inputbox required" -->
                <textarea class="WithoutTinymce" cols="50" rows="10" name="text" id="text"></textarea>
                <br />
                <input type="submit" name="submit" value="Отправить">
            </div> <!-- /article -->
        </form>
    </table>
    {% include "articles.html" %}
{% endblock %}

必要に応じて、base.html からコードを貼り付けることもできます。

EDIT2: base.html から最小化されたコード:

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="cs" lang="cs">
...
<body id="body-id" onload="loaded()">

<!-- Main -->
<div id="main" class="box">
    <div id="page" class="box">
        <div id="page-in" class="box">
            <!-- Content -->
            <div id="content">
                {% block main %}
                {% endblock %}
                <hr class="noscreen" />
            </div> <!-- /content -->
        </div> <!-- /page-in -->
    </div> <!-- /page -->
</div> <!-- /Main -->
</body>
</html>
4

3 に答える 3

5

あなたのテンプレートではform、ビューによって渡されたものを利用していません。

テンプレートの一部を次のように更新できます (フォームのフィールド名がfirst_fieldsecond_field.

<form action="/feedback/" method="POST">
    {% csrf_token %}
    <div class="article">
        <label for="name">
            Ваше имя:
        </label>
        <br />
        {{ form.first_field.errors }}
        {{ form.first_field.label_tag }}: {{ form.first_field }}
        <br />
        <!-- class="inputbox required" -->
        {{ form.second_field.errors }}
        {{ form.second_field.label_tag }}: {{ form.second_field }}
        <br />
        <input type="submit" name="submit" value="Отправить">
    </div> <!-- /article -->
</form>

詳細 -テンプレートを使用してフォームを表示する

于 2012-08-27T09:20:15.003 に答える
3

フォームをテンプレートに戻す必要があります。そして、jpicのリンクに従ってテンプレートでフォームをレンダリングする必要があります。

次の場合、フォームエラーが発生します。

from django.shortcuts import render, redirect

def feedback(request):
    ctx = {}
    ctx['articles'] = Comment.objects.all()
    if request.method == "POST":
        form = CommentForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('/thanks')
        else:
            ctx['form'] = form
            return render(request, 'feedback.html', ctx)
    else:
        ctx['form'] = CommentForm()
    return render(request, "feedback.html", ctx)

テンプレート内:

{% extends "base.html" %}
{% block main %}
    <table>
        <form action="/feedback/" method="POST">
            {% csrf_token %}
            <div class="article">
                {{ form }}
                <br />
                <input type="submit" name="submit" value="Отправить">
            </div> <!-- /article -->
        </form>
    </table>
    {% include "articles.html" %}
{% endblock %}
于 2012-08-27T09:26:15.643 に答える
1

簡単です、あなたのテンプレートはこれを持っています:

<input type="text" name="name" id="name" size="40" class="inputbox" value="" />

そのため、input タグの value 属性は常に空です。

同じことがテキストエリアにも当てはまります。これは常に空にレンダリングする必要があります。

<textarea class="WithoutTinymce" cols="50" rows="10" name="text" id="text"></textarea>

テンプレートでのフォームのレンダリングに関するドキュメントを確認してください

于 2012-08-27T09:19:05.767 に答える