Форма Django не отображается на странице
Я хочу добавлять записи в систему добавления со страницы профиля пользователя (без создания другой страницы для добавления). На страницу профиля, включая html-файл для создания записи
Я создал model, form, view и html, но понятия не имею, почему это не работает.
Форма не отображается на странице (кроме нижней части "опубликовать")
включение работает
формы
from django import forms
from .models import Post, Comment
class PostForm(forms.ModelForm):
class Meta:
model = Post
fields = ['text', 'photo', 'video']
просмотров
from django.shortcuts import redirect, render
from .models import Post, Comment
from .forms import PostForm, CommentForm
# Create your views here.
from django.contrib.auth.decorators import login_required
from django.views.decorators.http import require_GET, require_POST
@login_required(login_url='users:login')
def create_post(request):
if request.method == 'POST':
form = PostForm(request.POST, request.FILES)
if form.is_valid():
post = form.save(commit=False)
post.user = request.user
post.save()
return redirect('user:profile')
else:
form = PostForm()
context = {'form': form}
return render(request, 'post/create_post.html', context)
create_post.html
<div class="posts-section">
<div class="new-post">
<form method='post' enctype="multipart/form-data">
{{form.as_p}}
{% csrf_token %}
<button>Publish</button>
</form>
</div>
</div>
user_profile.html
{% extends "base.html" %}
{% load profile_tags %}
{% block content %}
</div>
<div class="profile-info">
<p><strong>Email:</strong> {{ user.email }} </p>
<p><strong>About:</strong>{{ profile.about }}</p>
</div>
{% include "post/create_post.html" %}
</div>
{% endblock content %}
Ваша переменная формы находится за пределами контекста. Это одно из возможных решений:
@login_required(login_url='users:login')
def create_post(request):
if request.method == 'POST':
# scope 1 - form
form = PostForm(request.POST, request.FILES)
if form.is_valid():
post = form.save(commit=False)
post.user = request.user
post.save()
return redirect('user:profile')
# if form is not valid - this context renders form from scope1
context = {'form': form}
return render(request, 'post/create_post.html', context)
# this will cach if request.method is not POST
# scope 2 - form
form = PostForm()
# scope 2 - context (same scope as form)
context = {'form': form}
return render(request, 'post/create_post.html', context)