页面上不显示空表单

Posted

技术标签:

【中文标题】页面上不显示空表单【英文标题】:Empty form doesn't show on the page 【发布时间】:2020-04-26 09:25:01 【问题描述】:

我正在我的网站上构建自定义用户身份验证逻辑。我创建了MyUsermodel 而不是创建了表单

from django import forms                                     
from django.contrib.auth.forms import UserCreationForm,UserChangeForm
from .models import MyUser

classCustomUserCreationForm(UserCreationForm):
   class Meta:
       model = MyUser
       fields = ('email',)

比在项目级别的 urls.py 文件中我添加了以下路径

 urlpatterns =[ 
 path('login/',include('authorization.urls'),]

比我创建的authorization/urls.py

from django.urls import path                                  
from .views import login_form                                                                                            
urlpatterns =
[path(' ',login_form,name='login_form'),]       

在我的视图文件中,我有以下方法,如果 request == GET 应该返回空表单,如果表单 is_valid() 它会重定向到另一个页面

from django.http import HttpResponseRedirect               
from django.shortcuts import render                           
from .form import UserCreationForm

def login_form(request):
    if request.method == 'POST':
        form = UserCreationForm(request.POST)
        if form.is_valid():
            email = form.cleaned_data('email')
            password = form.cleaned_data('password')
        return HttpResponseRedirect('/thank/')
    else:
        form = UserCreationForm()
    return render(request,'registration/log.html','form':form)

最后一张是log.html

% extends 'main/base.html' %                             
<form action="% url 'login_form' %" method="post">              
% csrf_token %
  form                                 
<input type="submit" value="Submit">                         
</form>

但是当我运行服务器并打开http://127.0.0.1:8000/login/ 我没有任何异常,也没有空表单本身

【问题讨论】:

【参考方案1】:

您正在扩展您的log.html 文件中的main/base.html 模板;但是,您没有在其中包含任何% blcok xxx %

因此它将省略log.html 中的整个custom html。

基本上,如果你有类似的东西:

<!DOCTYPE html>
<html lang="en">
<head>
    <title>Document</title>
</head>
<body>
    % block content %

    % endblock %
</body>
</html>

在您的 base.html 中,那么您的log.html 应该有以下内容:

% extends 'main/base.html' %  

% block content %              
    <form action="% url 'login_form' %" method="post">              
    % csrf_token %
      form                                 
    <input type="submit" value="Submit">                         
    </form>
% endblock %

【讨论】:

以上是关于页面上不显示空表单的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Access 的子窗体上不显示选定的记录?

如何调试据称正在应用但在页面上不可见的样式?

页面加载时不需要的空模态

easyui datagrid 在页面上不显示数据

让一个元素在页面上不显示的方法

Django模型表单集显示数据库数据而不是空表单集