2016-10-22 3 views
1

django 신호에서 내 웹 사이트 주소로 전자 메일을 보내려고합니다. 나는이 질문에 발견Django : 신호 처리기에서 도메인 이름을 얻는 방법

AttributeError: 'NoneType' object has no attribute 'get_host'

내 코드에서 get_current_site에서 오는 :

https://stackoverflow.com/a/15521046/2385132 및 허용 대답에 권고 한대로 진행하지만, 그 코드를 사용하는 경우,이 오류를 받고 있어요
@receiver(post_save, sender=MyModel) 
def post_obj_save(sender, instance: MyModel, **kwargs): 
    def _get_html(obj: MyModel): 
     return render_to_string('confirmation_email.html', _get_context(obj)) 

    def _get_context(obj: MyModel): 
     current_site = get_current_site(request=None) 
     domain = current_site.domain 
     action = reverse('obj_activation', request=None, format=None, kwargs={}) 
     url = '{protocol}://{domain}/{action}'.format(protocol=PROTOCOL, domain=domain, action=action)   
     return { 
      'header': _('Thank you for registering with ASDF.'), 
      'prompt': _('In order to be able to log in into ASDF administrator panel, you have to activate your account using'), 
      'link_name': _('this link'), 
      'activation_url': url 
     } 

    send_mail(
     _('ASDF account activation'), 
     _get_html(instance), 
     EMAIL_FROM, 
     [obj.owner.email], 
     fail_silently=False, 
    ) 

그래서 질문입니다. 신호에서 내 전체보기 URL을 얻으려면 어떻게해야합니까?

btw. 나는 django-rest-framework을 사용하고 있습니다. 최근 장고 버전 (아마도 귀하의 경우)에

답변

3

는 도메인이 SITE_ID 경우이 설정에 정의되지 않은 요청에서 가져온 항상입니다. 1.8 장고 버전에 도입 this 변경을 참조하십시오 :

Changed in Django 1.8:

This function will now lookup the current site based on request.get_host() if the SITE_ID setting is not defined.

따라서, 귀하의 경우 request=None에 당신이 sites framework가 활성화되어 있어야, 현재 사이트/도메인에 대한 항목과 Site 테이블에 올바른 인스턴스를 가리키는 SITE_ID 설정, 이것을 시도하면 볼 수 있습니다 :)

+0

사실 나는 django v1.9.7 :)을 사용하고 있습니다. 네가 대답 할거야, 고마워. –

+0

hehe .. 예, 답변을 업데이트했습니다. – trinchet

관련 문제