126-对已添加文章的编辑,编辑完成后呈现此文章
2020-08-25 11:19 lzhshn 阅读(216) 评论(0) 收藏 举报模板内一篇已经存在的文章,点击编辑后,进入编辑页面,完成编辑后,回到这篇文章的页面(回到原点)。
先看文章模板:
{# show and go to edit a note #}
<div>
<h3>{{pk_note.title}}</h3>
<p><a href="{% url 'notebook:edit_note' pk_note.pk %}">edit</a></p>
<p>Create time:{{pk_note.pub_time}} Update time:{{pk_note.update_time}}</p>
{% autoescape off %}
<p>{{pk_note.content}}</p>
{% endautoescape %}
<p>{{pk_note.personal_tags.all}}</p>
</div>
这里会显示文章的各种内容,通过一个edit链接出去,这里除了要指向那个用于编辑的views函数以外,还要传递当前这篇文章的pk值。从文章界面到编辑界面,再重回文章界面,都是对同一个pk值的文章进行操作。
在views函数里,需要反向地将一个模型内容,存入到form里,然后显示出来:
def edit_note(request, pk):
the_note = get_object_or_404(MyNote, id=pk)
if request.method != 'POST':
form = NoteForm(instance=the_note)
all_comment = the_note.comment_set.all().order_by('-add_time')
context = {'form': form, 'the_note': the_note, 'all_comment': all_comment}
return render(request, 'edit_note.html', context)
else:
form = NoteForm(instance=the_note, data=request.POST)
if form.is_valid():
form.save()
return HttpResponseRedirect(reverse('notebook:one_note', args=[the_note.pk]))
关键的表达式是:form = NoteForm(instance=the_note)
由于编辑的模板继承于文章的模板(base.html ——》one_note.html ——》edit_note.html),而文章模板里有显示已经存在的评论,因此这里还需要取出所有的评论,并且放入上下文。
if的部分,负责呈现编辑界面,else的部分负责保存编辑的内容,以及跳转,else的部分和新增一篇文章基本上完全一致。
{% block content %}
{# edit a note and show again #}
<div class="left">
<form action="{% url 'notebook:edit_note' the_note.pk %}" method="post">
{% csrf_token %}
{{form.as_p}}
<input type="submit" value="Save" />
</form>
</div>
{% endblock content %}
编辑的模板就是将前面提到的form里的内容呈现出来,在提交后,重新回到edit_note函数。
这里要特别注意,这个模板在提交后需要回传当前文章的pk值,因此,还要把代表这个文章的变量也传入到上下文:'the_note': the_note,然后在action里,把pk值取出来。
浙公网安备 33010602011771号