2015-09-27 78 views
0

在Django 1.8簡單標記中,我需要解析上下文中找到的HTTP_REFERER的路徑。我有一段可行的代碼,但我想知道是否可以使用Django工具實現更優雅的解決方案。Django:從完整的URL中提取路徑

這裏是我的代碼:

from django.core.urlresolvers import resolve, Resolver404 

# [...] 

@register.simple_tag(takes_context=True) 
def simple_tag_example(context): 
    # The referer is a full path: http://host:port/path/to/referer/ 
    # We only want the path: /path/to/referer/ 
    referer = context.request.META.get('HTTP_REFERER') 
    if referer is None: 
     return '' 

    # Build the string http://host:port/ 
    prefix = '%s://%s' % (context.request.scheme, context.request.get_host()) 
    path = referer.replace(prefix, '') 

    resolvermatch = resolve(path) 
    # Do something very interesting with this resolvermatch... 

所以我手動構建字符串「http://sub.domain.tld:port」,然後我從context.request.META發現的完整路徑HTTP_REFERER刪除它。它的作品,但它似乎有點壓倒我。

我試圖從referer建立一個HttpRequest沒有成功。有沒有我可以用來從URL中輕鬆提取路徑的類或類型?

+0

https://docs.python.org/2/library/urlparse.html#urlparse.urlunparse可能是有用的,但艾哈邁德的回答是最好的。 –

回答

5

您可以使用urlparse模塊提取路徑:

>>> import urlparse 
>>> parsed = urlparse.urlparse('http://stackoverflow.com/questions/32809595') 
>>> parsed.path 
'/questions/32809595' 
+1

注意:在Python 2中,相關模塊是'urlparse':https://docs.python.org/2/library/urlparse.html –

+0

爲什麼我在Django模塊中查找?當然,Python已經有了一個。非常感謝你。我需要睡覺;) – Antwane

+0

@CoreyGoldberg我編輯了答案,謝謝。 – ahmed