【问题标题】:Get data from multiple django app models on single html page从单个 html 页面上的多个 django 应用程序模型中获取数据
【发布时间】:2013-04-14 16:17:49
【问题描述】:

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

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

这是我的项目范围的views.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)

在我的项目范围的 urls.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)),
        ...

这是我的 first_app 应用程序中的 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())

这是我的 first_app 应用程序中的 views.py:

def article_detail(request, article_id):
    art = get_object_or_404(Article, pk=article_id)
    return render(request, 'first_app/detail.html', {'article': art})

这是我的 first_app 模板文件夹中的 detail.html:

<h2><u>{{ article.name }}</u></h2>
<b>Published On: </b>{{article.pub_date }}
<b>Content: </b>
<ul>
    <li>{{ article.content }}</li>
</ul>

这是我的项目主页,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 %}

一切正常。

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

例如,我有应用程序:first_app、second_app 和 third_app。每个应用程序都有几篇文章。我希望我的主页显示来自每个应用程序的所有文章。如果我点击来自 first_app 的文章(比如在 first_app 上发布的第三篇文章),我会被定向到 url 127.0.0.1:8000/first_app/3。同样,如果我点击来自 third_app 的文章(比如在 third_app 上发布的第二篇文章),我会被定向到 url 127.0.0.1:8000/third_app/2

我不确定如何遍历我的所有应用模型以获取 Article 表的数据。而且我不确定如何生成 url 来反映文章来自的应用程序。我尝试了一些东西,但没有任何效果。我卡在这一点上。 我对 Django 很陌生,所以请给我一些有用的 cmets 或解决方案,而不是解决我的问题。

我应该如何更改我的视图、网址和 html 页面才能做到这一点?谢谢。

【问题讨论】:

    标签: python django


    【解决方案1】:

    对于 URL 问题,使用模型上的 get_absolute_url 功能,

    关于在应用程序中迭代所有模型的问题,你不需要在模板中做任何事情,你应该在视图中收集你需要的数据并将其呈现给模板进行渲染,所以答案是您在视图中选择您需要的模型,然后将其发送到模板。

    但应用程序被要求成为可重用的组件,如果您的应用程序彼此之间存在严重依赖关系,则很难激励它们成为独立的应用程序。

    【讨论】:

    • 谢谢。好的,那么我将如何从我的项目视图中的多个应用程序收集数据,用于我的功能主页?每个应用程序的“从 first_app.models 导入文章”之类的东西?所以也有 second_app.models 和 third_app.models 的导入行?
    • 我不会将我的模型命名为相同的东西,这令人困惑。您必须执行“从 first_app.models 导入文章作为 FirstAppArticle;从 second_app.models 导入文章作为 SecondAppArticle”等。
    • 另外,如果您的目标是拥有不同的“事物”来关联文章,您可以使用通用外键使它们在一系列模型中有用,而不是与特定模型相关联。跨度>
    猜你喜欢
    • 1970-01-01
    • 2017-05-29
    • 2018-07-02
    • 1970-01-01
    • 2021-01-31
    • 1970-01-01
    • 1970-01-01
    • 2018-03-05
    • 1970-01-01
    相关资源
    最近更新 更多