2010-07-14 2 views
44

장고 템플릿에 현재 페이지 URL과 모든 매개 변수를 가져 오는 방법이 있습니까? 예를 들어Django : 템플릿에 매개 변수를 포함한 현재 페이지의 URL을 가져옵니다.

, 파일 context_processors.py에서 /foo/bar?param=1&baz=2

+0

가능한 중복 (http://stackoverflow.com/questions/2127937/reading-path-in-templates) –

+0

다른 가능한 중복 [장고 템플릿을 withing에 현재의 URL을 얻을 것입니다 ] (http://stackoverflow.com/questions/2882490/get-the-current-url-within-a-django-template) –

답변

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

6

같은 전체 URL (등)을 인쇄 것 templatetag : settings.py에서

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

:

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

내 template.html :

myurl={{myurlx}} 
+0

죄송합니다, 실수로 downvoted .. 제발 그걸 취소 할 수 있도록 변경하십시오. –

1

장고가 내장 된 물건을 많이 가지고 있지만, 당신은 당신이 무엇에 사용해야 할지를 명시하지 않으면, 그것은 원 ' 사용할 수 없습니다.

MTV 스키마 (Model, Template, View)에서 뷰는 요청을 수신하고 템플릿 렌더를 사용하여 응답을 생성하고 사전 또는 모든 로컬 변수 (locals() 함수 사용)를 전달합니다. 전망.

views.py :

from django.shortcuts import render 

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

그런 다음 템플릿에서 '응용 프로그램/page.html'그냥해야 할이 알고, 우리는이 같은 응답에서 온 현재의 URL을 삽입 할 수 있습니다

응용 프로그램/템플릿/page.html :

addtition에서
{{ currentUrl }} 
1

sdolan의 대답 : 우리가 방금 만든 및 지역 주민()를 통해 통과 CURRENTURL 변수를 표시하려면 다음

I18N을 사용하는 경우 next 값을 /i18n/setlang/으로 전달하려면 현재 페이지의 언어를 변경하고 전체 경로에서 현재 언어 코드를 제거해야합니다. 같은 :이 모든 경로 형식 /LANG_CODE/any/other/stuff/with/?param='yay'을 가지고 있으며, 단순히 무엇이든 LANG_CODE를 개막한다고 가정

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

(예를 들어, /en//에 발생합니다).

20

템플릿 컨텍스트에서 요청을 얻으려면 컨텍스트 프로세서에서 Django의 빌드를 사용하십시오. 설정에서 TEMPLATE_CONTEXT_PROCESSORS

TEMPLATE_CONTEXT_PROCESSORS = (

    # Put your context processors here 

    'django.core.context_processors.request', 
) 

및 템플릿 사용 request 프로세서를 추가

{{ request.get_full_path }} 

당신은 자신에 의해 새로운 코드를 작성할 필요가 없습니다 이쪽으로.

+1

이 방법을 사용하면 기본 TEMPLATE_CONTEXT_PROCESSORS를 덮어 쓰므로 목록에 다시 추가해야합니다 . [The docs] (https://docs.djangoproject.com/en/dev/ref/settings/#std:setting-TEMPLATE_CONTEXT_PROCESSORS)에는 목록에 포함될 기본값 목록이 있습니다. – carruthd

0

URL이 다른 URL과 다른지 확인할 수 있습니다. [템플릿에서 읽기 경로]의

{% if 'foo/bar/' in request.get_full_path %}