在我的view.py中,我的上下文如下所示:
context = {'books': books, 'asked_author': asked_author, 'role': role_field_list}
books是一个字典列表(书籍列表),对于每本书,它存在一个或多个键,其密钥由role_field_list中的名称命名:
我尝试执行此模板:
{% for book in books %}
{% for name in role %}
<h1>{{name}}</h1>
{% for authors in book.name %}
{{ authors.lastname }} {{authors.firstname}}
{% endfor %}
{% endfor %}
{% endfor %}
但是book.name没有用。 它将名称视为一个“名称”,而不是变量......
感谢您的帮助。
要获得有关我的上下文字典的“字段”和“类型”的更多详细信息,请参阅我的view.py:
def booksAuthor(request, author):
books_role = AuthorRoleBook.objects.filter(author_book=author).values() # get all the books written by one author
asked_author = AuthorBook.objects.get(pk=author) # get lastname and firstname for the author selected
books=[]
for book_role in books_role:
book = Book.objects.get(pk=book_role['book_id'])
book_dict = model_to_dict(book)
authors_role = AuthorRoleBook.objects.filter(book_id=book).values() # Get id of the different contributor for each book
role_field_list = ['auteur', 'traducteur', 'editeur_scientifique', 'directeur_publication']
for name in role_field_list:
list_author=[]
for author_role in authors_role:
if author_role['role_id']==name:
author=AuthorBook.objects.get(pk=author_role['author_book_id'])
author_dict = model_to_dict(author)
list_author.append(author_dict)
else:
pass
book_dict[name]=list_author
books.append(book_dict)
print(book_dict)
context = {'books': books, 'asked_author': asked_author, 'role': role_field_list}
return render(request, 'books_author.html', context)
对于我的模型,也许这不是更简单的方法,但这是:
class AuthorRoleBook(models.Model):
author_book = models.ForeignKey(AuthorBook)
role = models.ForeignKey('Role')
book = models.ForeignKey('Book')
class AuthorBook(models.Model):
lastname = models.CharField(max_length=100, blank=True, null=True)
firstname = models.CharField(max_length=100, blank=True, null=True)
.... ....
unique_together = (('lastname', 'firstname'),)
class Role(models.Model):
id = models.CharField(primary_key=True, max_length=100)
class Book(models.Model):
titre = models.TextField(blank=True, null=True)
....... .... ...
isbn_electronique = models.CharField(max_length=250, blank=True, null=True)
提前谢谢。
答案 0 :(得分:0)
对我而言,它现在正在运作。我保持相同的views.py但在我的模板中我这样做:
{% for book in books %}
<h4>{{ book.titre }}</h4>
{% if book.directeur_publication %}
Directeur Publication:
{% for name in book.directeur_publication %}
{{ name.lastname }} {{name.firstname}}
{% endfor %}
{% endif %}
{% if book.editeur_scientifique %} ....
... .....等
对于role_field_list中的每个值([&#39; auteur&#39;,&#39; traducteur&#39;,&#39; editeur_scientifique&#39;,&#39; directeur_publication&#39;])我把在&#34; if条件&#34;。
中手动设置我的模板的值这不是一个美丽的方式......但它正在发挥作用。一定要使用模型对象而不是字典会更好。 感谢您的回答,但如果您有聪明的代码或想法,那么......