考虑以下 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 的代码中......
也许我错过了一些东西。有人可以正确解释为什么会发生这种情况并提供解决方案吗?