@denismatveyev7

Не работает форма подписки (Django)?

Добрый день!
home.html:

<form class="subscribe-form" action="{% url 'subscribe' %}" method="POST">{% csrf_token %}
	{{ form }}
		
	<button class="btn btn-main btn-lg" type="submit">Подписаться!</button>
</form>
						
{% if success %}
<div class="subscribe-result">
	{{ success }}
</div>
{% endif %}

urls.py:

url(r'^$', 'interior_app.views.home', name='home'),
url(r'^subscribe/$', 'interior_app.views.subscribe', name='subscribe')


models.py:

class Subscriber(models.Model):
    email = models.EmailField('', max_length=100, null=True, blank=True)


forms.py:

class SubscriberForm(forms.ModelForm):
	class Meta:
		model = Subscriber
		fields = ['email']


admin.py:

class SubscriberAdmin(admin.ModelAdmin):
    list_display = ('email',)

admin.site.register(Subscriber, SubscriberAdmin)

views.py:

def home(request):
    portfolios = PortfolioObject.objects.all()
    photos = []
    for portfolio in portfolios:
        for obj in portfolio.photo_set.all():
            photos.append(obj)
    
    form = SubscriberForm()
    context = {"photos": photos[::2], "form": form}

    return render(request, "home.html", context)


def subscribe(request):
    print request
    success = ''
    if request.method == "POST":
        print request.POST
        form = SubscriberForm(request.POST)
        print form
        if form.is_valid():
            form.save()
            success = "Ваш Email успешно отправлен"
            form = SubscriberForm()
    else:
        form = SubscriberForm()

    context = {"photos": photos[::2], "form": form, "success": success}

    return render(request, "home.html", context)


Ввожу в форму email, нажимаю кнопку и ничего не происходит.
Ни в админке ничего нет, ни success не выводится.

Thanks!!!
  • Вопрос задан
  • 685 просмотров
Пригласить эксперта
Ответы на вопрос 1
Проверьте вьюху subcribe. У вас в контексте передается photos, но photos[::2] вы не создали. Либо создайте либо уберите. Как вы запускаете проект? Если .manage.py runserver посмотрите консоль, там может быть ошибка, и проверьте идет ли пост запрос. А вообще попробуйте сделать не через button а через input.
Вот пример из документации
<form action="/your-name/" method="post">
    {% csrf_token %}
    {{ form }}
    <input type="submit" value="Submit" />
</form>
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы