J'ai un modèle comme celui ci-dessous. Lorsqu'une instance est créée, je veux envoyer un e-mail à une partie intéressée:Django: Obtention de l'URL absolue sans accès à un objet de requête
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)
Cependant, l'appel reverse
retourne uniquement la partie du chemin de l'URL. Exemple: /stops/9/status/
. J'ai besoin d'un URL complet comme http://example.com/stops/9/status/
. Comment puis-je récupérer le nom d'hôte et le port (pour les instances de test qui n'utilisent pas le port 80) du site Web actuel?
Ma pensée initiale était de rendre cela disponible via une variable en settings.py
que je pouvais ensuite accéder au besoin. Cependant, pensé que quelqu'un pourrait avoir une suggestion plus robuste.
"S'ils ne prennent pas la peine de le configurer, mon application ne prendra pas la peine de travailler pour eux", mais cela n'est pas utile "Comment pouvez-vous appeler en disant" une exigence "pour être" pas utile "? Il faut mettre dans les paramètres et c'est la fin de cela.La plus grande partie de Django nécessite des paramètres ou cela ne fonctionne pas.Pourquoi cette application doit être "magique" et ne nécessite pas de paramètres? Si vous ne pouvez pas compter sur l'utilisateur, alors, ils vont faire quelque chose d'autre pour subvertir l'application aussi, ne sont-ils pas? Comme modifier le code.Indiquez simplement les paramètres requis et faites-le avec. Ne pas gaufres. –
Cela est vrai, mais je voulais dire plus que cela n'est pas utile à notre discussion actuelle vers une méthode de détection de domaine fiable. Vous avez raison, cependant, c'est stupide de ma part de dire que nous ne pouvons pas compter sur l'utilisateur comme ça. – eternicode
Vous ne pouvez pas détecter le domaine sans la demande, et 'reverse' ou' {% url%} '. Tout le reste ** nécessite ** un paramètre. C'est simple. Pas de raison de s'en plaindre. Exiger le réglage et être fait. –