所以我已经看了这么多次了,似乎找不到我生命中的问题。
它不仅没有显示它所查询的数据库信息,而且我似乎无法通过表单向它添加任何内容。
我的views.py方法应该将所有信息呈现到div中,但它呈现了正确数量的div,其中没有信息。此外,post请求通过我可以在cmd上看到,但数据库保持不变,并且没有对HTML进行更改。
我需要一些帮助。
views.py
from django.shortcuts import render
from .models import Note
def notes(request):
if request.method == "POST":
new_note = request.objects.all()
Note.objects.add(new_note)
return render(request, "notebook/notes.html", {
"notes": Note.objects.all()
})
models.py
from django.db import models
class Note(models.Model):
title = models.CharField(max_length=64)
content = models.CharField(max_length=300)
def __str__(self):
return f"{Note.title} {Note.content}"
layout.html(只是相关部分)
<div class="card content">
<div class="card-body">
<h4 class="card-title" style="font-weight: bold;"> Post A New Note </h4>
<form action="{% url 'notebook:notes' %}" method="post">
{% csrf_token %}
<div class="input"> Note Title </div>
<div><input name="title" style="margin-top: -10px;"></div>
<div class="input">Note Content </div>
<div><input class="note_txt" name="content"></div>
<div class="row">
<input class="btn" type="submit" style="margin-top: 20px;">
<a class="btn rounded" id="close_btn" style="font-weight: bold; margin-top: 20px; right: 0%;">X</a>
</div>
</form>
</div>
</div>
notes.html
{% block body %}
{% for note in notes %}
<div class="col-sm-12 col-md-12 col-lg-3 mx-auto my-1 rounded note" style="min-height: 200px; min-width: 400px; background-color: #F2DCAC; border: 1px solid gray;">
<div class="row" style="justify-content: center; font-size: 20; font-weight: light;">{{ Note.title }}</div>
<div class="col-12">{{ Note.content }}</div>
</div>
{% endfor %}
{% endblock %}
urls . py
from django.urls import path
from . import views
app_name = "notebook"
urlpatterns = [
path('', views.notes , name = "notes"),
]
您需要像这样从request.POST
字典中获取数据:
def notes(request):
if request.method == "POST":
content = request.POST.get('content') # <- here
title = request.POST.get('title') # <- here
Note.objects.create(title=title, content=content)
return render(request, "notebook/notes.html", {
"notes": Note.objects.all()
})
但是,请考虑使用ModelForm,它包含表单验证和许多将来可能会派上用场的功能。你可以这样实现它:
# forms.py
from django import forms
class NoteForm(forms.ModelForm):
class Meta:
model = Note
fields = '__all__'
# view
from .forms import NoteForm
def notes(request):
if request.method == "POST":
form = NoteForm(request.POST)
if form.is_valid():
form.save()
return render(request, "notebook/notes.html", {
"notes": Note.objects.all()
})
更新你需要改变模板中的变量:
<div class="col-12">{{ Note.title }}</div>
<div class="col-12">{{ Note.content }}</div>
<div class="col-12">{{ note.title }}</div>
<div class="col-12">{{ note.content }}</div>
通读所有问题后。我在views.py文件中发现了一个小错误,可能是你没有保存对象,这就是为什么你的数据库是空的,否则在你的代码中没有问题。
For reference:- https://docs.djangoproject.com/en/3.1/