Tengo un modelo como el siguiente. Cuando se crea una instancia, quiero enviar un correo electrónico a una parte interesada:Django: Obteniendo la URL absoluta sin acceso a un objeto de solicitud
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='[email protected]',
recipient_list=[instance.notify_email,]
)
signals.post_save.connect(new_stop_created, sender=TrainStop)
Sin embargo, la llamada reverse
sólo devuelve la parte de ruta de la URL. Ejemplo: /stops/9/status/
. Necesito una URL completa como http://example.com/stops/9/status/
. ¿Cómo voy a recuperar el nombre de host y el puerto (para las instancias de prueba que no usan el puerto 80) del sitio web actual?
Mi idea inicial era hacer que esto esté disponible a través de una variable en settings.py
a la que podría acceder cuando sea necesario. Sin embargo, pensó que alguien podría tener una sugerencia más robusta.
"si no se molestan en configurarlo, mi aplicación no se molestará en trabajar para ellos", pero eso no es útil "¿Cómo se puede llamar para indicar que un" requisito "es" no útil "? Es un requisito fácil para declarar. Tiene que ser puesto en la configuración y eso es el final. Gran parte de Django requiere configuración o no funciona. ¿Por qué esta aplicación debe ser "mágica" y no requiere configuración? Si no puede confiar en el usuario, entonces, van a hacer algo más para subvertir la aplicación también, ¿no? Al igual que alterar el código.Simplemente indique la configuración requerida y termine con ella. No waffle –
Esto es cierto, pero quería decir más que no es útil para nuestra discusión actual hacia un método de detección de dominio confiable. Tienes razón, sin embargo, es tonto de mi parte decir que "no podemos confiar en el usuario" así. – eternicode
No puede detectar el dominio sin la solicitud, y 'reverse' o' {% url%} '. Cualquier otra cosa ** requiere ** una configuración. Es sencillo. No hay razón para dudar sobre eso. Requiere la configuración y listo. –