2013-05-09 2 views
3

현재 경로와 쿼리 문자열을 사용하고 쿼리 문자열 값을 삽입하거나 대체하는 Django 템플릿 태그를 알고있는 사람이 있습니까?URL 매개 변수를 삽입하거나 바꿀 Django 템플릿 태그

지금 + 갈색 + 소 = 3 & 필터 & 페이지 = 사람

호출 {% urlparam 'page' 4 %}/some/custom/path?q=how+now+brown+cow&page=4&filter=person를 생성하는 것 + 방법 몇 가지/사용자/경로? Q = /에 요청을 주어진.

처음부터 작성하는 것이 그리 어렵지는 않지만 매우 일반적인 작업 인 것처럼 보이기 때문에 이와 같은 태그가 내장되어 있어야합니다. 그러나 docs을 통해 읽고 인터넷 검색을 한 후에는 그러한 태그를 공개 한 사람을 찾을 수 없습니다.

+0

이것은 일반적인 경우가 아니며, 다른 논리/구조 문제의 징후입니다. 이 용도는 무엇입니까? 내 말은 왜 템플릿의 URL을 변경하고 템플릿을 렌더링하는 뷰를 수정하지 않는 것입니까? –

+0

@BurhanKhalid, 나는 강력하게 동의하지 않습니다. 다음과 같은 경우를 고려하십시오. 검색 페이지에 일련의 페이지 매김 링크를 렌더링하고 싶습니다. URL에 여러 가지 쿼리 매개 변수가 있습니다 (예를 들어). 페이지 매김 링크를 렌더링하는 페이지 매김 코드는이 모든 매개 변수를 명시 적으로 지정할 필요는 없습니다. 장고의 관리자는 모든 곳에서 이런 행동을하는 것 같습니다. 결과를 구체화하기 위해 하나의 링크를 클릭하면 모든 기존 매개 변수가 손실되지 않습니다. – Cerin

+0

좋은 유스 케이스는 내 대답을 참조하십시오. 나는 때때로 문제가 해결책이 아닌 문제에 도움을 청하기 때문에 때때로 물었다. –

답변

1

다음은 Django 1.3 프로젝트에서 사용한 방법입니다. 당신처럼 나는이 내장 찾을 것으로 예상하지만,보기에서 코딩 결국 :

def remove_url_param(url, params): 
    if not isinstance(params, list): 
     params = [params,] 
    if isinstance(url, unicode): 
     # urlencode doesn't like unicode 
     url = url.encode('utf8') 

    (scheme, netloc, path, query, fragment) = urlparse.urlsplit(url) 
    param_dict = parse_qs(query) 
    for p in params: 
     try: 
      del(param_dict[p]) 
     except KeyError: 
      pass 
    query = urllib.urlencode(param_dict, True) 
    return urlparse.urlunsplit((scheme, netloc, path, query, fragment)) 
다음

나는이 기본 URL을 생성하는 데 사용 : 템플릿에 그런

page_url_unordered = putils.remove_url_param(request.get_full_path(), ['order', 'ajax']) 

:

을 난 내 자신에 의해 이러한 도구를 사용하지 않은 때문에
<a href="{{ page_url_unordered }}&amp;order=price">Price</a> 
<a href="{{ page_url_unordered }}&amp;order=size">Size</a> 
2

, 난 그냥 당신을 참조 할 수 있습니다 :

매개 변수 url_params 템플릿 태그가 있습니다.

희망이 있습니다.

1

검색 페이지에 일련의 페이지 매김 링크를 렌더링하고 싶습니다. URL에 몇 가지 검색어 매개 변수가 있습니다 (예를 들어). 페이지 매김 링크를 렌더링하는 페이지 매김 코드는이 모든 매개 변수를 명시 적으로 지정하면 일 필요는 없습니다. 장고의 관리자는 이 동작을 사방에있는 것으로 보입니다.

django.core.context_processors.requestTEMPLATE_CONTEXT_PROCESSORS (기본값은 사용하지 않음)을 추가하면이 기능을 사용할 수 있습니다. 템플릿에 request 변수 (HttpRequest object)가 추가됩니다.

거기에서 {{ request.get_full_path }}을 사용하여 전체 쿼리 문자열로 현재 URL을 가져온 다음 사용자 지정 쿼리를 추가 할 수 있습니다.

페이지가 /search?q=foo+bar이고 새 링크를 /search?q=foo+bar&page=4, <a href="{{ request.get_full_path }}&page=4">page 4</a>으로 만들려면 다음과 같이하십시오.

+1

페이지가/search? q = foo + bar & page = 1이고 새 링크가/search가 되길 원한다면 q = foo + bar & page = 2? – Qlimax

+0

그러면 새로운 질문을 해보겠습니다. –

+0

예, 알고 있습니다. 그러나 어쩌면 당신은 간단한 해결책을 알고있었습니다. 나는 이것 같이 템플렛 꼬리표를 만드는 것을 끝냈다 http://stackoverflow.com/a/12423248/246435 – Qlimax

관련 문제