Django 表單提交不重新整理頁面
在 Django 中,我們可以使用 Jquery 和 Ajax(非同步 JavaScript 和 XML)請求在不重新載入頁面的情況下提交表單。
讓我們看一個使用 Ajax 提交 Django 表單而不重新載入頁面的示例。
建立一個新的 Django 專案
首先在 Django 中建立一個名為 Reload_project 的新專案,並在專案目錄中建立一個名為 Reloadapp 的新應用,在命令提示符中執行以下命令。
django-admin startproject Reload_project cd Reload_project django-admin startapp Reloadapp
現在在 Reload_project 目錄的 settings.py 檔案中的 INCLUDED_APPS 中,新增新的應用名稱。
INSTALLED_APPS = [ "django.contrib.admin", "django.contrib.auth", "django.contrib.contenttypes", "django.contrib.sessions", "django.contrib.messages", "django.contrib.staticfiles", "Reloadapp", ]
接下來在 models.py 檔案中新增程式碼,該程式碼類似於定義 html 表單中定義的欄位的資料型別、大小等。
from django.db import models # Create your models here. class Todo(models.Model): task = models.CharField(max_length=200) def __str__(self): return f"{self.task}"
在此之後,我們需要使用位於 Reload_project 目錄中的 admin.py 檔案將模型註冊到管理員中。
from django.contrib import admin from .models import * # Register your models here. admin.site.register(Todo)
現在在 Reload_app 中建立 templates 資料夾,並在該資料夾中建立一個包含要在網頁上顯示的表單的 html 檔案。
<!DOCTYPE html> <html> <head> <title>Todo List</title> </head> <body> <form method="post" id="task-form"> {% csrf_token %} <input type="text" placeholder="Enter Task" name="task" id="task" required> <button type="submit">Save</button> </form> <script src="https://code.jquery.com/jquery-3.5.1.js" crossorigin="anonymous"></script> <script type="text/javascript"> $(document).on('submit','#task-form',function(e){ e.preventDefault(); $.ajax({ type:'POST', url:'{% url "home" %}', data: { task:$("#task").val(), csrfmiddlewaretoken:$('input[name=csrfmiddlewaretoken]').val() }, success:function(){ alert('Saved'); } }) }); </script> </body> </html>
之後,在 views.py 檔案中建立程式碼以根據使用者需求處理 post 和請求處理。
from django.shortcuts import render from .models import Todo # Create your views here. def home(request): if request.method == 'POST': task=request.POST.get('task') print(task) new = Todo(task=task) new.save() return render(request,"main/form.html")
建立 views.py 檔案後,我們必須將 Reload_app 的 urls.py 檔案中建立的 html 表單的 url 新增到其中。
from django.urls import path from .views import * urlpatterns = [ path('',home,name="home"), ]
現在,我們必須將應用的所有 urls 路徑新增到 Reload_project 的 urls.py 檔案中。
from django.contrib import admin from django.urls import path,include urlpatterns = [ path("admin/", admin.site.urls), path("",include("Reload_app.urls")) ]
最後,執行資料遷移並執行伺服器以訪問建立的網站。
python manage.py makemigrations python manage.py migrate python manage.py runserver
網站將如下所示,當我們儲存任務時,頁面不會重新載入。

廣告