Как показать объекты в таблице в Django

Я пытаюсь добавить некоторые объекты с помощью поля ввода, но они не отображаются на сайте. Я могу найти их на странице администратора, но не в таблице, где они мне нужны. Как я могу это исправить?

Вот мой код:

models.py

class Kommentar(models.Model):
    user = models.CharField(max_length=25)
    comment = models.CharField(max_length=250)

    def __str__(self):
        return f"{self.user} {self.comment}" 

views.py

def index(request):
    if 'q' in request.GET:
        q = request.GET['q']
        # literatur = Literatur.objects.filter(name__icontains=q)
        multiple_q = Q(Q(name__icontains=q) | Q(autor__icontains=q) | Q(jahr__icontains=q) | Q(auflage__icontains=q) | Q(verlag__icontains=q) | Q(ort__icontains=q) | Q(isbn__icontains=q))
        literatur = Literatur.objects.filter(multiple_q)
    else:
        literatur = Literatur.objects.all()
    return render(request, "literatur/index.html", {"literatur":literatur})


def commentAction(request):
    user = request.POST["user"]
    comment = request.POST["comment"]

    print(user, comment)

    Kommentar.objects.create(user=user,
                        comment = comment)
    return HttpResponseRedirect(reverse('literatur:index'))

urls.py

app_name = "literatur"

urlpatterns = [
    path('', views.index, name='index'),
    path('<int:literatur_id>/', views.detail, name="detail"),
    path('new', views.new, name="new"),
    path('deleteAction/<int:i>/', views.deleteAction, name="deleteAction"),
    path('commentAction', views.commentAction, name="commentAction"),
]

index.html

<table class="table">
  <thead class="thead-dark"> 
  <tr><th scope="col">Username</th><th scope="col">Kommentar</th></tr>
  {% for i in kommentar %}
  <tr>
  <td>{{i.user}}</a></td>
  <td>{{i.comment}}</td>
  </tr>
  {% endfor %}
</table>

Внутри функции index view вы делаете запрос к литературе и передаете его в функцию render для рендеринга html-шаблона. Однако index.html не заботится о литературе.

Составьте запрос к Kommentar и передайте queryset в функцию render

def index(request):
   … # Your view logic
   kommentar = Kommentar.objects.all()
   return render(request, ‘literatur/index.html’, {‘literatur’: literatur, ‘kommentur’: kommentur})

P.S.

  1. Кверисет literatur не используется в шаблоне index.html. Вы можете просто удалить эту часть логики представления или изменить index.html, чтобы использовать кверисет;
  2. .
  3. Вы можете добавить косую черту к url-путям 'new' и 'commentAction' в вашем urls.py
  4. .

Вы уверены, что это правильный index.html? Нет смысла передавать туда литературу, поскольку ваш шаблон соответствует цели отображения комментариев пользователей.

В любом случае... вы забыли передать список "Kommentar"-Items в ваш индекс.

Вернуться на верх