2012-11-22 29 views
1

一個完整的URL我需要的Django發送包含這樣如何構建在Django

http://www.mysite.org/history/ 

一個網址,「歷史」是像這樣獲得的一封電子郵件:

history_url = urlresolvers.reverse('satchmo_order_history') 

history_url是我傳遞給發送電子郵件的函數的一個參數,它正確地生成'/ history /'。但是,我如何獲得第一部分? (http://www.mysite.org)

編輯1

有什麼問題或不可移植的約做這樣的嗎?

history = urlresolvers.reverse('satchmo_order_history') 
domain = Site.objects.get_current().domain 
history_url = 'http://' + domain + history 

回答

3

如果你有機會獲得一個HttpRequest例如,你可以使用HttpRequest.build_absolute_uri(location)

absolute_uri = request.build_absolute_uri(relative_uri) 

在可替代的,可以使用sites framework得到它:

import urlparse 
from django.contrib.sites.models import Site 

domain = Site.objects.get_current().domain 
absolute_uri = urlparse.urljoin('http://{}'.format(domain), relative_uri) 

Re:Edit1

我傾向於使用urlparse.join,因爲它在標準庫中,它在技術上是組合URI的最Python的方法,但我認爲你的方法也很好。

+0

foo = urlparse.urljoin('http://',format(domain))給出http:///mysite.org和urlparse.urljoin(foo,history),然後給出http:/// history /什麼是我錯過了嗎?格式()又是什麼,什麼是{}? – handros

+1

@ user1294974你不能使用'urlparse.urljoin'連接''http://''和你的域名,因爲它們是部分URI碎片,並且不起作用。你必須連接兩個字符串。我使用'str.format'('{}'是一個佔位符),但它需要Python 2.7。如果它不起作用,你可以嘗試用'http:// {0} .format(domain)'(Python 2.6)或''http://%s'%domain'或甚至'http: //'你好,你已經在做'域名'了。 –