在Django / Celery中反转网址

时间:2015-04-21 12:52:09

标签: django celery

我被要求在星期五发送一封电子邮件,其中包含符合一系列条件的项目清单。数据库前端是用Django编写的,也是一个内部应用程序。我想链接到电子邮件中项目的管理页面。

在我的开发机器上,我正在尝试

reverse("admin:index") 

我注意到它只返回

admin 
来自Celery任务的

,而在标准的Django视图中,这将返回

127.0.0.1:8000/admin/

有解决方法吗?我不想硬编码网址的开头。

我按照“Django的第一步”教程中的描述设置了Celery,并且有一个

myproject/myproject/celery.py

定义应用程序的文件(以及settings.py和urls.py)和

project/myapp/tasks.py 

文件包含实际任务。

2 个答案:

答案 0 :(得分:1)

reverse() 始终返回域相对网址,即/admin/。增加可移植性的一个选择是使用sites framework

由于您的Celery任务中没有request对象,因此您必须在设置中明确设置SITE_ID,并在您的设置中设置网站的名称和域名数据库。然后你可以这样做:

from django.contrib.sites.models import Site
url = "%s%s" % (Site.objects.get_current().domain, reverse('admin:index'))

答案 1 :(得分:0)

通常django中的URL是相对的 - 即" 127.0.0.1:8000"您在悬停链接时看到的部分来自您从该位置浏览网站的事实。尝试查看生成的URL的href值。

解决问题的一个简单方法是将反向输出与域连接起来,即

'http://example.com/'+reverse('admin:index')