จะเพิ่มพารามิเตอร์ url ลงในแท็ก url เทมเพลต Django ได้อย่างไร?


111

ในมุมมองของฉันเพื่อรับพารามิเตอร์ 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


1
เมื่อคิดถึงเรื่องนี้อย่าลืมแยกแยะระหว่าง "Django url parameters" และ "url query parameters" พารามิเตอร์ URL Django มีการกำหนดค่าในurls.pyการใช้เช่นpath() path('client/<int:id>/')พารามิเตอร์การค้นหา URL ที่เป็นส่วนหนึ่งของ URL หลังที่เช่น? https://example.com/a/b/?param1=value1&param2=value2คำถามนี้เกี่ยวกับพารามิเตอร์การสืบค้น url แต่คำตอบบางคำอ้างถึงพารามิเตอร์ Django url
Christian Long

ดูคำตอบนี้สำหรับแท็กเทมเพลตที่กำหนดเองอย่างง่ายเพื่อแสดงสตริงการสืบค้น URL
Christian Long

คำตอบ:


177

ก่อนอื่นคุณต้องเตรียม url ของคุณเพื่อยอมรับพารามิเตอร์ใน regex: (urls.py)

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 %}

@MehranNouri ใช้ request รับแทน request.get
Cyd

1
มีการส่งจำนวน kwargs แบบไดนามิกโดยการส่งผ่านพจนานุกรมจากบริบทหรือไม่? เช่น{% url target_link target_kwargs %}มันจะเหมือนกับการส่งผ่าน**kwargsไปยังฟังก์ชัน ฉันมีกรณีการใช้งานที่target_linkเป็นตัวแปรดังนั้นจึงไม่ทราบจำนวน kwargs ใน url
teebagz

2
โปรดทราบว่าสิ่งเหล่านี้ไม่ใช่พารามิเตอร์การค้นหาคำตอบนี้อธิบายถึงพารามิเตอร์ django url นี่ไม่ใช่สิ่งที่ OP ถามเกี่ยวกับ (คำตอบอธิบายถึงโซลูชันทางเลือกที่ใช้งานได้)
BjornW

96

ฉันพบคำตอบที่นี่: เป็นไปได้ไหมที่จะส่งพารามิเตอร์การค้นหาผ่านแท็กเทมเพลต {% url%} ของ Django

เพียงเพิ่มลงในตอนท้าย:

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

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

[ไม่มีอะไรต้องปรับปรุงอีก แต่ฉันได้รับข้อผิดพลาดโง่ ๆ เมื่อฉันแก้ไขขีดรหัส]


1
หากใช้สิ่งนี้ข้อมูล 'office = foobar' จะปรากฏให้ผู้ใช้เห็นบนแถบนำทางใช่หรือไม่?
Diansheng

1
สิ่งนี้ไม่ส่งผลให้เครื่องหมายทับต่อท้ายขัดจังหวะ url เช่นexample.com/myview/?office=foobarแทนที่จะเป็นexample.com/myview?office=foobar?
Al Sweigart

3
ฌอน: ใช่ หากคุณไม่ต้องการสิ่งนี้ให้ใช้คำขอ POST หรือหาวิธี back-channel เพื่อส่งผ่านพารามิเตอร์ การส่งพารามิเตอร์บน URL เป็นมาตรฐานสำหรับคำขอ GET
Shayne

อะไรผ่านข้อโต้แย้งสองข้อ
FightWithCode

29

เพียงเพิ่ม URL เทมเพลต:

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

ใช้ใน django 2.0


@ScottSkiles จากนั้นคุณควรแก้ไขคำถามเป็น Django เวอร์ชันเฉพาะจากนั้นเพิ่มอีกคำถามเพื่อให้ครอบคลุมเวอร์ชันล่าสุด บางคนบอกว่าเป็นการทำซ้ำ แต่ฉันไม่เห็นด้วย หลายเวอร์ชันในคำถามเดียวอาจทำให้เข้าใจผิด
Bernardo Duarte

21

สามารถทำได้ในสามขั้นตอนง่ายๆ:

1)เพิ่มรหัสรายการพร้อมurlแท็ก:

{% 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 :

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

    return redirect('dashboard')

พิมพ์รหัสของคุณแทนการเพิ่มภาพหน้าจอเพื่อหลีกเลี่ยงการโหวตลด
Vaibhav Vishal

สิ่งที่แน่นอนที่ฉันกำลังมองหาในเอกสาร Django
Igor Voltaic

ฉันคิดว่าคุณต้องเพิ่มเครื่องหมายคำพูดคู่สำหรับ href ของคุณ
Behrouz Beheshti

10

ฉันไม่แน่ใจว่าฉันอยู่นอกเรื่อง แต่ฉันพบวิธีแก้ปัญหาสำหรับฉัน คุณมีมุมมองตามคลาสและคุณต้องการให้พารามิเตอร์ 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

จากนั้นคุณจะได้รับคำขอของ/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.