我有一个名为 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 %}
这一切都很好。
我的问题: 如果我有两个或多个应用程序,每个应用程序都有自己的文章(出于其他原因,我将文章按不同的应用程序分解),我将如何在主页上获得这些文章?然后我将如何构建 url,以便当我从主页单击一篇文章时,它会将我带到正确的应用程序 url?
例如,我有应用程序: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
。
我不确定如何遍历我的所有应用程序模型以获取文章表的数据。而且我不确定如何生成 url 来反映文章来自的应用程序。我尝试了一些东西,但没有任何效果。我卡在这一点上。我对 Django 很陌生,所以请给我一些有用的意见或解决方案,而不是解决我的问题。
我应该如何更改我的视图、url 和 html 页面来做到这一点?谢谢。