我在我的Django应用程序中有一个位置,我需要在第三方认证后构建对我的域的回调,但我仍然坚持如何执行此操作,因为该视图并未真正映射到一个model(或者更确切地说,视图代码引用多个模型),以及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。我在这里缺少什么?
答案 0 :(得分:2)
permalink
仅适用于 直接引用模型的用例。要查找非基于模型的网址,您可以使用url
标记 - 在您的情况下为{% url signup %}
。
答案 1 :(得分:1)
permalink
是django.core.urlresolvers.reverse
的精简包装。它属于django.db.models是一个快捷方式,因为我们通常在reverse
模型中编写get_absolute_url
。所以在这里使用反向
from django.core.urlresolvers import reverse
path = reverse('signup')
更新
要使用绝对URI,您可以
Site.objects.get_current()
之类的内容,以及从reverse
或url
获取绝对URI的路径,如Daniel建议的那样。如果您的回调URI与呈现模板的视图位于同一个域中,您可以依靠request
来获取实际的绝对URI:
request.build_absolute_uri(reverse('signup'))
此外,您可能希望转义template中的URI,例如{{ absolute_uri|urlencode }}
。或通过urllib.quote
或urllib.urlencode