나는 비교적 단순하게 보이려고 노력하고 있습니다.하지만 완전히 엉망입니다. 모델이 있고 인스턴스가 처음 생성되면 전자 메일을 보내려고합니다. 나는이를 사용하여 충분히 쉽게 할 수 있습니다모델이 생성되었을 때 (요청 객체없이) absolute_uri를 사용하여 메일 보내기
@receiver(models.signals.post_save, sender=MyModel)
def execute_after_save(sender, instance, created, *args, **kwargs):
if created:
send_mail(mail_type='MyModel_created', instance=instance)
그러나, 문제는 내가 관리자 패널에서 모델의 변화보기로 전자 메일에있는 링크를 보낼 필요가있다. 나는 위에서 언급 한 send_mail() 함수 내부 링크 구축 (다른 경우)과 같은 코드를 사용하고 :
mymodel_admin_url = request.build_absolute_uri(reverse('admin:mymodels_mymodel_change', args=(instance.id,)))
을하지만 당신은이 '외설하는 요청 객체를 가지고에 의존하는 것을 알 수 있습니다 post_save 신호 나 심지어 save 메소드를 통과하지 못했습니다. 이 경우 필요한 링크를 얻는 가장 좋은 방법은 무엇입니까?
요청을 통과하는 모든 것을 다시 작성하고 무시하는 것 (예 : save 메소드, base_save 메소드, post_save 신호 등)은 악몽처럼 보입니다. 그러나 사이트 프레임 워크를 사용하여 필요한 링크를 얻을 수 없습니다 (일부 경우 하위 도메인에 사이트를 사용하거나 예를 들어 manage.py runserver를 사용하여 테스트 할 때). 사이트 프레임 워크를 호출하면 올바른 링크가 작성되지 않습니다.).
이것은'sites' 프레임 워크의 전형적인 유스 케이스처럼 보입니다. 그게 왜 효과가 없을 지에 대해 설명해 주시겠습니까? 장고가 웹 서버가 응답 할 도메인 이름을 알 수있는 방법이 없으므로 링크를 만들 때 사용할 도메인 이름을 알려줘야합니다. 그것은 코드 일 수 있지만,'sites' 프레임 워크는 일반적으로 더 융통성이 있습니다. –
@KevinChristopherHenry - 사이트 프레임 워크를 사용하는 것은 settings.py의 SITE_ID를 호출하는 행에 따라 수행 한 다음 데이터베이스에서 설정 한 사이트 (예 : SITE_ID = 1)에 액세스하는 데 사용합니다. 편집 : 나는 domain = Site.objects.get_current() 사용 믿습니다. 이것은 내 링크를 만들 때 "example.com"을 불러 오지만 내 dev 서버 ("dev.example.com") 또는 관리를 사용할 때는 전혀 유용하지 않습니다.py runserver ("127.0.0.1:8000"). request.build_absolute_uri와 같이 사이트 프레임 워크를 사용하여 실제 절대 URL을 반환하는 방법이 있습니까? –