我在网上看了一眼,没有找到答案。 我是Django的新手。我已完成官方教程并阅读了更多内容,但不幸的是,所有这些教程都专注于创建一个应用程序。由于将页面作为单个应用程序并不常见,我想请一些Django大师解释我如何在网页上拥有多个应用程序。假设我去了mysite.com,我看到一个民意调查应用程序显示民意调查,图库应用程序显示一些图片,新闻应用程序显示最新新闻等,所有访问都通过一个网址。我知道我在模板中进行显示,但显然需要访问数据。我是否创建视图以返回多个视图?任何建议,链接和例子都非常赞赏。
答案 0 :(得分:9)
django应用程序并不真正映射到页面,而是映射到一个函数。应用程序将用于“民意调查”应用程序或“新闻”应用程序。每个应用程序应该有一个主要模型,可能有几个支持。就像一个新闻应用程序可以有一个文章的模型,与作者和媒体等支持模型。
如果您想显示多个,则需要一个集成应用。一种方法是在您的民意调查和新闻应用旁边设置一个“项目”应用程序。项目应用程序适用于您的特定网站 - 它是特定于此应用程序的逻辑。它会有你的主urls.py,你的基本模板,类似的东西。如果您需要在一个页面中显示来自多个应用程序的信息,则必须具有从多个应用程序返回信息的视图。例如,假设您有一个返回新闻文章信息的视图,以及一个返回轮询信息的视图。你可以在你的项目应用程序中有一个调用这两个视图函数的视图,并将返回的数据粘贴到一个不同的模板中,该模板有两个视图。
在这个具体示例中,您还可以设置您的民意调查应用程序,以便可以嵌入其返回信息,然后将信息嵌入到新闻文章中。在这种情况下,您根本不必将应用程序链接在一起作为开发的一部分,可以根据需要在内容创建端完成。
答案 1 :(得分:9)
您可以执行以下操作以在页面上显示应用数据。
views.py
def home(request, template='path/to/template'):
context = {
'polls': Poll.objects.all(),
'galleries': Gallery.objects.all(),
}
return (request, template, context)
在模板中:
{% for poll in polls %}
{{ poll }}
{% endfor %}
{% for gallery in galleries %}
{{ gallery }}
{% endfor %}
urls.py
url('home/$', app.views.home, name='home')
但是如果你想在侧栏上显示一直显示的信息,那么你就想使用模板标签。
答案 2 :(得分:1)
每个页面或视图都应包含在一个应用中,但是,您可以从应用内加载其他应用。然而,这确实使该应用程序依赖于存在的其他应用程序。
因此,如果您想显示来自名为" otherapp"在这个应用程序中称为" thisapp"然后在thisapp.views中,您只需将导入添加到文件顶部,如此
from otherapp.models import OtherAppModel
完成导入后,您可以访问该模型字段和方法。另外,请确保您已将所有应用添加到设置文件中的INSTALLED_APPS列表中。
答案 3 :(得分:1)
您可以创建一个包含多个div的布局,目的是在每个div上分发您的应用程序,您可以轻松地在每个div中绘制您想要的每个应用程序URL的内容,就像谷歌搜索一样预览。根据您的具体情况,您可能希望为所有应用程序使用通用css,以避免使用css隔离技术。 另一个解决方案是使用iframe .... 这可能很有用:
Ajax/jQuery - Load webpage content into a div on page load?
https://pythonhosted.org/django-portlets/
https://github.com/diefenbach/django-portlets
希望有所帮助
答案 4 :(得分:0)
根据我的经验,这通常使用模板标记https://docs.djangoproject.com/en/dev/ref/templates/builtins/来完成。 在您向页面添加轮询的示例中,您将创建一个轮询应用程序,然后使用模板标记将轮询添加到页面。 民意调查不会成为你观点的一部分。