我已经在stackoverflow.com上阅读了官方的Django教程和许多其他问题,但似乎我的问题没有真正的答案,或者我只是没有得到它。不幸的是,我找不到一个包含多个应用程序的适当教程。
我的问题: Django项目通常由多个应用程序组成。我没有得到的是这些应用程序如何协同工作。
实施例:
假设我们建立一个新闻网站,这个新闻网站有博客文章,民意调查和评论区等。所以我认为创建一个名为polls
的应用程序,另一个名为blog
的应用程序和app comments
。
因此,当您浏览到url.com/news/5
时,您会看到ID为5的博文。或者当您浏览到url.com/polls/2
时,您会看到ID为2的投票。一切都好。
然而,现在,我不希望它被分开。我不想要的是当我想将网站的这些部分放在一个网页上时(就像大多数网页一样)网站)。这意味着如果我浏览url.com/news/5
,它不仅应该显示新闻,还应该显示民意调查(因为民意调查属于这个新闻页面),并且在页面底部显示对该文章的评论。
我如何构建它并将它“粘合”在一起?
通常,当我浏览到url.com/news/5
时,运行blog
应用程序中定义的视图功能并提供HttpResponse。但是,使用此解决方案,我无法在同一页面上进行投票和评论。我希望你能清楚我的问题是什么。
在单个网页上显示不同应用的“最佳做法”是什么?或者完全不同?
如果你能给我一个真实世界的例子或很好的教程来链接这个问题,我也很高兴。
答案 0 :(得分:1)
使用基于类的通用视图并提供额外的上下文。以下是文档中的链接:
以下是示例代码:
from django.views.generic import DetailView
from books.models import Publisher, Book
class PublisherDetail(DetailView):
model = Publisher
def get_context_data(self, **kwargs):
# Call the base implementation first to get a context
context = super(PublisherDetail, self).get_context_data(**kwargs)
# Add in a QuerySet of all the books
context['book_list'] = Book.objects.all()
return context
正如您所看到的主模型是Publisher,并且使用get_context_data,您可以添加另一个上下文:context['book_list'] = Book.objects.all()
,它还可以检索数据库中的所有书籍。您可以将多个模型与此组合在一起。