2011-11-01 94 views
1

我有一個項目,它已經將幾個來自我的其他項目的應用程序同步到一個主項目中。該結構是位於根網址和其他具有特定網址的應用程序的主要應用程序。我已經建立了我的urls.py:Django在應用程序間引用網址

url(r'^$', include('main_app.urls')), 
url(r'^app1/', include('app1.urls')), 
url(r'^app2/', include('app2.urls')), 
url(r'^app3/', include('app3.urls')), 

我在main_app models.py模型描述的線沿線的我的其他應用程序:

class App(models.Model): 
    title = models.CharField() 
    image = models.ImageField("App Image", upload_to="images/apps/", blank=True, null=True) 
    description = models.TextField() 

在我main_app觀點:

def index(request): 
    app_list = App.objects.all() 
    return render_to_response('index.html', 
      locals(), context_instance=RequestContext(request)) 

所以,在我的根指數模板(main_app)我想通過所有的應用程序循環並打印鏈接:

{% for app in app_list %} 
    {{ some_app_variables }} 
    <a href="???">Link to app</a> 
{% endfor %} 

我的問題是我應該如何定義這個鏈接。我應該擁有應用模型的get_absolute_url嗎?

任何幫助非常感謝。

回答

0

應用程序本身並不具有某個與之關聯的網址。 URL與視圖綁定,這些視圖可以從任何應用引用任何模型,或者根本不引用任何模型或應用。你在做什麼沒有道理。

更新:我仍然不確定您要鏈接到的內容。 「應用程序」是一個抽象的概念。我知道有一個「應用程序」的列表,但你會得到一個單獨的應用程序的什麼樣的觀點?不過,是的,您應該在Apps模型上使用get_absolute_url方法。然後,你最好的選擇是命名每個應用程序中的任何視圖將成爲沿着「app_(title)」行的「索引」視圖。然後,你可以沿東西線構造向右反轉:

@models.permalink 
def get_absolute_url(self): 
    return ('app_%s' % self.title,(), {}) 

當然,你或許應該修改的東西類似蛞蝓,以容納標題可能有多個單詞,例如「酷應用」將需要被替換爲「cool_app」之類的東西。

就像我說過的,儘管如此,你要完成的任務仍然沒有什麼意義。

+0

我已經添加了一些關於我的模型和視圖的信息,希望能夠澄清我想要做的事情。 –

+0

這更符合我的想法。我相信我必須嚴肅地解釋自己,因爲我猜想這是任何具有多個應用程序的項目的基本問題。換句話說,你如何鏈接到來自中央主頁的每個應用程序,而無需在模板中對URL進行硬編碼? –

+0

請參閱問題是,應用程序通常不會按照如此定義的方式處理。你可能在你的網站上有一個日曆應用程序,但是你沒有鏈接到在應用程序中創建一個視圖的「應用程序」,該應用程序知道如何渲染日曆,然後附加一個URL,如「/ calendar /」視圖。該應用程序可以被稱爲「日曆」或「事件」或「狗食」。這並不重要。它只是一組定義的功能的容器。 –

相關問題