2012-04-06 1 views
1

제 장부 인증을받은 후 내 도메인에 콜백을 구성해야하는 장고 앱에 장소가 있지만 문제의 뷰가 실제로 한 모델에 매핑되지 않기 때문에이 작업을 수행하는 방법이 고착됩니다. (또는 뷰 코드가 여러 모델을 참조합니다.) get_absolute_url() 생성 및 퍼머 링크의 문서는 모두 참조 모델입니다. 예를 들어모델이 분명하지 않을 때 뷰에서 get_absolute_url()을 어떻게 지정합니까?

, 내 템플릿에 내가 현재 가지고 무엇인가 :

<a class="btn btn-danger large" href="http://to/third/party?api_key=noneyobiz&cb=http://localhost:8000/signup">Join via Somethingorother</a> 

urls.py에서이 뷰에 대한 행은 다음과 같습니다

url(r'^signup/$', 'signup', name="signup"), 

내가 하드 'HTTP를 원하는 : // localhost : 8000/signup '을 사용하십시오. 나는이 기능이 제네릭 뷰를 사용하는 것에 의존하지 않기를 바라고 있습니다. 사실 나는 permalink를 생성하는 것이 심지어 모델에 묶여있는 지 이해하지 못한다. urlconf에만 의존해야하는 것처럼 보인다. 내가 여기서 무엇을 놓치고 있니?

답변

1

permalinkdjango.core.urlresolvers.reverse의 얇은 래퍼입니다. django.db.models에 속하는 것은 바로 단축키이기 때문에 reverse 안에 get_absolute_url 모델을 작성하기 때문에. 그래서 여기에 반전 사용

from django.core.urlresolvers import reverse 
path = reverse('signup') 

업데이트

경로/당신이 reverse 또는 url에서 얻을 승, 당신은 Site.objects.get_current() 같은 것을

  • 설정에서 하드 코드 또는 사용할 수있는 절대 URI를 사용하려면 Daniel이 제안한 것처럼 절대 URI를 얻습니다. 콜백 URI가 같은 도메인에 있으면
  • 템플릿을 렌더링보기/승, 당신은 실제 절대 URI를 얻을 수 request에 의존 수 :

    request.build_absolute_uri(reverse('signup')) 또한

, 당신이 할 수 있습니다 URI를 template (예 : {{ absolute_uri|urlencode }})에서 이스케이프 처리하십시오. 또는 urllib.quote 또는 urllib.urlencode

+0

Daniel Roseman의 대답에 대한 내 의견보기. 도메인을 하드 코딩하고 싶지 않습니다. 대화 형 쉘에서 말할 수있는 것부터이 답변은 경로를 리턴합니다. – kasceled

+0

@tippytop 응답을 업데이트했습니다. – okm

+0

request.build_absolute_uri() 정확히 내가 필요한 것입니다, 감사합니다. – kasceled

2

permalink을 통해보기 만 직접 모델을 참조하는 유스 케이스 당신 있습니다입니다. 모델을 기반으로하지 않는 URL을 찾으려면 url 태그 (사례 : {% url signup %})를 사용할 수 있습니다.

+0

URL 템플릿 태그가이 경우 작동하지 않는다고 생각합니다. url은 제 3 자 인증에서 콜백으로 전송되므로 절대 URL이어야합니다. 다른 곳에서는 프로젝트에서 {% url %}을 사용하여 경로를 렌더링합니다. – kasceled

+0

글쎄, 원래 모델을 사용하지 않고 URL을 찾는 방법과 관련이있는 질문은 원래 묻지 않았습니다. 앞에서 언급했듯이'url'이나'reverse' (그리고'get_absolute_url')도 도메인을 포함한 전체 URL을 반환하지 않습니다. 사실, 당신이 특별히 말하지 않는다면, 그 정보는 장고 자체 내에서 사용 가능하지 않습니다. 이를 위해 사이트 프레임 워크를 사용하거나 단순히 설정에서 도메인을 정의 할 수 있습니다.py를 입력 한 다음,'url' 태그의 결과에 그 값을 접두사로 붙입니다. –