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.py를 path()들어 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.