我正在开发一个Django项目,我有3个模型书籍,章节,主题。
我想显示用户界面中所有图书的列表。当用户点击任何书籍时,所有章节都会显示,当用户点击任何章节时,将显示所有主题。
我试图使用基于类的视图来获取它。 要获取图书清单,请查看view.py
class read_books(TemplateView):
model = books
template_name='books_list.html'
def get_context_data(self, *args, **kwargs):
ctx = super(read_books, self).get_context_data(*args, **kwargs)
ctx["books"]=books.objects.all()
#here is the problem
ctx["chapters"]=chapters.objects.filter(book_id=4)
return ctx
和books_list.html为
<script>
$(document).ready(function(){
$("#child").hide();
$("#parent").click(function(){
$("#child").show();
});
});
</script>
</head>
<div id="parent" class="nav-width center-block">
{% for wb in books %}
<button>{{ wb.book_name }}</button>
</br></br>
{% endfor %}
</div>
<div id="child">
{% for s in chapters %}
<a href="">{{s.sheet_name}}</a>
</br></br>
{% endfor %}
</div>
{% endblock %}
现在我很麻烦,会有一份有id的书籍清单。我想通过那个id &#39; CTX [&#34;章节&#34] = chapters.objects.filter(book_id = 4)&#39; 现在我手动传递它。任何人都可以建议并帮助如何从书籍模型获取id并在此查询中传递它 任何帮助都会受到高度关注。
答案 0 :(得分:1)
class BookList(ListView):
model = Book
# the below would show the details of particular chapters for a specific book
class BookDetail(DetailView):
model = Book
#and so on
class chapterList(ListView):
model = Chapter
on your html - link the urls to each book/chapter by using their respective pks
<a href = '{% url "book" pk = obj.pk %}'></a>
答案 1 :(得分:0)
好吧,假设您希望将视图实现为TemplateView
(但返回相同的结果+在不同模型上的其他一些查询。您可以执行以下操作:
# models.py
class Book(models.Model):
...
class Model1(models.Model):
...
class ModelN(models.Model):
...
# views.py
class BookTemplateView(TemplateView):
def get_context_data(self, *args, **kwargs):
ctx = super(BookTemplateView, self).get_context_data(*args, **kwargs)
ctx["books"] = Book.objects.all()
ctx["data_1"] = Model1.objects.all() # you can refine this, of course
...
ctx["data_n"] = ModelN.objects.all() # you can refine this, of course
return ctx
并且在Book_list.html
中,您可以写一些类似的内容(取自您的问题):
{% for wb in books %}
<button>{{ wb.book_name }}</button>
</br></br>
{% endfor %}
...
{% for object in data_1 %}
... do something meaningful ...
{% endfor %}
...
{% for object in data_n %}
... do something meaningful ...
{% endfor %}
请注意,如果BookTemplateView
继承自ListView
,则此功能将完全相同,然后您无需分配ctx["books"] = Book.objects.all()
(这就是为什么我认为这样做的原因少干的方法)
这接近你喜欢做的事吗?