0

考虑以下 django 站点结构:

root/
- manage.py
- main/
-- __init__.py
-- settings.py
-- urls.py
- phase1/
-- __init__.py
-- urls.py
-- phase1/content/
--- __init__.py
--- models.py
--- views.py

即 3 个应用程序,main/、phase1/ 和 phase1/content/。

设置的root_url为main/url.py,模块相关代码为:

#main/urls.py

urlpatterns = patterns('',
    url(r'^phase1/', include('phase1.urls')),)

#phase1/urls.py

url(r'^problem/(\d+)/$', content.views.view_problem, name='problem')

#phase1/content/models.py

class Problem(django.db.models.Model):
    ## stuff and fields
    def get_absolute_url(self):
        return django.core.urlresolvers.reverse('content.views.view_problem',
                                                args=[str(self.id)])

很明显,url /phase1/problem/1/ 的请求要求 content.view.view_problem 具有正确的参数。但是,反向函数在使用时不会生成此路径(例如在模板上)。

如果我添加前缀“phase1”。在 reverse() 的第一个参数上:

        return django.core.urlresolvers.reverse('phase1.content.views.view_problem',
                                                args=[str(self.id)])

有用。这不是我想要的,因为 phase1/ 和 content/ 应该是 django 意义上的可移植应用程序,所以“phase1”不应该在 content/app 的代码中......

也许我错过了一些东西。有人可以正确解释为什么会发生这种情况并提供解决方案吗?

4

1 回答 1

0

您需要反向使用 url 的名称。IE,

return django.core.urlresolvers.reverse('problem',
                                        args=[str(self.id)])
于 2013-05-13T13:30:04.300 回答