表单不显示在模板中 - Django

Posted

技术标签:

【中文标题】表单不显示在模板中 - Django【英文标题】:Form doesn't display in template - Django 【发布时间】:2021-09-06 06:53:13 【问题描述】:

我尝试在 Django 的应用程序中创建一个表单,但浏览器中没有显示任何内容。

这是我的 app.models.py :

from django.db import models

class Scrape(models.Model):
  query = models.CharField(max_length=100)
  author = models.CharField(max_length=100)
  date = models.DateTimeField('date scraped')
  h3 = models.TextField(max_length=500)
  links = models.TextField(max_length=10000)
  meta = models.TextField(max_length=10000)

这里是我的 app.forms.py :

from django.forms import ModelForm
from app.models import Scrape
    
class ScrapeForm(ModelForm):   
    class Meta:
        model = Scrape
        fields = ['query',]

这里是我的 app.views.py :

    from django.contrib.auth.decorators import login_required
from django.shortcuts import render, get_object_or_404, redirect
from django.template import loader
from django.http import HttpResponse
from django import forms, template
from .forms import ScrapeForm

@login_required(login_url="/login/")
def index(request):
    
    context = 
    context['segment'] = 'index'

    html_template = loader.get_template( 'index.html' )
    return HttpResponse(html_template.render(context, request))

@login_required(login_url="/login/")
def pages(request):
    context = 
    # All resource paths end in .html.
    # Pick out the html file name from the url. And load that template.
    try:
        
        load_template      = request.path.split('/')[-1]
        context['segment'] = load_template
        
        html_template = loader.get_template( load_template )
        return HttpResponse(html_template.render(context, request))
        
    except template.TemplateDoesNotExist:

        html_template = loader.get_template( 'page-404.html' )
        return HttpResponse(html_template.render(context, request))

    except:
    
        html_template = loader.get_template( 'page-500.html' )
        return HttpResponse(html_template.render(context, request))

def get_query(request):
    if request.method == 'POST':
        form = ScrapeForm(request.POST)
        if form.is_valid():
            print('coucou')
            return redirect('/scraping')
    else:
        form = ScrapeForm()
    
    return render(request, "scraping.html", 'form': form)

这里是我的 scraping.html:

<form class="navbar-search form-inline mr-3 d-none d-md-flex ml-lg-auto post-form" action="" method="POST">% csrf_token %
     <div class="form-group mb-0">
        <div class="input-group input-group-alternative">
           <div class="input-group-prepend">
              <span class="input-group-text"><i class="fas fa-search"></i></span>
           </div>
          form 
                <input class="input-group-text" type="submit" value="OK" style="color:initial">
         </div>
      </div>
  </form>

当我检查 html 页面时,表单不存在。

我尝试了 form.as_p 但没有任何反应。

当我尝试使用 manage.py shell 时,我得到了结果

你能帮帮我吗?

【问题讨论】:

您必须使用 form.as_p 查看此帖子以获取更多信息docs.djangoproject.com/en/3.2/topics/forms/… 我已经尝试使用 .as_p 但没有任何反应。 你也必须在forms.py中添加查询字段。 是的。我做到了。 class ScrapForm(ModelForm): class Meta: model = Scrap fields = ['query',] Bt 它对我不起作用。 你在 shell 中尝试了什么? 【参考方案1】:

您必须删除或评论此网址

re_path(r'^.*\.*', views.pages, name='pages'),

如果您想添加自定义 404 页面,available 是很好的示例,在将其注释掉后,您必须像这样为您的 get_query 定义一个 URL

path('get_query/', views.get_query, name='get_query'),

然后你必须去http://127.0.0.1:8000/get_query/这个URL你会找到你的表格

【讨论】:

感谢@Ankit Tiwari,但它不起作用。 你好@shamgroup 试试这个***.com/a/17429589/14457833 如果有异常请告诉我 在 shell 中,我试试这个: [In 1] from app.forms import ScrapForm [In 2] form = ScrapForm() [In 3] form.as_p() 我已经进去了: Out[3]: '

' 所以,我认为这个表单是创建的,但它没有显示在模板中
如您所见,您的表单有一个您在forms.py 文件中定义的字段,因此可能有一个cssjavascript 隐藏了您的表单 或者试试form.query

以上是关于表单不显示在模板中 - Django的主要内容,如果未能解决你的问题,请参考以下文章

模板不显示验证错误(Django)

在 django 模板中显示 json 数据

在 Django 模板中使用 form.as_ul 时控制表单错误显示。

Django模板表单字段以无序方式显示

Django - 不使用表单或模型表单时在模板中呈现模型选择

当包含在其他模板中时,Django 通用 FormView 不显示