RHZ'S BLOG | 个人分享

  • 首页
  • 笔记
  • 小日常
  • 音乐
  • 读书
  • 软件分享
YOLO
  1. 首页
  2. 笔记
  3. python
  4. 正文

19_3编辑条目

2022年7月1日 274点热度 0人点赞 0条评论
  • 创建让用户能够编辑既有条目的页面

a.url模式edit_entry

  • 这个页面的URL需要传递条目的ID

urls.py

--snip--
urlpatterns = [
    --snip--
    #用于编辑条目的页面
    path('edit_entry/<int:entry_id>/',views.edit_entry,name='edit_entry'),
]
#在URL(如:http://xxx/edit_entry/1/)中传递的ID存储在形参entry_id中。这个URL模式将与其匹配的请求发送给视图函数edit_entry()

β.视图函数edit_entry()

  • 页面edit_entry收到GET请求时,edit_entry()将返回一个表单,让用户能够对条目进行编辑
  • 收到POST请求时(条目文本经过修订时),将修改后的文本保存到数据库

views.py

from django.shortcuts import render,redirect
from .models import Topic,Entry
from .forms import TopicForm,EntryForm
--snip--

def edit_entry(request,entry_id):
    '''编辑既有条目'''
1    entry = Entry.objects.get(id=entry_id)
    topic = entry.topic

    if request.method != 'POST':
        #初次请求:使用当前条目填充表单
2      form = EntryForm(instance=entry)
    else:
3        #POST请求的数据:对数据进行处理
       form = EntryForm(instance=entry,data=request.POST)
       if form.is_valid():
4           form.save()
5           return redirect('noways_app:topic',topic_id=topic.id)
    context ={'entry':entry,'topic':topic,'form':form}
    return render(request,'noways_app/edit_entry.html')
  1. 获取用户要修改的条目对象以及与其相关联的主题
  2. 请求为GET执行if代码块,使用实参instance=entry创建一个EntryForm实例,这个实参让Django创建一个表单,并使用既有条目对象中的信息填充它。用户将可以编辑已有的数据
  3. 处理POST请求时,传递实参instance=entry和data=request.POST让Django根据已有条目对象创建一个表单实例,并根据request.POST中的相关数据对其进行修改
  4. 数据有效即调用save()
  5. 因为条目已关联到特定的主题,然后重定向到显示条目所属主题的页面,用户将在其中看到其编辑的条目的新版本
  6. 如果要显示表单让用户编辑条目或者用户提交的表单无效,就创建上下文字典并使用模板edit_entry.html渲染页面

γ.模板edit_entry

edit_entry.html

{% extends "noways_app/base.html" %}
{% block content %}
   <p><a href="{% url 'noways_app:topic' topic.id %}">{{topic}}</a></p>
   <p>编辑条目:</p>
1   <form action="{% url 'noways_app:edit_entry' entry.id %}"method='post'>
     {% csrf_token %}
     {{ form.as_p }}
2     <button name="submit">保存更改</button>
   </form>

{% endblock content %}
  1. 实参action将表单发送给函数edit_entry()处理。在标签{% url %}中,将条目ID作为实参,让视图函数edit_entry()能够修改正确的条目对象。
  2. 将提交按钮的标签设置成保存更改,更加对用户友好。

δ.链接到页面edit_entry

topic.py

--snip--
{% for entry in entries %}
   <li>
     <p>{{entry.date_added|date:'M d,Y H:i'}}</p>
     <p>{{ entry.text|linebreaks }}</p>
     <P>
       <a href="{% url'noways_app:edit_entry'entry.id %}>编辑条目</a>
     </p>
    <li>
--snip--
  • 将编辑链接放在了每个条目的日期和文本后面。
  • 在循环中使用模板标签{% url %}根据URL模式edit_entry和当前条目的ID属性(entry.id)来确定URL
  • 链接文本为编辑条目,他出现在页面中每个条目的后面

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可
标签: 暂无
最后更新:2022年7月1日

RHZ

即使单枪匹马,我亦勇敢无畏

点赞
< 上一篇
下一篇 >

文章评论

取消回复
归档
  • 2023年2月
  • 2022年12月
  • 2022年11月
  • 2022年10月
  • 2022年9月
  • 2022年8月
  • 2022年7月
  • 2022年6月
  • 2022年5月
  • 2022年4月
  • 2022年3月
  • 2022年2月
  • 2021年12月
  • 2021年11月
  • 2021年10月
  • 2021年8月
  • 2021年7月

COPYRIGHT © 2022 RHZ的博客. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

渝ICP备2022008933号-1