zoukankan      html  css  js  c++  java
  • 126-对已添加文章的编辑,编辑完成后呈现此文章

    模板内一篇已经存在的文章,点击编辑后,进入编辑页面,完成编辑后,回到这篇文章的页面(回到原点)。

    先看文章模板:

            {# 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值取出来。

  • 相关阅读:
    Linux
    memory库函数的实现
    剑指Offer面试题1
    Linux
    Linux-配置vim开发环境
    Linux-Find命令
    busybox,alphine,ubuntu,centos/fedore操作系统
    端口映射与容器互联
    docker 数据管理数据卷
    Celery
  • 原文地址:https://www.cnblogs.com/lzhshn/p/13558610.html
Copyright © 2011-2022 走看看