表单不显示字段(没有看到form.Forms对象) - Django 1.11.8

时间:2018-03-19 05:42:47

标签: python django django-forms django-templates django-views

我正在尝试使用Django在网页上显示一个简单的表单(3个字段),但没有显示任何字段 - 请参阅下面的代码。

我已经浏览了Django doc,MDN doc,这里的大部分StackOverflow帖子,但它仍然没有用。

我能够使用{%debug%}看到页面上没有对象EmailInput

此时,我不确定导致此问题的原因。非常感谢任何帮助。

由于

forms.py

from django import forms

class EmailInput(forms.Form):
    email = forms.EmailField()
    first_name = forms.CharField()
    last_name = forms.CharField()  

views.py

from django.shortcuts import render
from .models import journalEntry
from django.http import HttpResponseRedirect
from django.urls import reverse

from journal.forms import EmailInput


def index(request):
    post = journalEntry.objects.filter(status__exact='f')
    latest_post = journalEntry.objects.filter(status__exact='f').order_by('-created')[:5]

    return render(request, 'journal_index.html', context = {'post':post,'latest_post':latest_post})

def email_input(request):
    if request.method == 'POST':
        form = EmailInput(request.POST)

        if form.is_valid():
            form.save()
            return HttpResponseRedirect(reverse('journal-index'))   
    else:
        form = EmailInput()

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

journal_index.html

{% extends "base_generic.html" %}
{% block content %}
    <form action="" method="post">
        {% csrf_token %}
        {{ form }}
        <input type="submit" value="Submit"/>
    </form>
{% endblock content %}

urls.py     来自django.conf.urls import url     来自。导入视图

urlpatterns = [
        url(r'^$', views.index, name='journal-index'),
        ]

2 个答案:

答案 0 :(得分:1)

如果要在索引页面中显示它,则必须在index函数中将其作为上下文变量发送。现在,它将在您的journal_index.html模板文件中提供。

def index(request):
    post = journalEntry.objects.filter(status__exact='f')
    latest_post = journalEntry.objects.filter(status__exact='f').order_by('-created')[:5]
    form = EmailInput()
    context = {
        'post': post,
        'latest_post': latest_post,
        'form': form
    }

    return render(request, 'journal_index.html', context = context)

email_input函数中的代码不会在任何地方调用,因此无法显示此表单。您还必须弄清楚要在何处显示此表单。如果您不想将其与索引页面中的内容一起显示,则必须创建新的模板文件,在那里添加表单并添加新的URL路径以显示该页面。

答案 1 :(得分:0)

这是因为你甚至没有调用email_input。 你需要将它绑定到这样的网址 urlpatterns = [ url(r'^$', views.email_input), ]