2011-11-01 24 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 /”视图。该应用程序可以被称为“日历”或“事件”或“狗食”。这并不重要。它只是一组定义的功能的容器。 –

相关问题