Django: формы не видны на веб-странице - PullRequest
0 голосов
/ 08 сентября 2018

Я пытаюсь создать простую веб-страницу 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, но я просматривал его много раз и не нашел ничего плохого. Есть мысли?

1 Ответ

0 голосов
/ 09 сентября 2018

Попробуйте

 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 имеет

url(r'^$', views.index, name='home'),

Обратите внимание, как используется views.index, а не views.form_get. Измените URL на form_get, и он будет работать.

url(r'^$', views.form_get, name='home'),

Не знаю, хотите ли вы, чтобы / отправлялся в форму, или вы бы предпочли, чтобы / все еще шел домой, где у вас есть ссылка на форму. Но в этом случае вы не хотите предоставлять общий доступ к одному и тому же файлу index.html.

Но, похоже, вы пытаетесь объединить эти два, но в этом случае вам нужно одно представление, которое может как отображать содержимое файла, так и запрашивать файл. Но будет проще, если у вас есть два представления, и оставьте форму, чтобы просто принять ввод, а затем перенаправьте во второе представление, чтобы показать результаты.

...