我正在构建一个应用程序,我正在尝试与我的Django项目中的其他应用程序保持正确分离(随时告诉我保持Django应用程序分离,我很乐意了解更多/一直以来。
我的问题是:我写的get_ absolute_url()方法是根据我的视图返回相对路径。我认为必须在项目urls.py中添加一个特殊的命名视图是错误的,这样我的应用程序中就可以有绝对的URL,我无法弄清楚我做错了什么。所以,如果有人可以帮助我,我会非常感激(当我发布这个傻逼时提及你!)
我有一个项目级别的urls.py,其中包含另一个基于URL模式的urls.py,因为这个例子的名称很简洁:
project-urls.py
urlpatterns = patterns('',
('^$', direct_to_template, {'template': 'base.html'}),
(r'^app', include('project.app.urls')),
)
app-urls.py
urlpatterns = patterns('',
url(r'(?P<slug>[-\w]+)?/?$', 'app.views.home', name='app_home'),
)
现在,在我的模型中,我有类似的东西:
class AppModel(models.Model):
title = models.CharField(_('title'), max_length=100)
slug = models.SlugField(_('slug'), unique=True)
@permalink
def get_absolute_url(self):
return ('app_home', None, {'slug': self.slug})
当我在模板中调用 {{AppInstance.get_ absolute_url}} 时,我会得到以下内容:
/slug-is-here
哪个不是绝对的&amp;根据我的urls.py有意义。我应该改变什么来获得一个真正的绝对网址,同时保持这个应用程序清洁&amp;与项目不太相关吗?
答案 0 :(得分:0)
Welp,
事实证明,当我看到这个时:
/slug-is-here
我应该仔细看看。真正发生的事情是:
/app-pathslug-is-here
我在我的项目urls.py中错过了应用程序正则表达式的尾部斜杠。
所以是的。让这成为你们的教训。