1

I try to create a form in Django's app but nothing display in browser.

Here my 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)

Here my app.forms.py :

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

Here my 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})

Here my 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>

When I inspect html page, form doesn't exist.

I tried {{form.as_p}} but nothing happens.

I have a result when I try with manage.py shell

Could you help me please ?

shamgroup
  • 13
  • 5

1 Answers1

0

You have to remove or comment this URL

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

if you want to add custom 404 page than there are good examples are available and after commenting it out you have to define a URL for your get_query like this

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

and than you have to got to http://127.0.0.1:8000/get_query/ this URL you will find your form

Ankit Tiwari
  • 4,438
  • 4
  • 14
  • 41