Mam taki model jak ten poniżej. Gdy instancja jest tworzona, chcę, aby wysłać e-mail do zainteresowanej strony:Django: Uzyskiwanie bezwzględnego adresu URL bez dostępu do obiektu żądania
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)
Jednak wywołanie reverse
zwraca tylko część ścieżki URL. Przykład: /stops/9/status/
. Potrzebuję pełnego adresu URL, takiego jak http://example.com/stops/9/status/
. W jaki sposób chciałbym pobrać nazwę hosta i port (dla instancji testowych, które nie korzystają z portu 80) bieżącej witryny internetowej?
Moja początkowa myśl polegała na udostępnieniu tej zmiennej za pomocą zmiennej w settings.py
, którą wówczas mógłbym uzyskać w razie potrzeby. Jednak myślę, że ktoś może mieć bardziej zdecydowaną sugestię.
"jeśli nie zadają sobie trudu, aby to ustawić, moja aplikacja nie będzie dla nich pracowała", ale to nie jest pomocne "? Jak możesz zadzwonić podając" wymaganie ", aby być" nie pomocne "? Jest to łatwe wymaganie To musi być ustawione w ustawieniach i na tym koniec .Dużo Django wymaga ustawień lub nie działa Dlaczego aplikacja ma być "magiczna" i nie wymaga ustawień? Jeśli nie możesz polegać na użytkownik, a następnie, oni będą robić coś innego, aby obalić aplikację również, prawda? Jak zmienić kod.Po prostu podaj wymagane ustawienia i gotowe. Nie gofruj. –
To prawda, ale miałem na myśli, że nie jest to pomocne w naszej obecnej dyskusji na temat niezawodnej metody wykrywania domen. Masz jednak rację, to głupio mówić, że "nie możemy polegać na użytkowniku". – eternicode
Nie można wykryć domeny bez żądania i 'reverse' lub' {% url%} '. Wszystko inne ** wymaga ** ustawienia. To proste. Nie ma powodu do gofrowania. Wymagaj ustawienia i gotowe. –