djangoで本を管理するアプリを作っていて、追加された本を、順位に沿ってランキング形式に出力したいです。
[{'_state': <django.db.models.base.ModelState object at 0x7fbe200220a0>, 'id': 8, 'title': '孫氏', 'detail': '素晴らしい', 'rank': 1}, {'_state': <django.db.models.base.ModelState object at 0x7fbe20022760>, 'id': 10, 'title': '論語', 'detail': '良い', 'rank': 2}, {'_state': <django.db.models.base.ModelState object at 0x7fbe20022ca0>, 'id': 9, 'title': '学問のすすめ', 'detail': 'いいね', 'rank': 3}]
上のように、追加された項目を配列型のオブジェクトにして、rankのvalueでソートしてtemplatesで下のように表示させようとしたのですが、
html
1{% extends 'base.html' %} 2 3{% block content %} 4 {% for post in dicttionary_sorted %} 5 <p>順位: {{ post["rank"] }} タイトル:<a href="{% url 'detail' post.pk %}">{{ post['title'] }}</a></p> 6 {% endfor %} 7{% endblock %}
raise TemplateSyntaxError("Could not parse the remainder: '%s' "
django.template.exceptions.TemplateSyntaxError: Could not parse the remainder: '["rank"]' from 'post["rank"]'というエラーが出てしまいました。原因は、おそらくtemplatesでpost["rank"]とできないからなのですがどのようにしたらいいかわかりません。ご教授いただけ得たら幸いです。
views.py
1from django.shortcuts import render, redirect 2from django.utils import timezone 3from django.views.generic import View 4from .models import Book 5from .forms import BookCreateForm 6 7 8 9def formfunc(request): 10 if request.method == 'POST': 11 form = BookCreateForm(request.POST) 12 if form.is_valid(): 13 post = form.save(commit=False) 14 post.save() 15 return redirect('list') 16 else: 17 form = BookCreateForm() 18 return render(request, 'form.html', {'form': form}) 19 20def listfunc(request): 21 posts = Book.objects.all() 22 dictionary = [] 23 for i in posts: 24 dictionary.append(i.__dict__) 25 dictionary_sorted = sorted(dictionary, key=lambda x:x['rank']) 26 print(dictionary_sorted) 27 return render(request, 'list.html', {'posts': posts}) 28 29def detailfunc(request, pk): 30 post = Book.objects.get(pk=pk) 31 return render(request, 'detail.html', {'post': post})
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/29 01:11
2020/12/29 01:22 編集
2020/12/29 02:24 編集