首页 > 解决方案 > 表单内容在 Django 主页上不可见?

问题描述

我正在尝试学习 django 并尝试创建一个简历生成器项目,用户可以通过在表单上输入一些详细信息来获取基于表单的模板,但该表单在主页上不可见。我正在附加模板代码以获得更多参考。我只能在主页上看到提交按钮

{% extends 'base.html' %}
{% block content %}
<form method="post" action="post-form">
    {% csrf_token %}
    <p>
    {{form.as_p}}
    </p>
    <input type="submit" value="Save" />
</form>
{% endblock %}

表格.py

from .models import Person,Experiences,EducationDetails,Academics,Skills,AreaOfInterest

class PersonForm(forms.ModelForm):
    class Meta:
        model=Person
        fields=('first_name','last_name','gender','email','contact_no','website','github','linkedin')
        widgets={
        'first_name': forms.TextInput(attrs={'title':'First Name'}),
        'last_name': forms.TextInput(attrs={'title':'Last Name'}),
        'gender': forms.RadioSelect(attrs={'title':'Gender'}),
        'email': forms.EmailInput(attrs={'title':'Email'}),
        'github': forms.URLInput(attrs={'title':'Github'}),
        'linkedin': forms.URLInput(attrs={'title':'Linkedin'}),
        'website': forms.URLInput(attrs={'title':'Website'})
        }
class ExperienceForm(forms.ModelForm):
    class Meta:
        model = Experiences
        fields = ('work_choice','title','start_duration','end_duration','description')
        widgets = {
        'work_choices' : forms.Select(attrs={'title':'WorkChoice'}),
        'title' : forms.TextInput(attrs={'title':'Title'}),
        'start_duration' : forms.DateInput(attrs={'title':'Start duration'}),
        'End_duration' : forms.DateInput(attrs={'title':'End duration'}),
        'description' : forms.Textarea(attrs={'title':'Description'})
        }
class EducationForm(forms.ModelForm):
    class Meta:
        model = EducationDetails
        fields = ('degree_choice','stream','passing_year','gpa')
        widgets = {
        'degree_choice' : forms.Select(attrs={'title':'Degree'}),
        'stream' : forms.TextInput(attrs={'title':'Stream'}),
        'passing_year' : forms.DateInput(attrs={'title':'Passing Year'}),
        'gpa' : forms.TextInput(attrs={'title':'GPA'})
        }

class SkillsForm(forms.ModelForm):
    class Meta:
        model = Skills
        fields = ('skills_description',)
        widgets = {
            'skills_description': forms.Textarea(attrs={'title': 'Professional Skills'})
        }


class AcademicsForm(forms.ModelForm):

    class Meta:
        model = Academics
        fields = ('academics_description',)
        widgets = {

            'academics_description': forms.Textarea(attrs={'title': 'Academics'})
        }


class AreaOfInterestForm(forms.ModelForm):

    class Meta:
        model = AreaOfInterest
        fields = ('area_of_interest_detail',)
        widgets = {

            'area_of_interest_detail': forms.Textarea(attrs={'title': 'Area Of Interest'})
        }

视图.py

from django.shortcuts import render
from django.http import HttpResponse
#from django.shortcuts import render_to_response
from django.contrib.sites.requests import RequestSite

from .forms import PersonForm,ExperienceForm,AcademicsForm,AreaOfInterestForm,EducationForm,SkillsForm
from .models import Person,Experiences,EducationDetails,Academics,Skills,AreaOfInterest


def resumeFill(request):
    template_name = 'resumefill.html'
    if request.method == "POST":
        personform = PersonForm(data=request.POST)
        educationform = EducationForm(data=request.POST)
        experienceform = ExperienceForm(data=request.POST)
        academicsform = AcademicsForm(data=request.POST)
        areaOfInterestform = AreaOfInterestForm(data=request.POST)
        skillsform = SkillsForm(data=request.POST)
        
        if personform.is_valid():
            perform.save()
            
        if educationform.is_valid():
            educationform.save()
        
        if experienceform.is_valid():
            experienceform.save()
            
        if academicsform.is_valid():
            academicsform.save()
            
        if areaOfInterestform.is_valid():
            areaOfInterestform.save()
        
        if skillsform.is_valid():
            skillsform.save()
        
    return render(request,template_name,{'personform':PersonForm(),'educationform':EducationForm(),'experienceform':ExperienceForm(),'academicsform':AcademicsForm(),'areaOfInterestform':AreaOfInterestForm(),'skillsform':SkillsForm(),})
     
def resumeView(request):
    template_name = 'resume_view.html'
    site_name = RequestSite(request).domain
    person = Person.objects.all()
    experience = Experiences.objects.all()
    education = EducationDetails.objects.all()
    academics = Academics.objects.all()
    skills = Skills.objects.all()
    areaOfInterest = AreaOfInterest.objects.all()
    return render(request,template_name,{'site_name':site_name,'person':person,'experience':experience,'education':education,'academics':academics,'skills':skills,'areaOfInterest':areaOfInterest,})

模型.py

from django.contrib.auth.models import User
#from phonenumber_field.modelfields import PhoneNumberField
# Create your models here.




class Person(models.Model):
    GENDER_CHOICES = (('M','Male'),
    ('F','Female'),
    ('Others', 'Trans')) 
    first_name = models.CharField(max_length=200)
    last_name = models.CharField(max_length=200,null=True)
    gender = models.CharField(choices=GENDER_CHOICES,max_length=10)
    age = models.IntegerField()
    email = models.EmailField()
    contact_no = models.CharField(unique=True,null=False,max_length=13)
    website = models.URLField()
    github = models.URLField()
    linkedin = models.URLField()
    
    def full_name(self):
        return " ".join([self.first_name+self.last_name])
class Experiences(models.Model):
    WORK_CHOICES = (
    ('I','Internship'),
    ('FTE','Full Time Employee'),
    ('Free','Freelancer'))
    person = models.ForeignKey(Person, on_delete=models.CASCADE)
    work_choice = models.CharField(choices=WORK_CHOICES,max_length=20)
    title = models.CharField(max_length=200)
    start_duration = models.DateField() 
    end_duration = models.DateField()
    description = models.TextField()

class EducationDetails(models.Model):
    DEGREE_CHOICES = (('XII','High School'),
    ('B.Tech/B.E./BCA/B.Com','Bachelors'),
    ('M.Tech/MCA/M.Com','Masters'))
    person = models.ForeignKey(Person,on_delete=models.CASCADE)
    degree_choice = models.CharField(choices=DEGREE_CHOICES, max_length=300)
    stream = models.TextField(max_length=200,null=True)
    passing_year = models.DateField()
    gpa = models.IntegerField()
    
class Academics(models.Model):
    person = models.ForeignKey(Person,on_delete=models.CASCADE)
    academics_description = models.TextField()  
    
class Skills(models.Model):
    person = models.ForeignKey(Person,on_delete=models.CASCADE)
    skills_description = models.TextField()

class AreaOfInterest(models.Model):
    person = models.ForeignKey(Person,on_delete=models.CASCADE)
    area_of_interest_detail = models.TextField()    

网址.py

from . import views
from django.conf.urls import url
from django.urls import path
urlpatterns = [
url(r'^resumefill',views.resumeFill,name='resumefill'),
url(r'^resumeview',views.resumeView,name='resumeview'),
]

项目结构的urls.py

from django.contrib import admin
from django.urls import path,include
from django.conf.urls import url
urlpatterns = [
    path('admin/', admin.site.urls),
    path(r'',include('portfolio.urls')),
]

标签: django

解决方案


您不会将form变量传递给模板,而是可以使用{{personform.as_p}}or{{educationform.as_p}}等​​。

确保您在模板上使用的变量与您从 views.py 上的“返回渲染”传递的变量相同


推荐阅读