2010-07-14 100 views
44

有沒有辦法在Django模板中獲取當前頁面的URL及其所有參數?Django:獲取當前頁面的URL,包括參數,在一個模板中

例如,將打印完整的URL /foo/bar?param=1&baz=2

+0

可能重複(http://stackoverflow.com/questions/2127937/reading-path-in-templates) – 2014-06-19 08:54:53

+0

另一個可能的重複是[獲取當前URL withing Django模板](http://stackoverflow.com/questions/2882490/get-the-current-url-within-a-django-模板) – 2014-06-19 08:57:15

回答

58

編寫自定義上下文處理器。例如

def get_current_path(request): 
    return { 
     'current_path': request.get_full_path() 
    } 

添加路徑該函數在TEMPLATE_CONTEXT_PROCESSORS設置變量,並用它在你的模板,像這樣:

{{ current_path }} 

如果你想在每一個請求完整request對象,可以使用內置的django.core.context_processors.request上下文處理器,然後在您的模板中使用{{ request.get_full_path }}

參見:

+2

如果你需要這個重定向,請不要忘記使用urlencode,即'{{request.get_full_path | urlencode}}' – Medorator 2014-07-02 14:44:50

6

在文件context_processors.py(或類似)一個templatetag:

def myurl(request): 
    return { 'myurlx': request.get_full_path() } 

在settings.py:

TEMPLATE_CONTEXT_PROCESSORS = (
    ... 
    wherever_it_is.context_processors.myurl, 
    ... 

在您的template.html中:

myurl={{myurlx}} 
+0

對不起,錯誤downvoted ..請進行更改,以便我可以撤消。 – 2012-10-30 06:00:52

1

Django中有很多內置的東西,但如果你不明確的,你想用什麼,它贏得了」不要使用。因此,在MTV模式(模型,模板,視圖)中,視圖接收請求並使用模板渲染來生成響應,傳遞它的字典或所有局部變量(使用locals()函數)視圖。知道了這一點,我們可以插入從反應過來當前的URL,就像這樣:

views.py:

from django.shortcuts import render 

def page(request): 
    currentUrl = request.get_full_path() 
    return render(request, 'app/page.html', locals()) 

然後,在模板「應用程序/ page.html中」你只需要做下面,以顯示我們剛剛創建,並通過當地人()穿過的CURRENTURL變量:

應用/模板/ page.html中:

{{ currentUrl }} 
1

在addtition到sdolan的回答是:

如果您使用的是I18N並且想要將next值更改爲/i18n/setlang/以更改當前頁面的語言,那麼您將需要從完整路徑中去除當前語言代碼。喜歡的東西:

full_path = request.get_full_path() 
current_path = full_path[full_path.index('/', 1):] 

這假定每個路徑具有格式/LANG_CODE/any/other/stuff/with/?param='yay',只是揭開序幕LANG_CODE不管它是什麼(例如,/en/將導致進入/)。

20

在上下文處理器中使用Django的內部版本來獲取模板上下文中的請求。在設置添加request處理器TEMPLATE_CONTEXT_PROCESSORS

TEMPLATE_CONTEXT_PROCESSORS = (

    # Put your context processors here 

    'django.core.context_processors.request', 
) 

而且在模板的使用:

{{ request.get_full_path }} 

這樣,你不需要自己編寫任何新的代碼。

+1

應該注意的是使用這個方法會覆蓋默認的TEMPLATE_CONTEXT_PROCESSORS,所以你必須把它們加回到列表中。 [文檔](https://docs.djangoproject.com/en/dev/ref/settings/#std:setting-TEMPLATE_CONTEXT_PROCESSORS)列出了要包含在列表中的默認值。 – carruthd 2014-06-27 16:35:08

0

你可以看到你的網址是否與其他網址不同。 [模板讀取路徑]的

{% if 'foo/bar/' in request.get_full_path %} 
相關問題