Logo
Section 1 / 3

编辑房源视图和模板(orientation)

按照逐步说明添加URL,并创建编辑房源页面的视图和模板。

导入

编辑房源视图和模板(orientation)

按照逐步说明添加URL,并创建编辑房源页面的视图和模板。

我们已经学会了如何创建和查看新的房源信息,现在来学习如何编辑和删除房源信息。

编辑房源页面的URL

首先,我们需要将编辑房源页面的URL添加到listings/urls.py文件中。

1path('edit_listing/<edit_id>/', views.edit_listing, name='edit_listing')

与详情页面类似,我们需要在URL中包含房源的ID,以便能够编辑正确的房源。

编辑房源视图

由于我们要修改一个表单,因此编辑房源的视图与详情视图有所不同。打开views.py文件,并添加以下代码。

1def edit_listing(request, edit_id): 2 listing = Listings.objects.get(id=edit_id) 3 4 if request.method != 'POST': 5 form = ListingForm(instance=listing) 6 else: 7 form = ListingForm(request.POST, request.FILES, instance=listing) 8 if form.is_valid(): 9 form.save() 10 return redirect('listings:all_listings') 11 12 context = {'listing': listing, 'form': form} 13 return render(request, 'listings/edit_listing.html', context)

新建房源视图与编辑房源视图的主要区别在于:我们是在编辑已存在的房源,而不是创建新房源。

首先,我们获取需要编辑的具体房源(第2行)。一旦完成这一步,后续流程与新建房源视图非常相似。有关表单工作原理的详细说明,请参考前面的「新建房源页面」课时。

如果请求不是POST请求(第4行),我们生成一个表单。此时,表单字段会自动填充该房源现有的信息。为此,设置instance=listing(第5行),从数据库中获取特定实例。

如果请求是POST请求,我们希望在数据库中更新一个已存在的模型实例。为此,使用instance=listing(第7行),以便在重新提交表单时覆盖数据库中的该实例。

编辑房源模板

在views.py中添加代码后,接下来需要创建对应的模板。对于编辑房源页面,我们在模板文件夹中创建一个名为edit_listing.html的模板,并添加以下代码。

1{% extends "listings/base.html" %} 2 3{% block content %} 4 5<h1>编辑房源</h1> 6 7<form action="{% url 'listings:edit_listing' listing.id %}" method='post' enctype="multipart/form-data"> 8 <div class="form-group"> 9 {% csrf_token %} 10 {{ form.as_p }} 11 </div> 12 <button type="submit" class="btn">编辑房源</button> 13</form> 14 15{% endblock content %}

我们在表单的action中包含了listing.id(第7行),因为提交表单时需要这个ID来确保编辑的是正确的房源。

练习

现在,是时候动手实践设置并运行编辑房源页面了。

  1. 在下方的代码编辑器中打开listings/urls.py。复制第一个代码片段中的编辑房源页面的URL,并添加到该文件中。
  2. 在下方的代码编辑器中打开listings/views.py。复制第二个代码片段中的编辑房源视图代码,并添加到该文件中。
  3. 复制最后一个代码片段中的编辑房源模板代码,并添加到listings/templates/listings/edit_listing.html中。

No configuration found for ID: 6cd2fa2a0d6df942b68b5ce1546395cff115927c589c1940935f8c17ce7526af

我的列表页面

激活编辑按钮