Django - 多个应用在一个网页上?

15 投票
5 回答
12977 浏览
提问于 2025-04-18 12:26

我在网上找了很多地方,但没有找到答案。
我刚开始接触Django,已经完成了官方的教程,还看了很多其他的资料,但遗憾的是,它们都只关注如何创建一个应用。因为一个网页通常不会只有一个应用,所以我想请教一些Django高手,能不能解释一下我该如何在一个网页上有多个应用。比如,我访问mysite.com时,可以看到一个投票应用显示投票内容,一个图库应用显示一些图片,还有一个新闻应用显示最新新闻等等,所有这些都通过一个网址访问。我知道展示内容是在模板中完成的,但显然我需要访问数据。我是需要创建一个视图来返回多个视图吗?任何建议、链接和示例都非常感谢。

5 个回答

0

根据我的经验,这通常是通过模板标签来实现的,具体可以参考这个链接:https://docs.djangoproject.com/en/dev/ref/templates/builtins/。在你的例子中,如果想在页面上添加一个投票,你需要先创建一个投票的应用程序,然后使用模板标签把这个投票添加到页面上。这个投票不会直接在你的视图里。

1

你可以用几个div来创建一个布局,目的是把你所有的应用分布在每个div里。你可以很简单地在每个div里绘制你想要的应用网址内容,就像谷歌搜索展示预览那样。在你的具体情况下,你可能想为所有应用使用相同的CSS,这样就不用使用CSS隔离的技巧了。 另一种解决方案是使用iframe…… 这可能会很有用:

Ajax/jQuery - 在页面加载时将网页内容加载到div中?

https://pythonhosted.org/django-portlets/

https://github.com/diefenbach/django-portlets

希望这对你有帮助

3

每个页面或视图应该放在一个单独的应用里,不过你可以在一个应用里加载其他应用的内容。不过这样做会让这个应用依赖于其他应用的存在。

举个例子,如果你想在一个叫“thisapp”的应用里显示另一个叫“otherapp”的应用里的内容,那么在“thisapp”的视图文件里,你只需要在文件顶部加上一行导入代码,就像这样:

from otherapp.models import OtherAppModel

完成导入后,你就可以访问那个模型的字段和方法了。另外,记得在你的设置文件里把所有应用都添加到INSTALLED_APPS列表中。

11

Django应用其实并不是直接对应一个页面,而是对应一个功能。比如说,你可以有一个“投票”应用或者一个“新闻”应用。每个应用应该有一个主要的模型,可能还会有几个辅助的模型。比如,一个新闻应用可以有一个用于文章的模型,另外还可以有作者和媒体等辅助模型。

如果你想在一个页面上显示多个应用的信息,你就需要一个整合应用。实现这一点的一种方法是,在你的投票和新闻应用旁边再创建一个“项目”应用。这个项目应用是专门为你的网站服务的,它包含了这个应用特有的逻辑。它会有你的主要urls.py文件、基础模板等。如果你需要在一个页面上获取多个应用的信息,你就需要一个视图来返回这些信息。举个例子,你可以有一个视图返回新闻文章的信息,还有一个视图返回投票的信息。你可以在你的项目应用中创建一个视图,调用这两个视图函数,把返回的数据放到一个包含这两部分内容的不同模板中。

在这个具体的例子中,你还可以设置你的投票应用,使得它返回的信息可以嵌入到其他地方,然后把这些信息嵌入到新闻文章中。在这种情况下,你在开发时其实不需要把这些应用直接连接在一起,而是在内容创建时根据需要来处理。

13

你可以这样做,把应用的数据展示在页面上。

在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')

不过,如果你想把信息放在侧边栏里,让它一直显示出来,那你就需要用到模板标签。

撰写回答