2013-04-21 193 views
2

我有一個名爲Project_Name的項目和一個名爲first_app的應用程序,其中包含一些文章。 我在我的主頁上顯示這些文章標題作爲應用頁面上文章的鏈接。從單個html頁面上的多個django應用模型獲取數據

所以在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)), 
     ... 

這裏是我的models.py我first_app應用程序中:

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}) 

這是我detail.html在我的first_app模板文件夾:

<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

我不知道如何迭代我的應用程序的所有模型來獲取文章表格的數據。我不知道如何生成網址來反映文章的來源。我嘗試了一些東西,但沒有任何工作。我堅持在這一點上。 我對Django很新,所以請給我一些有用的意見或解決方案,而不是敲掉我的問題。

我該如何改變我的意見,網址和html頁面來做到這一點?謝謝。

回答

0

對於URL問題,請使用模型get_absolute_url功能,

有關迭代在應用中的所有型號的問題,那是什麼你是換貨的模板做,你應該收集你的數據需要在視圖中呈現給模板進行渲染,所以答案是您可以在視圖中選擇需要的模型,然後將其發送到模板。

但是應用程序可以成爲可重用的組件,如果你的應用程序對彼此有很強的依賴性,很難激發它們成爲獨立的應用程序。

+0

謝謝。好的,我如何從我的項目視圖中的多個應用程序中收集數據,用於我的功能主頁?像'從first_app.models導入文章'爲每個應用程序?那麼對於second_app.models和third_app.models也有導入行? – brno792 2013-04-21 23:30:22

+1

我不會給我的模型命名同樣的東西,它令人困惑。你必須做「從first_app.models導入Article作爲FirstAppArticle;從second_app.models導入Article作爲SecondAppArticle」等 – krs 2013-04-21 23:37:20

+0

另外,如果你的目標是讓不同的「事物」有關聯的文章,你可以使用一個通用的外鍵使它們適用於一系列模型,而不是與特定的模型綁定。 – krs 2013-04-21 23:40:49

相關問題