/ / django रिवर्स नहीं मिला - django, django-templates, django-views

django रिवर्स नहीं मिला - django, django-templates, django-विचार

मैं बस एक दृश्य funciton से कॉल करना चाहता हूँटेम्पलेट, और मैंने देखा है कि मुझे इसे रिवर्स फ़ंक्शन के साथ करना है। मैं दृश्य फ़ंक्शन पर पैरामीटर पास करना चाहता हूं, लेकिन मैं इसे यूआरएल में दिखाना नहीं चाहता हूं। क्या यह संभव है? मेरा कोड और त्रुटि यहां दी गई है:

urls.py

url(r"^perfil/deleteDownloadedTrack/$","principal.views.delete_downloaded_track", name="delete_downloaded_track"),

views.py

def delete_downloaded_track(request, track):
...
return HttpResponseRedirect(reverse("profile_detail"))

template.html

{% for track in downloadedTracks %}
<tr>
<td>
{{track.name}}
</td>
<td>
<div class="botoForm" onclick="location.href="{% url "principal.views.delete_downloaded_track" track %}""> Eliminar </div>
</td>
{% endfor %}

और त्रुटि:

Reverse for "principal.views.delete_downloaded_track" with arguments "(<DownloadedTrack: DownloadedTrack object>,)" and keyword arguments "{}" not found.

धन्यवाद!!

उत्तर:

जवाब के लिए 2 № 1

सर्वर पर डेटा बदलने वाले किसी भी अनुरोध को संभालने के लिए HTML मानक द्वारा अनुशंसित तरीका, POST अनुरोध का उपयोग करना है।

{% for track in downloadedTracks %}
<tr>
<td>
{{track.name}}
</td>
<td>
<form method="POST" action="{% url principal.views.delete_downloaded_track %}" id="delete-form-{{ track.id }}">
{% csrf_token %}
<input type="hidden" name="track_id" value="{{ track.id }}" />
<div class="botoForm" onclick="document.getElementById("delete-form-{{ track.id }}").submit()"> Eliminar </div>
</form>
</td>
{% endfor %}

The {% csrf_token %} क्रॉस-साइट जालसाजी अनुरोधों को यह मान्य करके रोकता है कि आप जिस व्यक्ति को यह फ़ॉर्म भेजते हैं वह भी उस व्यक्ति को पोस्ट अनुरोध के माध्यम से वापस भेज रहा है.बस का उपयोग करके अपने दृश्य में id पुनर्प्राप्त करें:

if request.method == "POST":
id = request.POST.get("track_id", None)
track = Track.objects.get(id=id)

डेटा पोस्ट के माध्यम से भेजें url में दिखाई नहीं देगा ।


उत्तर № 2 के लिए 1

यदि आप डॉन "टी के लिए अपने यूआरएल में पैरामीटर दिखाना चाहते हैं, तो आप शायद इसे एक क्वेरी पैरामीटर के रूप में पारित करना चाहते हैं, उदा ।

<host_and_path>/perfil/deleteDownloadedTrack/?track_id=<some_track_id>.

तो अपने विचार इस तरह दिखेगा:

def delete_downloaded_track(request):
track_id = request.GET.get("track_id")
# get track based on track_id and delete it.

और इस तरह अपने टेंपलेट (संभालने तुम delete_url के रूप में delete_downloaded_track के रिवर्स में पास टेंपलेट संदर्भ में):

{% for track in downloadedTracks %}

<!-- template code -->

{% with delete_url|add:"?track_id="|add:track.id as url_with_id %}
<a href="{{url_with_id|safe}}">Delete</a>
{% endwith %}

{% endfor %}