Django:表格在网页上不可见

时间:2018-09-08 20:24:29

标签: python django django-forms django-views

我正在尝试创建一个使用表单的简单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 %}

Link to program

根据我的阅读,我怀疑urls.py文件中可能存在问题,但是我已经浏览了很多次,但没有发现任何错误。有什么想法吗?

1 个答案:

答案 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文件。

但是似乎您可能正在尝试合并这两者,但是在那种情况下,您需要一个视图,该视图既可以显示文件的内容,又可以请求文件。但是,如果您有两个视图,并保留表单以仅接受输入,然后重定向到第二个视图以显示结果,则会更容易。