我有一个项目,它刚刚从我的其他项目中吸收了几个应用程序到一个主要项目。该结构是一个主应用程序,位于根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吗?
任何帮助都非常感激。
答案 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”。
就像我说的那样,你想要完成的事情从我坐的地方开始并没有多大意义。