Django:如何使用多个应用程序构建/使用项目

时间:2017-08-20 18:29:33

标签: python django web

我已经在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。但是,使用此解决方案,我无法在同一页面上进行投票和评论。我希望你能清楚我的问题是什么。

在单个网页上显示不同应用的“最佳做法”是什么?或者完全不同?

如果你能给我一个真实世界的例子或很好的教程来链接这个问题,我也很高兴。

1 个答案:

答案 0 :(得分:1)

使用基于类的通用视图并提供额外的上下文。以下是文档中的链接:

https://docs.djangoproject.com/en/1.11/topics/class-based-views/generic-display/#adding-extra-context

以下是示例代码:

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(),它还可以检索数据库中的所有书籍。您可以将多个模型与此组合在一起。