/ / djangoリバースが見つかりません - django、django-templates、django-views

djangoのリバースが見つかりません - django、django-templates、django-views

私はちょうどからのビューfuncitonを呼びたいテンプレートと私は逆関数でそれをやらなければならないことがわかりました。私は、ビュー関数にパラメータを渡したいですが、私はURLに表示したくありません。出来ますか?ここに私のコードとエラーがあります:

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.

ありがとう!!

回答:

回答№1は2

サーバー上のデータを変更する要求を処理するために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 %}

{% csrf_token %} このフォームを送信した人物がPOSTリクエストを通じて返信した人物であることを検証することで、サイト間の偽造要求を防止します。次のコードを使用して、ビュー内のIDを取得するだけです。

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

POST経由のデータ送信はURLに表示されません。


回答№2の場合は1

URLにパラメータを表示したくない場合は、クエリパラメータとして渡したいと思うかもしれませんが、 例えば

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