我在Django中创建了简单表单。我尝试以多种不同的方式检查所有可能性,但我的HTML代码仍然看不到这种形式。代码如下:
forms.py
xs:any
views.py
from django import forms
class TimeTable(forms.Form):
title = forms.CharField(max_length=100, required=True)
time_start = forms.DateTimeField()
time_end = forms.DateTimeField()
urls.py
from home.forms import TimeTable
from django.shortcuts import render
def schedule(request):
if request.method == 'POST':
form = TimeTable(request.POST)
if form.is_valid():
pass
else:
form = TimeTable()
return render(request, "registration/schedule.html", {'schedule_form': form})
schedule.html
from django.contrib import admin
from django.urls import path, include
from django.views.generic.base import TemplateView
urlpatterns = [
path('admin/', admin.site.urls),
path('accounts/', include('django.contrib.auth.urls')),
path('', TemplateView.as_view(template_name='home.html'), name='home'),
path('accounts/login/', TemplateView.as_view(template_name='registration/login.html'), name='login'),
path('schedule/', TemplateView.as_view(template_name='registration/schedule.html'), name='schedule'),
]
HTML仅看到缺少此{% block calendar %}
<div class="calendar_create">
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Submit</button>
</form>
{% endblock %}
</div>
标记剩余。我尝试通过许多教程,django文档来做到这一点,而所有这些东西对我都不起作用。我在做什么错了?
答案 0 :(得分:1)
您永远不会调用schedule
视图。您的“ schedule /” urlpattern使用内联的TemplateView直接呈现模板。根本不会调用创建表单并将其添加到上下文的视图。
您需要改为使用网址格式的视图:
from myapp import views
...
path('schedule/', views.schedule, name='schedule'),
还有另一个问题:您的视图将表单发送为schedule_form
,但是模板引用了form
。您需要在两个地方使用相同的名称:
{{ schedule_form.as_p }}