Я пытаюсь отобразить простую форму (3 поля) на веб-странице с помощью Django, но поля не отображаются - см. Код ниже.
Я просмотрел документ Django, документ MDN, большинство сообщений 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 импортировать url из . импорт просмотров
urlpatterns = [
url(r'^$', views.index, name='journal-index'),
]
Да, это та часть, в которой я не был уверен. Я хочу отобразить свою форму на странице индекса моего приложения (в данном случае / journal /). Но я также хочу использовать свое индексное представление на этой же странице. Насколько я понимаю, вы можете передать только 1 просмотр на 1 URL. Я попытался добавить еще один URL-адрес в свой urls.py, ссылаясь на мое представление email_input с URL-адресом (r ’^ $, ..., ...), который ничего не изменил.






Это потому, что вы даже не вызываете email_input.
вам нужно привязать его к URL-адресу, подобному этому
urlpatterns = [
url(r'^$', views.email_input),
]
Если вы хотите отобразить его на странице индекса, вы должны отправить его как переменную контекста в вашей функции 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-адрес для отображения этой страницы.
Спасибо. Не могу поверить, что это было так просто.
У вас только один URL в
urls.py?