zoukankan      html  css  js  c++  java
  • 19.1.3 编辑条目

    19.1.3  编辑条目
    
    下面来创建一个页面,让用户能够编辑既有的条目:
    
    1.URL 模式edit_entry:
    
    这个页面的URL需要传递要编辑的条目的ID,修改后的lerning_logs/urls.py如下:
    
    urls.py
    
    node2:/django/mysite/learning_log/learning_logs#cat urls.py
    from django.conf.urls import url
    from . import views
    urlpatterns = [
       
       url(r'^$',views.index,name='index'),
       url(r'^topics/$',views.topics,name='topics'),
       url(r'^new_topic/$',views.new_topic,name='new_topic'),
       url(r'^topics/(?P<topic_id>d+)/$',views.topic,name='topic'),
       url(r'^new_entry/(?P<topic_id>d+)/$',views.new_entry,name='new_entry'),
       url(r'edit_entry/(?P<entry_id>d+)$',views.edit_entry,name='edit_entry'),
    
    ]
    
    
    在URL(如http://localhost:8000/edit_entry/1/)中传递的ID存储在形参entry_id中,
    
    这个URL模式将预期匹配的请求发送给视图函数edit_entry()
    
    
    2.视图函数edit_entry()
    
    页面edit_entry收到GET请求时,edit_entry()将返回一个表单,
    
    让用户能够对条目进行编辑。该页面收到POST请求(条目文本经过修订)时,
    
    它将修改后的文本保存到数据库中
    
    from django.shortcuts import render
    --snip--
    from .models import Topic, Entry
    from .forms import TopicForm, EntryForm
    --snip--
    def edit_entry(request, entry_id):
    """ 编辑既有条目 """
    ? entry = Entry.objects.get(id=entry_id)
    topic = entry.topic
    if request.method != 'POST':
    #  初次请求,使用当前条目填充表单
    ? form = EntryForm(instance=entry)
    else:
    # POST 提交的数据,对数据进行处理
    ? form = EntryForm(instance=entry, data=request.POST)
    if form.is_valid():
    ? form.save()
    ? 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)
    
    我们首先需要导入模型Entry. 在1处,我们获取用户要修改的条目对象,
    
    以及与该条目相关联的主题。 在请求方法为GET时将执行的if代码块中,
    
    我们使用实参instance=entry创建一个EntryForm实例。
    
    这个实参让Django创建一个表单,并使用既有条目对象中的信息填充它。
    
    用户将看到既有数据,并能编辑它们
    
    
    处理POST请求时,我们传递实参instance=entry和data=request.POST,让Django根据既有条目
    
    对象创建一个表单实例,并根据request.POST中的相关数据对其进行修改。
    
    3.模板edit_entry.html
    
    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>
    <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 %}
    
    
    
    node2:/django/mysite/learning_log/learning_logs/templates/learning_logs#cat topic.html
    {% 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 'learning_logs:edit_entry' entry.id %}">edit entry</a>
    </p>
    </li>
    {% endfor %}
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
  • 相关阅读:
    Java核心类库——线程Thread
    xml基本写法和dtd schema的用法,JAVA读写XML
    Java核心类库——文件和文件夹的管理File类
    使用文件依赖项缓存页输出
    根据 HTTP 标头缓存页的版本
    缓存 ASP.NET 页的某些部分
    根据请求浏览器缓存页的版本
    根据自定义字符串缓存页的版本
    缓存页的多个版本
    阿拉的宣告~~~
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13348702.html
Copyright © 2011-2022 走看看