如何在Django中从get_absolute_url获取包含urls.py的准确绝对网址?
我现在正在开发一个应用,想要确保它和我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 文件中,应用的正则表达式后面少了一个斜杠。
所以,大家记住这个教训吧。