我正在尝试创建一个使用表单的简单Django网页,但是我的表单不可见。我已经阅读了所有Django文档,并阅读了与此问题相关的多个问题,但是我没有找到解决我的问题的解决方案。
以下是相关文件:
views.py
from django.shortcuts import render
from .forms import FileForm
with open('calendar.txt') as f:
file_content = f.read()
def home(request):
return render(request, 'main/index.html',{'file_content':file_content})
def form_get(request):
# if this is a POST request we need to process the form data
if request.method == 'POST':
# create a form instance and populate it with data from the request:
form = FileForm(request.POST)
# check whether it's valid:
if form.is_valid():
pass
else:
form = FileForm()
return render(request, 'index.html', {'form': FileForm.form})
urls.py
from django.conf.urls import url
from django.contrib import admin
from main import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^$', views.home, name='home'),
]
index.py
{% extends "base.html" %}
{% block content %}
<h1>Welcome to the calendar!</h1>
<form action="/#" method="post">
{% csrf_token %}
{{ form }}
<input type="submit" value="Submit">
</form>
{{form}}
{% endblock content %}
根据我的阅读,我怀疑urls.py
文件中可能存在问题,但是我已经浏览了很多次,但没有发现任何错误。有什么想法吗?
答案 0 :(得分:1)
尝试
def form_get(request):
# if this is a POST request we need to process the form data
if request.method == 'POST':
# create a form instance and populate it with data from the request:
form = FileForm(request.POST)
# check whether it's valid:
if form.is_valid():
pass
else:
form = FileForm()
return render(request, 'main/index.html', {'form': form})
了解如何将渲染的上下文从{'form': FileForm.form}
更改为{'form': form}
。 index.html文件的路径也错误。
修复视图后,您需要添加实际的URL才能进入视图。您当前的网址有
url(r'^$', views.index, name='home'),
请注意如何使用views.index
而不是views.form_get
。将URL更改为使用form_get
,它将起作用。
url(r'^$', views.form_get, name='home'),
不知道您是否想/
进入表单,还是更愿意/
回家,在那里您有指向表单的链接。但是在那种情况下,您不想共享相同的index.html
文件。
但是似乎您可能正在尝试合并这两者,但是在那种情况下,您需要一个视图,该视图既可以显示文件的内容,又可以请求文件。但是,如果您有两个视图,并保留表单以仅接受输入,然后重定向到第二个视图以显示结果,则会更容易。