如何从Django中包含urls.py的get_absolute_url中获取准确的绝对URL?

时间:2009-06-03 23:16:42

标签: python regex django url models

我正在构建一个应用程序,我正在尝试与我的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;与项目不太相关吗?

1 个答案:

答案 0 :(得分:0)

Welp,

事实证明,当我看到这个时:

/slug-is-here

我应该仔细看看。真正发生的事情是:

/app-pathslug-is-here

我在我的项目urls.py中错过了应用程序正则表达式的尾部斜杠。

所以是的。让这成为你们的教训。