1

アプリケーションの一部として、1つのhtmlページに結合したいという簡単なメモがあります。1つのページにはメモを送信するためのフォームがあり、もう1つのページには結果が表示されます。フォームと結果の両方を同じページに表示したいと思います。

これを実現するためにDjangoのテンプレート継承を使用しようとしていますが、結果が計画どおりに機能していません。私のやり方で(明らかに不適切に)使用すると、結果が表示されず、フォームの[送信]ボタンのみが表示されます。実際の形ではありません。

これはかなり単純なはずですが、私はいくつかのバリエーションを試し、潜在的なソリューションとテンプレートのドキュメントを何時間も調査しましたが、成功しませんでした。

私が間違っていることを説明できる人がいれば、それは非常にありがたいです。

基本的なフォームテンプレートを使用したコードは次のとおりです。

{% extends 'base.html' %}
{% block page_title %}Notebook{% endblock %}
{% block headline %}Notebook{% endblock %}
{% block content %}
<h2>Headline</h2>
    <div class="row">
    <div class="span8">

<form action="" method="post">{% csrf_token %}
{{ form.as_p }}
<input type="submit" class="btn btn-primary" value="Submit" />
</form>
    </div>

    </div>

{% endblock %}

そして、これが、フォームと結果の両方を理想的に含む、意図された拡張フォームです。

{% extends 'report/write_note.html' %}


{% block extendscontent %}
    <div class="span4 offset8">
            {% if notes %}
            {% for note in user.notes.all reversed %}
             <h3>{{ note.title }}</h3>
             <p>{{ note.date }}</p>
             <p>{{ note.copy }}</p>
            {% endfor %}

            {% else %}
            <p>You have no notes stored.</p>

           {% endif %}
     </div>
 {% endblock extendscontent %}

そしてここに見解があります:

@login_required
def submit_note(request):
    if request.method == 'POST':
        notes_form = NotesForm(request.POST, request.FILES)
        if notes_form.is_valid():
            new_note = notes_form.save(commit=False)
            new_note.author = request.user
            new_note.save()
            return HttpResponseRedirect( "" )
    else:
        notes_form = NotesForm()
    return render_to_response("report/write_note.html", {'form': notes_form},   context_instance=RequestContext(request))

@login_required
def all_notes(request):
    all_notes = Notes.objects.all().order_by('-date')
    paginate = paginated_stories(request, all_notes)
    return render_to_response("report/notes.html",
                           {'notes': paginate},
                            context_instance=RequestContext(request))
4

2 に答える 2

2

ビューを組み合わせることで、同じページにフォームとメモの両方を含めることができると思います。つまり、-のようなもの

@login_required
def notes_view(request):
    all_notes = Notes.objects.all().order_by('-date')
    paginate = paginated_stories(request, all_notes)
    # form processing and other code
    # -------------------------------
    # return both form and notes to your template context
    return render_to_response("report/notes.html",{
        'notes': paginate,
        'form': notes_form,
    },context_instance=RequestContext(request))

templatetagまたは、 notesまたはnotes_formをレンダリングするためのカスタムを作成できます

于 2012-07-03T17:19:45.787 に答える
0

これを試して:

{% extends 'report/write_note.html' %}

{% block content %}
    {{ block.super }}

    <div class="span4 offset8">
            {% if notes %}
            {% for note in user.notes.all reversed %}
             <h3>{{ note.title }}</h3>
             <p>{{ note.date }}</p>
             <p>{{ note.copy }}</p>
            {% endfor %}

            {% else %}
            <p>You have no notes stored.</p>

           {% endif %}
     </div>
 {% endblock %}

ブロックをオーバーライドするときは、ブロックをオーバーライドするだけで、「拡張」を追加しません。また、{{ block.super }}ブロックの親バージョンからコンテンツを取得するために使用できます。

于 2012-07-03T17:07:25.570 に答える