Python 在单个html页面上从多个django应用程序模型获取数据

Python 在单个html页面上从多个django应用程序模型获取数据,python,django,Python,Django,我有一个名为project_Name的项目和一个名为first_app的应用程序,其中包含一些文章。 我将这些文章标题显示在我的主页上,作为应用程序页面上文章的链接 所以在127.0.0.1:8000/我有index.html。这里我显示文章列表。然后,如果我单击一篇文章,我会转到127.0.0.1:8000/first\u app/1,例如显示第一篇文章 以下是我的项目范围视图.py: ... from first_app.models import Article def home(req

我有一个名为project_Name的项目和一个名为first_app的应用程序,其中包含一些文章。 我将这些文章标题显示在我的主页上,作为应用程序页面上文章的链接

所以在
127.0.0.1:8000/
我有index.html。这里我显示文章列表。然后,如果我单击一篇文章,我会转到
127.0.0.1:8000/first\u app/1
,例如显示第一篇文章

以下是我的项目范围视图.py:

...
from first_app.models import Article

def home(request):
    latest_article_list = Article.objects.order_by('-pub_date')[:20]
    context = {'latest_article_list': latest_article_list}
    return render(request, 'index.html', context)
在我的项目范围URL.py中:

from django.conf.urls import patterns, include, url
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
        url(r'^$', 'Project_Name.views.home', name='home'),
        url(r'^admin/', include(admin.site.urls)),
        ...
这是我的第一个应用程序中的my models.py:

from django.db import models
from datetime import datetime

class Article(models.Model):
            name = models.CharField(max_length=140)
            content = models.CharField(max_length=1000)
            pub_date = models.DateTimeField(default=datetime.now())
def article_detail(request, article_id):
    art = get_object_or_404(Article, pk=article_id)
    return render(request, 'first_app/detail.html', {'article': art})
这是我的第一个应用程序中的my views.py:

from django.db import models
from datetime import datetime

class Article(models.Model):
            name = models.CharField(max_length=140)
            content = models.CharField(max_length=1000)
            pub_date = models.DateTimeField(default=datetime.now())
def article_detail(request, article_id):
    art = get_object_or_404(Article, pk=article_id)
    return render(request, 'first_app/detail.html', {'article': art})
这是我的第一个应用程序模板文件夹中的my detail.html:

<h2><u>{{ article.name }}</u></h2>
<b>Published On: </b>{{article.pub_date }}
<b>Content: </b>
<ul>
    <li>{{ article.content }}</li>
</ul>
{{article.name}
出版日期:{article.pub_date}
内容:
  • {{article.content}
这是我的项目主页index.html:

{% if latest_article_list %}
<h2>Latest Articles</h2>
<ul>
    {% for article in latest_article_list %}
        <li><a href="/first_app/{{ article.id }}/">{{article.name }}</a></li>
    {% endfor %}
</ul>
{% else %}
    <p>No articles are available.</p>
{% endif %}
{%if-latest\u article\u list%}
最新文章
    {最新文章列表%中文章的百分比}
  • {%endfor%}
{%else%} 没有可用的文章

{%endif%}
这一切都很好

我的问题: 如果我有两个或两个以上的应用程序,每个应用程序都有自己的文章(由于其他原因,我会用不同的应用程序来分解这些文章),我如何在主页上获得这些文章?然后,我将如何构建url,以便当我从主页单击一篇文章时,它会将我带到正确的应用程序url

例如,我有应用程序:第一个应用程序、第二个应用程序和第三个应用程序。每个应用程序中都有几篇文章。我希望我的主页显示每个应用程序的所有文章。如果我点击first_app上的一篇文章(比如first_app上发布的第三篇文章),我会被引导到url
127.0.0.1:8000/first_app/3
。同样,如果我点击第三个应用程序中的一篇文章(比如第三个应用程序上发布的第二篇文章),我会被引导到url
127.0.0.1:8000/third\u app/2

我不知道如何迭代我的应用程序的所有模型来获取文章表的数据。我不知道如何生成URL来反映文章来自的应用程序。我试过一些方法,但没有效果。我在这一点上卡住了。 我是Django的新手,所以请给我一些有用的意见或解决方案,而不是删掉我的问题


我应该如何更改视图、URL和html页面来实现这一点?谢谢。

对于URL问题,请在模型上使用“获取绝对URL”功能

对于在应用程序中迭代所有模型的问题,您不需要在模板中执行任何操作,您应该在视图中收集所需的数据并将其呈现给模板进行渲染,因此答案是您在视图中选择所需的模型,然后将其发送给模板


但应用程序必须是可重用的组件,如果你的应用程序彼此之间存在严重的依赖性,那么很难将它们作为单独的应用程序来使用。

谢谢。好的,那么我如何从我的项目视图中的多个应用程序中为我的功能主页收集数据呢?每个应用程序都有类似“来自first_app.models导入文章”的功能?还有第二个和第三个应用程序模型的导入行吗?我不会给我的模型取相同的名字,这让人困惑。您必须执行“从第一个应用程序模型将文章导入为第一个应用程序模型;从第二个应用程序模型将文章导入为第二个应用程序模型”等操作。此外,如果您的目标是让不同的“事物”具有关联的文章,您可以使用通用外键使它们对一系列模型有用,而不是绑定到特定的模型。