0

I created simple form in django. I tried do it in many different ways check all posibilities but still my HTML code doesn't see this form. Code looks like :

forms.py

from django import forms


class TimeTable(forms.Form):

    title = forms.CharField(max_length=100, required=True)
    time_start = forms.DateTimeField()
    time_end = forms.DateTimeField()

views.py

from home.forms import TimeTable
from django.shortcuts import render


def schedule(request):
    if request.method == 'POST':
        form = TimeTable(request.POST)
        if form.is_valid():
            pass
    else:
        form = TimeTable()
    return render(request, "registration/schedule.html", {'schedule_form': form})

urls.py

from django.contrib import admin
from django.urls import path, include
from django.views.generic.base import TemplateView


urlpatterns = [
    path('admin/', admin.site.urls),
    path('accounts/', include('django.contrib.auth.urls')),
    path('', TemplateView.as_view(template_name='home.html'), name='home'),
    path('accounts/login/', TemplateView.as_view(template_name='registration/login.html'), name='login'),
    path('schedule/', TemplateView.as_view(template_name='registration/schedule.html'), name='schedule'),
]

schedule.html

{% block calendar %}
<div class="calendar_create">
            <form method="post">
                {% csrf_token %}
                {{ form.as_p }}
                <button type="submit">Submit</button>
            </form>
    {% endblock %}
    </div>

HTML only see this <button> mark rest is missing. I tried do it with many tutorials, django documentation and all this stuff doesn't work for me. What I'm doing wrong ?

0

1 Answer 1

1

You never call your schedule view. Your "schedule/" urlpattern uses an inline TemplateView which renders the template directly. The view that creates the form and adds it to the context is never called at all.

You need to use the view in the url pattern instead:

from myapp import views
...

path('schedule/', views.schedule, name='schedule'),

There is another issue as well: your view sends the form as schedule_form, but your template references form. You need to use the same name in both places:

{{ schedule_form.as_p }}
Sign up to request clarification or add additional context in comments.

1 Comment

Yea that's it. I tried this 2 solutions before but not in the same time. Thanks

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.