Django 템플릿 URL 태그에 URL 매개 변수를 추가하는 방법은 무엇입니까?


102

내 관점에서 다음과 같은 URL 매개 변수를 가져옵니다.

date=request.GET.get('date','')

내 URL에서 다음과 같은 URL 템플릿 태그를 사용하여 이러한 방식으로 매개 변수를 전달하려고합니다.

<td><a href="{% url 'health:medication-record?date=01/01/2001' action='add' pk=entry.id %}" >Add To Log</a></td>

? 뒤에있는 매개 변수 분명히 작동하지 않습니다. get으로 검색하기 위해이 데이터 값을 어떻게 전달할 수 있습니까?


링크를 확인하십시오 .
Nagkumar Arkalgud 2015


1
이에 대해 생각할 때 "Django URL 매개 변수"와 "URL 쿼리 매개 변수"를 구분해야합니다. Django URL 매개 변수는 예 urls.pypath()들어 path('client/<int:id>/'). URL 쿼리 매개 변수는 ?예를 들어 https://example.com/a/b/?param1=value1&param2=value2. 이 질문은 URL 쿼리 매개 변수에 관한 것이지만 일부 답변은 Django URL 매개 변수를 참조합니다.
Christian Long

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

답변:


172

먼저 정규식 (urls.py)에서 매개 변수를 허용하도록 URL을 준비해야합니다.

url(r'^panel/person/(?P<person_id>[0-9]+)$', 'apps.panel.views.person_form', name='panel_person_form'),

따라서 템플릿에서 다음을 사용합니다.

{% url 'panel_person_form' person_id=item.id %}

매개 변수가 두 개 이상인 경우 다음을 사용하여 정규식을 변경하고 템플릿을 수정할 수 있습니다.

{% url 'panel_person_form' person_id=item.id group_id=3 %}

대신 request.get의 @MehranNouri 사용 request.GET
시드

1
어쨌든 컨텍스트에서 사전을 전달하여 동적 수의 kwargs를 전달할 수 있습니까? 예를 들어 함수 {% url target_link target_kwargs %}에 전달하는 것과 같습니다 **kwargs. 어디에서 사용 사례가 target_link변수이므로 URL에 kwargs로의 번호를 알고있다
teebagz

이들은 쿼리 매개 변수가 아니며이 답변은 django url 매개 변수를 설명합니다. 이것은 OP가 요청한 것이 아닙니다 (답변은 작동하는 대체 솔루션을 설명합니다).
BjornW

94

여기서 답을 찾았습니다. Django의 {% url %} 템플릿 태그를 통해 쿼리 매개 변수를 전달할 수 있습니까?

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

<a href="{% url myview %}?office=foobar">
For Django 1.5+

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

[개선 할 사항은 없지만 코드 틱을 수정할 때 어리석은 오류가 발생합니다.]


1
이것을 사용하면 'office = foobar'정보가 내비게이션 바에서 사용자에게 표시되지 않습니까?
Diansheng

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

3
션 : 네. 이것을 원하지 않는 경우 POST 요청을 사용하거나 매개 변수를 전달할 백 채널 방법을 찾으십시오. URL에 매개 변수를 전달하는 것은 GET 요청의 표준입니다
Shayne

두 가지 주장을 전달하는 것은 무엇입니까?
FightWithCode

27

템플릿 URL을 추가하기 만하면됩니다.

<a href="{% url 'service_data' d.id %}">
 ...XYZ
</a>

장고 2.0에서 사용


@ScottSkiles 그런 다음 질문을 특정 버전의 Django로 편집 한 다음 다른 버전을 추가하여 최신 버전을 다루어야합니다. 어떤 사람들은 그것이 복제라고 말할 것이지만 나는 동의하지 않습니다. 한 질문에 여러 버전이 있으면 오해의 소지가 있습니다.
Bernardo Duarte

17

이것은 세 가지 간단한 단계로 수행 할 수 있습니다.

1)url 태그 와 함께 항목 ID 추가 :

{% for item in post %}
<tr>
  <th>{{ item.id }}</th>
  <td>{{ item.title }}</td>
  <td>{{ item.body }}</td>
  <td>
    <a href={% url 'edit' id=item.id %}>Edit</a>
    <a href={% url 'delete' id=item.id %}>Delete</a>
  </td>
</tr>
{% endfor %}

2) urls.py에 경로 추가 :

path('edit/<int:id>', views.edit, name='edit')
path('delete/<int:id>', views.delete, name='delete')

3) views.py 에서 ID를 사용하십시오 .

def delete(request, id):
    obj = post.objects.get(id=id)
    obj.delete()

    return redirect('dashboard')

다운 보트를 방지하려면 스크린 샷을 추가하는 대신 코드를 입력하세요.
Vaibhav Vishal 2019

Django 문서에서 찾고 있던 정확한 것.
Igor Voltaic

10

IM이 주제에서 벗어 났는지 확실하지 않지만 해결책을 찾았습니다. 클래스 기반보기가 있고 get 매개 변수를 템플릿 태그로 사용하려고합니다.

class MyView(DetailView):
    model = MyModel

    def get_context_data(self, **kwargs):
        ctx = super().get_context_data(**kwargs)
        ctx['tag_name'] = self.request.GET.get('get_parameter_name', None)
        return ctx

그런 다음 get 요청을 /mysite/urlname?get_parameter_name='stuff합니다.

템플릿에서를 삽입 {{ tag_name }}하면 get 매개 변수 값 ( 'stuff')에 액세스 할 수 있습니다. 이 매개 변수도 필요한 템플릿에 URL이있는 경우 다음을 수행 할 수 있습니다.

 {% url 'my_url' %}?get_parameter_name={{ tag_name }}"

URL 구성을 수정할 필요가 없습니다.


5

1 : HTML

           <tbody>
            {% for ticket in tickets %}
              <tr>
                <td class="ticket_id">{{ticket.id}}</td>
                <td class="ticket_eam">{{ticket.eam}}</td>
                <td class="ticket_subject">{{ticket.subject}}</td>
                <td>{{ticket.zone}}</td>
                <td>{{ticket.plaza}}</td>
                <td>{{ticket.lane}}</td>
                <td>{{ticket.uptime}}</td>
                <td>{{ticket.downtime}}</td>
                <td><a href="{% url 'ticket_details' ticket_id=ticket.id %}"><button data-toggle="modal" data-target="#modaldemo3" class="value-modal"><i class="icon ion-edit"></a></i></button> <button><i class="fa fa-eye-slash"></i></button>
              </tr>
            {% endfor %}
            </tbody>

{% url 'ticket_details'%}는 뷰의 함수 이름입니다.

2 : Views.py

def ticket_details(request, ticket_id):

   print(ticket_id)
   return render(request, ticket.html)

ticket_id는 ticket_id = ticket.id에서 가져올 매개 변수입니다.

3 : URL.py

urlpatterns = [
path('ticket_details/?P<int:ticket_id>/', views.ticket_details, name="ticket_details") ]

/? P-여기서 ticket_id는 그룹의 이름이고 패턴은 일치시킬 패턴입니다.

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