(Django)19.1.3编辑条目

目标:创建一个页面,让用户能够编辑现有的条目。

1.URL模式edit_entry

learning_logs/urls.py

from django.conf.urls import url
from . import views

urlpatterns = [
    --snip--

    # to edit the page
    # 代码/(?P<entry_id>\d+)/与包含在两个斜杠内的整数匹配,并将这个整数存储在一个名为topic_id的实参中
    url(r'^edit_entry/(?P<entry_id>\d+)/$',views.edit_entry,name='edit_entry'),
]

 2.视图函数edit_entry()

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

--snip--
    
def edit_entry(request,entry_id):
    # 根据entry的id获得需要编辑的条目对象
    entry = Entry.objects.get(id=entry_id)
    # 获取这个条目的主题(外键问题??)
    topic = entry.topic
    # 如果请求的方式是GET
    if request.method != 'POST':
    # 我们创建一个表单,并且通过传递实参(instance=entry)使用原有的条目数据填充它
        form = EntryForm(instance=entry)
    else:
        # 处理POST请求时,传递实参instance和data,用原有的条目填充它,并且根据data=request.POST的数据对其修改
        form = EntryForm(instance=entry,data=request.POST)
        # 数据是否规范
        if form.is_valid():
            form.save()
            # 重定向到topic页面
            return HttpResponseRedirect(reverse('learning_logs:topic',args=[topic.id]))
            
    context = {'entry':entry, 'topic':topic, 'form':form}
    return render(request, 'learning_logs/edit_entry.html', context)

3.模板edit_entry

edit_entry.html

{% extends 'learning_logs/base.html' %}
{% block content %}
  <!-- 显示正在操作的条目的信息,并且提供了回到该条目的链接-->
  <p><a href="{% url 'learning_logs:topic' topic.id %}">{{topic}}</a></p>
  <p>Edit Entry:</p>
  <!-- 实参action将表单发回给函数edit_entry进行处理,这里需要传递条目的id -->
  <form action="{% url 'learning_logs:edit_entry' entry.id %}" method='post'>
    {% csrf_token %}
    {{ form.as_p }}
    <button name='submit'>save changes</button>
  </form>
  
{% endblock content %}

4.链接到edit_entry

topic.html

{% extends 'learning_logs/base.html' %}

{% block content %}
  --snip--
  {% for entry in entries %}
    <li>
      <p>{{ entry.date_added|date:'M d, Y H:i' }}</p>
      <p>{{ entry.text|linebreaks }}</p>
      <!-- link to the page to edit entries-->
      <P>
          <a href ="{% url 'learning_logs:edit_entry' entry.id %}">edit entry</a>
      </P>
    </li>
  <!-- if there is no entry, print 'there are...' -->
  {% empty %}
    <li>
      There are no entries for this topic yet.
    </li>
  {% endfor %}
  </ul>

{% endblock content %}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值