Я создаю систему рецензирования на django. Я думаю, что мой Html неправильный
Я создал форму и добавил ее в представление, как я должен добавить ее в html форму?
index.html
<form action="." method="post">
{{ form.as_p }}
{% csrf_token %}
<p><input type="submit" value="Add comment"></p>
</form>
<h1 style="margin:0 57%">Reviews</h1>
<input type="hidden" name="parent" id="contactparent" value="">
<div class="dfv" style="display:flex; padding: 5%; justify-content: space-around; flex-wrap: wrap;align-items:center; box-shadow:4px 4px 16px gold;width: 80%;margin:8% 18% 0">
<div class="form-group editContent">
<label for="contactcomment" class="editContent" placeholder=" Message" >
Your reviews *
</label>
views.py
class DishView(View):
def get(self, request):
if request.method == "POST":
form = ReviewForm(request.POST)
if form.is_valid():
form = form.save(commit=False)
form.name = request.name
form.new = request.text
form.save()
return redirect(DishView)
else:
form = ReviewForm()
return render(request, 'index.html',
{'Dish': dish, 'Snack': snack, 'Desserts': desserts, 'Lastcourses': lastcourses,
'Reviews': reviews}, )
forms.py
class ReviewForm(forms.ModelForm): captcha = ReCaptchaField()
class Meta:
model = Reviews
fields = ("name", "email", "text", "captcha")
widgets = {
"name": forms.TextInput(attrs={"class": "form-control border"}),
"email": forms.EmailInput(attrs={"class": "form-control border"}),
"text": forms.Textarea(attrs={"class": "form-control border"})
}
Я добавил действие через url, но оно не сработало
Ответ на первоначальный вопрос о том, как добавить форму в HTML, заключается в том, чтобы поместить форму в контекст, который отправляется в шаблон:
{'form': form, 'Dish': dish, 'Snack': snack, 'Desserts': desserts, 'Lastcourses': lastcourses, 'Reviews': reviews}
Теперь об остальном. Вот что у меня было до того, как вы внесли все изменения в свой код. Проблема, я думаю, в том, что вы смешиваете представления на основе функций и представления на основе классов в одном представлении. Во-вторых, вы обрабатываете либо get , либо post, когда вам нужно обрабатывать оба в одном представлении.
class DishView(View):
form_class = ReviewForm
template_name = 'index.html'
def get(self, request, *args, **kwargs):
form = self.form_class()
return render(request, self.template_name, {'form': form})
def post(self, request, *args, **kwargs):
form = self.form_class(request.POST)
if form.is_valid():
form = form.save(commit=False)
form.name = request.name
form.text = request.text
form.save()
return redirect(self.path)
return render(request, self.template_name, {'form': form})
Я также думаю, что у вас ошибка в теге формы. Если вы хотите, чтобы форма была отправлена обратно в то же представление, то вы не используете "."
. Вы можете не указывать действие:
<form method="post">
<!-- OR -->
<form action="" method="post">