我正在尝试使用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'),
]
答案 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),
]