我想通過單擊資料表按鈕來更新和洗掉。但是,不幸的是我無法通過 Axios 傳遞 Django 模式中的 PK=ID。

`from django.urls import path
from . import views
from django.views.generic import TemplateView
app_name = 'todospaapp'
urlpatterns = [
path('', views.index, name='index'),
path('todos/', views.todos, name='todos'),
path('save_todo/', views.save_todo, name='save_todo'),
# path('<pk>/update', views.save_todo_update, name='save_todo_update' ),
path('save_todo_update/<int:pk>', views.save_todo_update, name='save_todo_update'),
]`
在我看來.py
`def save_todo_update(request, pk): try: todoitem = TodoItem.objects.get(pk=pk)
except TodoItem.DoesNotExist:
return HttpResponse(status=404)
if request.method == 'GET':
serializer = TodoItemSerializer(todoitem)
return JsonResponse(serializer.data)
elif request.method == 'PUT':
data = JSONParser.parse(request)
serializer = TodoItemSerializer(todoitem, data=data)
if serializer.is_valid():
serializer.save()
return JsonResponse(serializer.data)
return JsonResponse(serializer.errors)`
在我的 HTML 中:
<tbody>
<tr v-for="todo in todos">
<th scope="row" >[[todo.id]]</th>
<td>[[todo.text]]</td>
<td>[[todo.date_created | formatDate]]</td>
<td>[[todo.date_completed | formatDate]]</td>
<td><a class="btn btn-primary" v-on:click="updateTodo(todo.id)" >Update</a></td>
</tr>
</tbody>
在 Axios 中:
updateTodo: function(id) {
axios({
url: "{% url 'todospaapp:save_todo_update/' id %}",
method: 'put',
data: {
todo_text: this.input_todo
},
headers: {
'X-CSRFToken': '{{ csrf_token }}'
}
}).then(response => {
// console.log(response.data)
this.getTodos()
})
}
},
uj5u.com熱心網友回復:
您不能使用模板標簽來確定 URL,因為模板標簽是在服務器而不是在客戶端決議的,并且 JavaScript 函式在客戶端運行。
因此,您應該使用以下內容構建 url:
axios({
url: 'save_todo_update/' id,
# ?
}).then(response => {
// console.log(response.data)
this.getTodos()
})
uj5u.com熱心網友回復:
將 html 中的 url 更改為:
url: "{% url 'save_todo_update' id %}",
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/348552.html
