1

我在我的 Django 应用程序中有一个位置,我需要在第三方身份验证之后构造对我的域的回调,但我坚持如何做到这一点,因为有问题的视图并没有真正映射到一个模型(或相反,视图代码引用了多个模型),以及 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

permalinkdjango.core.urlresolvers.reverse. 它属于 django.db.models 是一个快捷方式,因为我们通常在模型reverse内部编写get_absolute_url。所以在这里使用反向

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

更新

要使用绝对 URI,您可以

  • 正如 Daniel 所建议的那样,在设置中硬编码或使用诸如Site.objects.get_current()w/ 获取路径reverseurl获取绝对 URI 之类的东西。
  • 如果您的回调 URI 与呈现模板的视图在同一个域中,您可以依靠request获取实际的绝对 URI:

    request.build_absolute_uri(reverse('signup'))

此外,您可能希望转义template中的 URI ,例如{{ absolute_uri|urlencode }}. 或通过urllib.quoteurllib.urlencode

于 2012-04-06T03:27:36.840 回答