我被要求在星期五发送一封电子邮件,其中包含符合一系列条件的项目清单。数据库前端是用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
文件包含实际任务。
答案 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')