1

私のDjangoアプリには、サードパーティの認証後にドメインへのコールバックを作成する必要がある場所がありますが、問題のビューが実際には1つのモデルにマップされていないため、これを行う方法に行き詰まっています(またはむしろ、ビューコードは複数のモデルを参照します)、および 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」を動的にしたい。この機能が、汎用ビューの使用に依存しないことを願っています。実際、パーマリンクの生成がモデルに結び付けられている理由がまったくわかりません。urlconf にのみ依存する必要があるようです。ここで何が欠けていますか?

4

2 に答える 2

2

permalinkモデルを直接参照している場合にのみ使用します。モデルに基づかない URL を見つけるには、urlタグを使用できます{% url signup %}

于 2012-04-06T10:47:43.470 に答える
1

permalinkの薄いラッパーですdjango.core.urlresolvers.reverse。django.db.models に属しており、通常はモデルreverseget_absolute_urlで記述するため、ショートカットになります。ここでリバースを使用します

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

アップデート

絶対URIを使用するには、次のことができます

  • Danielが提案したように、設定でハードコードするか、取得したパスのようなものを使用するか、Site.objects.get_current()絶対URIを取得します。reverseurl
  • コールバック URI がテンプレートをレンダリングするビューと同じドメインにある場合、request実際の絶対 URI を取得するために頼ることができます。

    request.build_absolute_uri(reverse('signup'))

さらに、のようにtemplateの URI をエスケープしたい場合があります{{ absolute_uri|urlencode }}urllib.quoteまたは_urllib.urlencode

于 2012-04-06T03:27:36.840 に答える