2012-07-03 5 views
1

하나의 HTML 페이지에 결합하고자하는 어플리케이션에 간단한 노트를 가지고 있습니다. 한 페이지에는 메모를 제출하는 양식이 있고 다른 페이지에는 결과가 표시됩니다. 같은 페이지에 양식과 결과를 모두 갖고 싶습니다.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 %} 

그리고 여기에 이상적 형태와 결과를 모두 포함하는 것 attemtped 확장 된 형태이다 : 뷰가

{% 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)) 
+0

을 렌더링. –

+0

위의보기 코드를 추가했습니다. –

+0

죄송합니다. 다른보기에서 한보기의 요소를 사용하려고합니까? –

답변

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_form

+0

위대한 작품. 나에게 뭔가 가르쳐 줘서 고마워! 양식과 응답을 결합하는 방법을 확실히 알 수 없었습니다. 단순한! –

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 }}을 사용할 수 있습니다.

+0

거의 완벽했습니다! 양식 필드가 렌더링되지 않는 것을 제외하면 제출 버튼뿐입니다. 그렇지 않으면 메모도 표시됩니다. 양식을 렌더링하는 방법을 알아 내야합니다. –

관련 문제