2009-09-09 6 views
3

내 모델에서 내보기에 사용중인 도메인 이름 (호스트)을 사용하고 싶습니다. "요청"개체 덕분에 할 수있는 견해가 있습니다. 그러나 어떻게해야합니까? 이 모델 방법은 무엇입니까? "HttpRequest"객체를 사용하지 않는 것은 무엇입니까?django 모델의 호스트 도메인 이름을 확인하십시오.

이제 settings.py에서 전역 값을 HOST로 설정하고 사용하고 있지만 그 값은 입니다.

또한 "사이트"(사이트 도구)를 관리하고 싶지 않습니다. - 방법이 있습니까? "기본적으로"사이트 호스트 이름을 사용할 수 있습니까?

도움을 주셔서 감사합니다. (가난한 영어에 대해 미안하다.)

답변

2

뷰에서 모델 메서드를 호출하는 경우 요청에 대한 매개 변수를 모델 메서드에 추가하고 뷰에서 호출 할 때이를 포함 할 수 있습니다. 예 :

class MyModel(models.Model): 
    ... 
    def MyMethod(self, request): 
     # Do whatever with request here 

def MyView(request): 
    mm = MyModel() 
    mm.MyMethod(request) 
+0

나는 공식적으로 어리 석다! 고마워요, Adam! :) 그래서 그냥 request.META [ 'SERVER_NAME'] 그 방법에서, 오른쪽 사용해야합니까? :) 다시 한번 고마워요! – nadomado

+0

필요한 것처럼 보입니다. – Adam

1

또한이와 HTTP_HOST 헤더와 해달라고 제공하는 HTTP_X_FORWARDED_HOST의 정보를 사용하여 요청의 원래 호스트를 반환하는 사이트의 도메인 이름을 얻기 위해 "request.get_host()"HttpRequest를의 방법을 사용할 수 있습니다 값은 SERVER_NAME과 SERVER_PORT의 조합을 사용합니다.

1

request 개체를 사용할 수없는 경우 가장 좋은 방법은 Django Sites framework을 사용하는 것입니다. 이렇게하려면 사전에 site.domain (및 원하는 경우 site.name)을 올바르게 설정해야합니다. .get_currentdjango.conf.settings.SITE_ID에 따라 설정됩니다.

>>> from django.contrib.sites.models import Site 
>>> obj = MyModel.objects.get(id=3) 
>>> obj.get_absolute_url() 
'/mymodel/objects/3/' 
>>> Site.objects.get_current().domain 
'example.com' 
>>> 'http://%s%s' % (Site.objects.get_current().domain, obj.get_absolute_url()) 
'http://example.com/mymodel/objects/3/' 
관련 문제