Django:当主页已经有模板时如何向我的主页添加另一个表单

Django: How to add another form to my homepage when the homepage already has a template

在我的主页上(http://127.0.0.1:8000/)我在views.py中创建了一个模板及其功能,主页的URL指向它,但是,有一个表格我也想在首页显示。

views.py:

def index(request):
template = loader.get_template('tracker/index.html')
hours_grouped_project = 
LogHours.objects.all().order_by('proj_assignment__project__name', 'day')

context = {
    'hours_grouped_project':hours_grouped_project,
}
return HttpResponse(template.render(context,request))

def form(request):
    if request.method== 'POST':
    form = LogHoursForm(request.POST)
    if form.is_valid():
        day = form.cleaned_data['day']
        hours = form.cleaned_data['hours']
        developer = form.cleaned_data['developer']
        project = form.cleaned_data['project']
        proj_assignment=ProjectAssignment.objects.create(
                        developer=developer,project=project)
        LogHours.objects.create(day=day,hours=hours, 
                                proj_assignment= proj_assignment)
    else:
       form = LogHoursForm()

    return render(request, 'tracker/form.html',{'form': form})

索引为首页显示模板,表格为form.py.

form.py

class LogHoursForm(forms.Form):
day = forms.DateField()
hours = forms.DecimalField(max_digits=10, decimal_places=2)
developer = forms.ModelChoiceField(queryset=Developer.objects.all())
project = forms.ModelChoiceField(queryset=Project.objects.all())

这里是 URL:urlpatterns = [ 路径('', views.index, 名称='index'),]

form.html是

<h1> LogHours Form</h1>
<hr>

<form action="" method="post">
{% csrf_token %}
{{form}}
<input type="submit">
</form>

和 index.html:

<ul>
    <b>Logged hours grouped by project:</b>
{% for obj in hours_grouped_project %}
<li>
    {% ifchanged obj.proj_assignment %}
    <b>Project name:</b>
    {{obj.proj_assignment|linebreaks}}
    {% endifchanged %}
    <i>Sorted Date: </i>
    {{obj}}
</li>
{% endfor %}

</ul>

在你的函数中 index(request):

def index(request):
    if request.method=='POST':
        form(request)
    else:
        template = loader.get_template('tracker/index.html')
        hours_grouped_project = LogHours.objects.all().order_by('proj_assignment__project__name', 'day')

        form = LogHoursForm()

        context = {
            'hours_grouped_project': hours_grouped_project,
            'form': form,
        }
        return HttpResponse(template.render(context, request))

然后,您可以像这样从 index.html 呈现表单。

...
<form action="" method="post">
    {% csrf_token %}
    {{form}}
<input type="submit">
...