Bel*_*dez 17 python django django-signals django-settings
我有一个类似下面的模型.创建实例时,我想向相关方发送电子邮件:
class TrainStop(models.Model):
name = models.CharField(max_length=32)
notify_email = models.EmailField(null=True, blank=True)
def new_stop_created(sender, instance, created, *args, **kwargs):
# Only for new stops
if not created or instance.id is None: return
# Send the status link
if instance.notify_email:
send_mail(
subject='Stop submitted: %s' % instance.name,
message='Check status: %s' % reverse('stop_status', kwargs={'status_id':str(instance.id),}),
from_email='admin@example.com',
recipient_list=[instance.notify_email,]
)
signals.post_save.connect(new_stop_created, sender=TrainStop)
Run Code Online (Sandbox Code Playgroud)
但是,该reverse调用仅返回URL的路径部分.示例:/stops/9/status/.我需要一个完整的URL http://example.com/stops/9/status/.如何检索当前网站的主机名和端口(对于不使用端口80的测试实例)?
我最初的想法是通过变量使其可用settings.py,然后我可以根据需要访问.但是,有人认为有人可能会提出更强有力的建议.
正如 yedpodtrzitko 所提到的,有站点框架,但是,正如您所提到的,它在很大程度上是手动设置的。
需要在 settings.py 中进行设置,但它只比设置站点稍微少一些手动操作。(它可以处理多个域,就像站点和SITE_ID设置一样)。
有一个替换 get_absolute_url的想法,这会使这样的事情变得更容易,尽管我认为它的实现存在同样的问题(如何获取域、方案 [http vs https] 等)。
我一直在玩弄一个中间件的想法,它检查传入的请求并根据 HTTP HOST 标头值的频率构建某种“最有可能的域”设置。或者它可以针对每个请求单独设置此设置,以便您始终可以使用当前域。我还没有到认真研究它的地步,但这是一个想法。
| 归档时间: |
|
| 查看次数: |
9429 次 |
| 最近记录: |