簡體   English   中英

Django - 沒有將 id 從模板傳遞到視圖

[英]Django - Not passing id from template to views

在我的 ToDoApp 中,我無法將 ID 發送到我的 function。不確定我犯了什么錯誤。

似乎我的 function 是正確的,因為當我用“datechange/1”測試表單操作時。 有效。

這是我的代碼:

Index.html

{% extends 'base.html' %}
{% block content %}

<h3 style = "margin-bottom: 20px"><strong>To Do List App</strong></h3>

<form method="POST" action="datechange/{{task.id}}">
    {%csrf_token%}
<ul class="list-group">
{% for task in tasklist %}


<li class="list-group-item d-flex justify-content-between align-items-center">
    <input type='hidden' name = {{task.id}}>{{task.tasks}}
    <span class="badge bg-primary rounded-pill">{{task.duedate}}
        <input type="date" name="datepick"/>
        <input type='submit' value = 'Update'>   
    </span>
</li>
{% endfor %}

</form>

視圖.py

def index(request):
    tasklist = Task.objects.all()
    return render(request, 'index.html', {'tasklist':tasklist})

def datechange(request,id):
    # taskid = request.POST.get(id='task.id')
    # task = Task.objects.get(id=taskid)
    task = Task.objects.get(id=id)
    datepick = request.POST.get('datepick')
    task.duedate = datepick
    task.save()
    return HttpResponseRedirect(reverse('index'))

網址.py

from django.contrib import admin
from django.urls import path
from . import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('',views.index,name='index'),
    path('datechange/<int:id>',views.datechange,name='datechange'),
]

應用截圖

不要以這樣的形式使用操作,Django 對於這樣簡單的datechange有更好的行為。也不需要視圖數據更改。 只需將該視圖中的所有內容放入if request.method == "POST"中即可:

def index(request):
    if request.method == "POST":
        task_id = request.POST.get("task_id")
        task = Task.objects.get(id=task_id)
        datepick = request.POST.get('datepick')
        task.duedate = datepick
        task.save()
    tasklist = Task.objects.all()
    return render(request, 'index.html', {'tasklist':tasklist})

並從模板中的表單中刪除操作:

<form method="POST">
    {%csrf_token%}
    <input type="hidden" name="task_id" value="{{ task.id }}">
    ...

提交表單將再次呈現索引,但也會處理該視圖中POST中的所有內容。 如果您只是打開它( GET方法),它將忽略以標准方式打開視圖的處理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM