2012-04-06 5 views
1

私はサードパーティ認証後に私のドメインへのコールバックを構築する必要がある私のDjangoアプリケーションの場所を持っていますが、問題のビューは実際には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

permalinkは、django.core.urlresolvers.reverseの薄いラッパーです。モデルのget_absolute_urlの中には通常reverseと書いてあるので、django.db.modelsに属しています。そこでここでは逆に使用

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

更新

パス/あなたがreverseまたはurlからに着くwは、あなたがSite.objects.get_current()のようなものを

  • 設定で打ちかを使用することができ、絶対URIを使用するにはダニエルが示唆したように、絶対URIを取得してください。あなたのコールバックURIが同じドメイン内にある場合
  • テンプレートをレンダリングビュー/ wが、あなたは実際の絶対URIを取得するためにrequestに頼ることができる:

    request.build_absolute_uri(reverse('signup'))さらに

、あなたがしたいことURIをtemplateにエスケープすると、{{ absolute_uri|urlencode }}のようになります。またはビューのurllib.quoteまたはurllib.urlencode

+0

ダニエル・ローズマンの答えに対するコメントを参照してください。私はドメインをハードコーディングするのではなく、対話シェルで言うことから、この答えはパスも返すだけです。 – kasceled

+0

@tippytop私は、答えを更新しました – okm

+0

request.build_absolute_uri()は私が必要としていたものです。 – kasceled

2

permalinkを通してあなたはがモデルを直接参照している場合にのみ使用する場合です。モデルベースではないURLを見つけるには、urlタグを使用してください(あなたの場合は、{% url signup %})。

+0

この場合、URLテンプレートタグは機能しません。 URLはサードパーティの認証でコールバックとして送信されているため、絶対URLである必要があります。それ以外の場所では、プロジェクトで{%url%}を使用してパスをレンダリングします。 – kasceled

+0

これは、最初に尋ねたことではありません。これは、モデルなしでURLを見つける方法と関連しています。あなたが指摘したように、 'url'と' reverse'(そして 'get_absolute_url')のどちらもドメインを含む完全なURLを返しません。実際に、あなたがそれを具体的に伝えない限り、その情報はDjango自身では利用できません。このためにサイトフレームワークを使用するか、単に設定でドメインを定義することができます。pyに追加し、 'url'タグの結果にその値を付加します。 –

関連する問題

 関連する問題