Django引用应用程序之间的URL

时间:2011-11-01 17:21:04

标签: django django-urls

我有一个项目,它刚刚从我的其他项目中吸收了几个应用程序到一个主要项目。该结构是一个主应用程序,位于根URL和其他具有特定URL的应用程序。我已经设置了urls.py:

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吗?

任何帮助都非常感激。

1 个答案:

答案 0 :(得分:0)

应用程序本身并没有与之关联的URL。网址与视图相关联,这些视图可以引用任何应用中的任何模型,或者根本不引用模型或应用。你在做什么没有意义。

更新:我仍然不确定你要链接的是什么。 “app”是一个抽象概念。我理解有一个“应用程序”列表,但你会为个人应用程序获得什么样的视图?不过,是的,您应该在get_absolute_url模型上使用Apps方法。然后,您最好的选择是将每个应用程序中的任何视图命名为“索引”视图,其内容与“app_(title)”类似。然后你可以用以下内容构建正确的反向:

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

当然,您可能应该使用类似于slug的东西来修改它,以适应可能包含多个单词的标题,例如: “酷应用程序”需要替换为“cool_app”。

就像我说的那样,你想要完成的事情从我坐的地方开始并没有多大意义。