Django 4.0 Form中template_name使用「终于解决」

go (88) 2023-05-11 20:12

Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说Django 4.0 Form中template_name使用「终于解决」,希望能够帮助你!!!。

今天主要抽空验证Django 4.0中一个新feature,Form中template_name的使用。

本文分3部分:

第1部分记录一下使用Django 4.0创建一个hello world项目的步骤;

第2部分添加一个form并展示;

第3部分验证一下template_name功能。

第一步 建立环境(使用Django4.0创建一个hello world项目)

1. Python 3.8.9 中创建一个虚拟环境:

python -mvenv Django40

2. 下载安装Django 4.0.2:

pip install django

3. 创建一个新的project:

django-admin startproject django40

4. 进入django40文件夹后创建home app:

python manage.py startapp home

5. Setting中加入home

INSTALLED_APPS = [
    'home.apps.HomeConfig',
    …
]

6. Django 4.0的url中定义好home的path

path('home',include('home.urls')),

7. Home中的url.py

from django.urls import path
from . import views
app_name="home"
urlpatterns = [
    path('', views.index, name='index'),
    ]

8. Home app中的view

  def index(request):
    context = {}
    return render(request,'home/index.html', context)

9. Template,在\home\templates\home文件夹中添加index.html,内容:

<p>hello world</p>

在控制台中python manage.py runserver

在浏览器中打开http://127.0.0.1:8000/home,看到hello world。准备工作完成了。

第二步 加入MyForm

1. 在home的文件夹内添加forms.py

from django import forms
 
class MyForm(forms.Form):
    message = forms.CharField(label='Message',max_length=100)
    name = forms.CharField(label='Name',max_length=50)

2. 在views.py中

def index(request):
    form_obj = MyForm()
    context = {
        'form':form_obj,
    }
    return render(request, 'home/index.html',context)

3. 在home的template文件夹index.html中

<form action="" method="post">
  {{form}}
  <inputtype="submit" value="OK">
</form>
Django 4.0 Form中template_name使用「终于解决」_https://bianchenghao6.com/blog_go_第1张

默认的Form样式

第三步 使用验证template_name

1. 在home的template文件夹中加入form_custom.html文件,内容为:

{% for field in form %}
    <div>
        {{ field.errors }}
        {{ field.label_tag }} {{ field }}
    </div>
{% endfor %}

2. 打开home的forms.py,加入template_name

from django import forms

class MyForm(forms.Form):
    template_name ="home/form_custom.html"  
    message = forms.CharField(label='Message',max_length=100)
    name = forms.CharField(label='Name', max_length=50)

浏览器中再次输入http://127.0.0.1:8000/home,从效果上可以看出来,我们已经使用自定义的模板文件了

Django 4.0 Form中template_name使用「终于解决」_https://bianchenghao6.com/blog_go_第2张

使用自定义的Form样式

3. 如果form不使用template_name属性,像这样在index模板中直接引用自定义的模板文件也可以。

<form action="" method="post">
    {%include "home/form_custom.html" %}
    <input type="submit" value="OK">
</form>

(完,更多文章可关注微信公众号:Django编程)

发表回复