Django редактировать вид не показывает - PullRequest
0 голосов
/ 07 июля 2019

Я новичок в Джанго.

Мое приложение позволяет пользователю создавать project, предоставляя заголовок и содержание тела, удаляя его и обновляя его.

Теперь я создаю, редактирую и обновляю представление для моего приложения, но оно не отображается на моей html-странице.

urls.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 %}

ПРОБЛЕМА

Когда я перехожу к URL-адресам, таким как http://localhost:8000/projects/2/editproject, я не вижу нужной формы обновления, страница существует, но она ничего не содержит

1 Ответ

1 голос
/ 07 июля 2019

Вы должны передать 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...