[Python学习笔记] Django 中的表单 - 如何让访问的页面显示一个表单

本文介绍了如何在Django中显示表单。通过创建与app同级的templates文件夹存放HTML,设置URL,编写视图函数,并在settings.py中配置模板路径,实现了传统方式下HTML表单的展示。此外,还讲解了使用forms模块创建form.py文件,调用表单并在HTML中通过{{form}}与视图函数关联的方法。

显示表单,我们需要用到html的知识,此时传统做法是将表单定义在html中,python中通过render函数进行渲染

 建立一个和app同级的文件夹templates,用于存放html文件。假设我们要建立这样的一个表单

首先url = 'app1/name', 下面表单的设置应该放在html中,所以

Step1: 创建表单的html文件, 命名为name.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="/app1/get_name" method="post">
    <label for="你的名字">你的名字:</label>
    <input type="text" id = 'first_name' name="first_name " maxlength="20" required>
    <label for="你的姓氏">你的姓氏:</label>
    <input type="text" id = 'last_name' name="last_name " maxlength="20" required>
</form>

</body>
</html>

step2: 设置url, 和url调用的函数get_name

from django.urls import re_path
from django.urls import path
from app1 import views as app1_views

# urlpatterns = [path('articles/[0-9]{4}', app1_views.articles)]
urlpatterns = [
               path('get_name', app1_views.get_name),
               ]

Step3:  通过app1.views文件中的get_name函数将html和url连接起来

from django.shortcuts import render
from django.http import HttpResponse

# Create your views here.


def get_name(request):
    return render(request, 'name.html')

Step4:设置程序查找name.html的路径  -- settings.py中‘DIRS’ 添加  BASE_DIR + ‘templates’路径

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [BASE_DIR+'/templates'],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },

Django中另一种方式来显示表单  - forms模块

 Step1:建立form.py文件,在文件中存储所有表单,这些表单等同于html中定义的表单

from django import forms


class PersonForm(forms.Form):
    first_name = forms.CharField(label='你的名字:', max_length=20)
    last_name = forms.CharField(label='你的姓氏', max_length=20)

Step2:  在函数中调用form文件 

from django.shortcuts import render
from django.http import HttpResponse
from app1.form import PersonForm

def get_name(request):
    return render(request, 'name.html', {'form': PersonForm()})

 Step3: 建立name.html 和 表单form.py之间的关联 --  {{form}} 和上述函数中字典的key值相同

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="/app2/get_name" method="post">
<!--    <label for="你的名字">你的名字:</label>-->
<!--    <input type="text" id = 'first_name' name="first_name " maxlength="20" required>-->
<!--    <label for="你的姓氏">你的姓氏:</label>-->
<!--    <input type="text" id = 'last_name' name="last_name " maxlength="20" required>-->
    {{form}}
</form>

</body>
</html>

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值