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

0 投票
1 回答
1495 浏览
提问于 2025-04-15 12:01

我现在正在开发一个应用,想要确保它和我Django项目中的其他应用保持良好的独立性(如果你想给我讲讲如何保持Django应用的独立性,我非常乐意学习)。

我遇到的问题是:我写的get_absolute_url()方法返回的是相对路径,这个路径是基于我的视图生成的。我觉得为了在我的应用中获得绝对URL而在项目的urls.py中添加一个特殊的命名视图是不对的,我也搞不清楚自己哪里出错了。如果有人能帮我,我会非常感激(发布这个应用时我会提到你!)

我有一个项目级的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

这显然不是绝对路径,而且根据我的urls.py来看也是合理的。我应该做什么才能在保持这个应用干净的同时,获得一个真正的绝对URL,而不让它和项目紧密耦合呢?

1 个回答

0

好吧,

原来我看到这个的时候:

/slug-is-here

我应该仔细看看。实际上发生的事情是:

/app-pathslug-is-here

我在项目的 urls.py 文件中,应用的正则表达式后面少了一个斜杠。

所以,大家记住这个教训吧。

撰写回答