Django의 {% url %} 템플릿 태그를 통해 쿼리 매개 변수를 전달할 수 있습니까?


117

같은 {% url %}태그에 요청 매개 변수를 추가 하고 싶습니다 ?office=foobar.

이게 가능해? 아무것도 찾을 수 없습니다.


쿼리 문자열을 렌더링하는 간단한 사용자 지정 템플릿 태그에 대해서는 이 답변 을 참조하십시오 .
Christian Long

답변:


169

아니요, GET 매개 변수는 URL의 일부가 아니기 때문입니다.

끝에 추가하기 만하면됩니다.

<a href="{% url myview %}?office=foobar">

Django 1.5+ 용

<a href="{% url 'myview' %}?office=foobar">

10
글쎄, 기술적으로 그들은 그렇습니다. RFC 1738 에 따르면 HTTP URL은 http : // <host> : <port> / <path>? <searchpart> 형식을 취합니다.
naktinis

@naktinis HTTP URL, 예. 장고 URL, 순전히 . P : 그래서 "URL"의 다양한 정의를 위해, 당신은 모두 올바른지

example.com/myview/?office=foobar대신에 URL을 중단하는 후행 슬래시가 발생 하지 example.com/myview?office=foobar않습니까?
Al Sweigart 2017 년

예, 그래서 뭐?
Daniel Roseman 2017 년

34

현재 매개 변수를 새 매개 변수와 혼합하는 방법 :

{% url 'order_list' %}?office=foobar&{{ request.GET.urlencode }}

요청 변수를 갖도록 설정을 수정하십시오.

from django.conf.global_settings import TEMPLATE_CONTEXT_PROCESSORS as TCP

TEMPLATE_CONTEXT_PROCESSORS = TCP + (
    'django.core.context_processors.request',
)

1
불행히도 이것은 목록 매개 변수와 함께 작동하지 않는 것 같습니다
Arthur

@Arthur Djangos 버그입니까?
eri

3
정말 우아하지만 GET 매개 변수에서 이전 페이지의 "page = 1"을 다시 추가하기 때문에 페이징에는 작동하지 않습니다.
Florian

25

urlencode인수가 변수 인 경우 사용

<a href="{% url 'myview' %}?office={{ some_var | urlencode }}">

또는 공백과 같은 특수 문자로 인해 URL이 깨질 수 있습니다.

문서 : https://docs.djangoproject.com/en/3.0/ref/templates/builtins/#urlencode


이것은 나를 위해 작동하지 않습니다 .. some_var변수는 href에서 비어 있지만 템플릿의 다른 곳에서 사용되는 경우 채워진 것으로 표시됩니다. v2.1
geoidesic

@geoidesic 보고서에 감사드립니다. 중단 커밋 / 버전 릴리스 노트를 더 찾거나 1.9에서 재현 할 수 있는지 알려주세요.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

8

첫째, 어리석은 대답 :

{% url my-view-name %}?office=foobar

심각한 답변 : 아니요, 할 수 없습니다. Django의 URL 리졸버는 URL의 경로 부분 만 일치 하므로 {% url %}태그는 URL의 해당 부분 만 반전 할 수 있습니다.


과연. 그것도 말이되는데 ... 그보다 조금 더 우아했으면 좋겠어요.
Brian D

예를 들어 {% qpurl myview office = foobar %}와 같이 항상보다 우아한 사용자 정의 태그를 작성할 수 있습니다. 이것은 또한 값을 처리하고 적절하게 인코딩 할 수 있습니다.
Spacedman 2011 년

0

이 시도:

{% url 'myview' office=foobar %}

그것은 나를 위해 일했습니다. 기본적으로 해당 링크를 반대로 수행하고 주어진 인수를 적용합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.