我有一个简单的说明,我想要将我的应用程序的一部分合并到一个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 :(得分: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
答案 1 :(得分: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 %}
当你覆盖一个块时,你只需覆盖该块,就不要在其中添加“extends”。
并且,{{ block.super }}
可用于从块的父版本中获取内容。