Пытаетесь обновить сообщение в базе данных. Но как получить страницу не найдена (404)? И хотите узнать, как обновить данные в базе данных? - PullRequest
0 голосов
/ 18 июня 2019

Я пытаюсь создать приложение для блога с django. При нажатии на сообщение оно отображает это сообщение на отдельной странице. При этом я создал параметр редактирования и удаления. Когда я нажимаю на кнопку редактирования, возвращается параметр редактирования. Но когда я измените какой-либо контент и нажмите на кнопку «обновить», появится ошибка «страница не найдена».

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

 urlpatterns=[
    path('',views.homepage),
    path('register',views.register,name='register'),
    path('login',views.login,name='login'),
    path('logout',views.logout,name='logout'),
    path('newpost',views.newpost,name="newpost"),
    path('<int:pk>', views.post_detail, name='post_detail'),
    path('<int:pk>/edit', views.edit, name='edit'),
    path('update', views.update, name='update'),
 ]

 <!---update.html page--->
  {% extends 'layout.html' %}
  {% block content %}
  <div class="box">
   <form action="updated" method="POST">
     {% csrf_token %}
     <h3>Title of  Post</h3>
     <input type="text" maxlength="100" name="title" class="inputvalues" 
                                           value={{post.title}}>
     <h3>Description</h3>
     <textarea name="desc" style="width: 500px;margin: 0 auto;padding: 
                         5px;height:40%" >{{post.desc}}</textarea>
     <a href="update"></a>
          <button type="submit" id="lg" >Update</button>
    </a>
   </form>
  </div>
  {% endblock %}

   #views.py
    def edit(request,pk):
       post=Post.objects.get(pk=pk)
       return render(request,'update.html',{'post': post})

    def update(request):
       post=Post.objects.get(pk=pk)
       title=request.POST['title']
       desc=request.POST['desc']
       update = 
          Post(title=title,desc=desc,author_id=request.user.username)
       update.title= title
       update.desc= desc
       update.save();
       return redirect('indpost.html')

URL для отображения отдельной записи: http://127.0.0.1:8000/48, где 48 - pk_id URL, когда я нажимаю на правку, равен http://127.0.0.1:8000/48/edit URL, когда я нажимаю на обновление: http://127.0.0.1:8000/48/updated

Ответы [ 2 ]

0 голосов
/ 18 июня 2019

Где вы взяли ПК в этой строке?

def update (запрос): пост = Post.objects.get (рк = рк) #

сначала вы должны обновить путь следующим образом:

path('<int:pk>/update', views.update, name='update') #I STRONGLY RECOMMEND USING A SLUG INSTEAD OF PK

и затем обновите метод следующим образом:

def update(request, pk): 

в обратной части, измените его на:

return redirect('post_detail')

изменить действие формы на:

{% url 'update' pk = post.pk%} # изменить post.pk на ваш pk

теперь вы должны быть в порядке с 404, но вы не обновляете сообщение, вы создали новое, вы можете сделать:

post=Post.objects.get(pk=pk)
title=request.POST['title']
desc=request.POST['desc']
post.title= title
post.desc= desc
post.save()

а почему у вас даже точка с запятой, смеется

0 голосов
/ 18 июня 2019

Ваш urlpattern имеет опечатку:

urlpatterns=[
    path('',views.homepage),
    path('register',views.register,name='register'),
    path('login',views.login,name='login'),
    path('logout',views.logout,name='logout'),
    path('newpost',views.newpost,name="newpost"),
    path('<int:pk>', views.post_detail, name='post_detail'),
    path('<int:pk>/edit', views.edit, name='edit'),
    path('update', views.update, name='update'),
 ]

Последний path() должен быть таким:

path('updated', views.update, name='update'),

OR

Вы можете изменить атрибут action в форме HTML:

  {% extends 'layout.html' %}
  {% block content %}
  <div class="box">
   <form action="update" method="POST">
     {% csrf_token %}
     <h3>Title of  Post</h3>
     <input type="text" maxlength="100" name="title" class="inputvalues" 
                                           value={{post.title}}>
     <h3>Description</h3>
     <textarea name="desc" style="width: 500px;margin: 0 auto;padding: 
                         5px;height:40%" >{{post.desc}}</textarea>
     <a href="update"></a>
          <button type="submit" id="lg" >Update</button>
    </a>
   </form>
  </div>
  {% endblock %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...