首页 > 解决方案 > Django编辑视图不显示

问题描述

我是 Django 的新手。

我的应用程序允许用户project通过提供标题和正文内容来创建、删除和更新它。

现在,我正在为我的应用程序创建和编辑/更新视图,但它没有显示在我的 html 页面中。

网址.py

from django.urls import path, include
from . import views

urlpatterns = [
    path('allprojects', views.allprojects, name='allprojects'),
    path('createproject', views.createproject, name='createproject'),
    path('<int:project_id>', views.projectdetail, name='projectdetail'),
    path('<int:project_id>/editproject', views.editproject, name='editproject'),

]

项目/views.py

@login_required
def editproject(request, project_id):
  if request.method == 'POST':
    if request.POST['title'] and request.POST['content']:
      project = get_object_or_404(Project, pk=project_id)
      project.title = request.POST['title']
      project.content = request.POST['content']
      project.developer = request.user
      project.save()
      return redirect('/projects/' + str(project.id))
    else:
      return render(request, 'projects/editproject.html', {'error':'All fields are required.'})
  else:
    return render(request, 'projects/allprojects.html')

项目/模板/项目/editproject.html

{% extends 'base.html' %}
{% block title %}Edit Project{% endblock %}
{% block content %}


<div class="container">
  <div class="row">
    <div class="mt-4 offset-md-3 col-md-6">
      <h2>Create a new project</h2>
      <form method="post">
        {% csrf_token %}
        <div class="form-group">
          <label for="exampleFormControlTextarea1">Title of the project</label>
          <textarea class="form-control" id="exampleFormControlTextarea1" rows="1" name="title"></textarea>
        </div>
        <div class="form-group">
          <label for="exampleFormControlTextarea1">Brief description of this project</label>
          <textarea class="form-control" id="exampleFormControlTextarea1" rows="5" name="content"></textarea>
        </div>
        <button type="submit" class="btn btn-primary">Submit</button>
      </form>
    </div>
  </div>
</div>


{% endblock %}

问题

当我转到诸如http://localhost:8000/projects/2/editproject没有我想要的更新表单之类的 url 时,该页面存在但它不包含任何内容

标签: django

解决方案


您必须project = get_object_or_404(Project, pk=project_id)在字典中传递 才能获取模板中的值。

像这样改变你的观点:

@login_required
def editproject(request, project_id):
  project = get_object_or_404(Project, pk=project_id)
  if request.method == 'POST':
    if request.POST['title'] and request.POST['content']:
      project.title = request.POST['title']
      project.content = request.POST['content']
      project.developer = request.user
      project.save()
      return redirect('/projects/',project.project_id)
  return render(request, 'projects/editproject.html', {'error':'All fields are required.','project':project})

template你可以得到这样的价值:

同样在您的模板中更改method=put为,如果您想更新,您method=post 还需要提供 。action

<div class="form-group">
<label for="exampleFormControlTextarea1">Title of the project</label>
<textarea class="form-control" id="exampleFormControlTextarea1" rows="1" name="title">
{{project.title}}
</textarea>
 </div>

推荐阅读