gpt4 book ai didi

django - 如何在 Django(无需请求)中获取 URL(带有协议(protocol)和域)?

转载 作者:行者123 更新时间:2023-12-03 11:16:53 24 4
gpt4 key购买 nike

我想在 cron 作业中发送邮件。邮件应包含
我的应用程序的链接。
在 cron 作业中,我没有请求对象,也无法使用 request.build_absolute_uri()。
AFAIK 网站框架可以在这里提供帮助。但是没有给我协议(protocol)(http vs https)?
我的应用程序是可重用的,有时托管在 http 网站上,有时托管在 https 网站上。
更新
我搜索了一种常见的 django 方式。可以创建自定义设置,但首选具有 django 标准的解决方案。

最佳答案

TL;DR :没有任何“标准”“Django-ish”的方式来做到这一点,但框架提倡的 DRY 原则假设单一配置存储,因此自定义设置似乎是一个不错的方法。

默认情况下,Django 可以从单个实例为任意数量的域提供服务,HTTP 请求(更准确地说,它的 HTTP_HOST header )是 Django 用来确定当前主机的唯一东西。
由于您的 cron 作业显然超出了 HTTP 周期,因此您应该将域存储在设置中的某个位置...

# settings.py
DEFAULT_DOMAIN = 'https://foobar.com'
# or, depending on your configuration:
DEFAULT_DOMAIN = 'https://{}'.format(ALLOWED_HOSTS[0])

...带有一个微型上下文处理器,可以更轻松地处理模板:
# yourapp/context_processors.py
from django.conf import settings

def default_domain(request):
return {'default_domain': settings.DEFAULT_DOMAIN}

...然后在您的电子邮件中使用它:
# yourapp/templates/email/body.html
<a href="{{ default_domain }}{% url 'target' %}">Click here</a>

或者,您可以使用 sites框架,但如果您服务于单个域,则基于设置的解决方案对我来说似乎更简单、更清晰。

关于django - 如何在 Django(无需请求)中获取 URL(带有协议(protocol)和域)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34989031/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com