テンプレートの 1 つに引数を指定して関数を渡すために、関数があるビューにリダイレクトする非表示の入力を使用しました (関数は、ユーザーが「フォローしている」ユーザーを削除するために使用されます)。このビューは、HttpResponseRedirect(reverse('myview', args=[a number])) のおかげで前のページにリダイレクトされます。
問題は、リダイレクト先のページに引数 (数値) が必要だということです。そして、ユーザーがいた正確なページにリダイレクトされるようにしたいと思います。
ここに私のテンプレートがあります:
<form method="post" action="{% url projet.views.remove_relationship %}">
{% csrf_token %}
<input type="hidden" name="remove_relationship" value="{{ user.id }}">
<input type="submit" value="delete" />
そしてビュー:
def remove_relationship(request):
user = request.user
if request.method == 'POST':
user_id = request.POST['remove_relationship']
user_id= int(user_id)
user_name = User.objects.get(id=user_id)
user.userprofile.remove_relationship(person=user_name.userprofile, status=1)
return HttpResponseRedirect(reverse('myoriginalview', args=[A NUMBER]))
ユーザーの元のページは、www.mysite/myoriginalview/ANUMBER のようなものです。彼をこの正確なページにリダイレクトしたい
元のビューでは、番号はオブジェクト ID に対応します。(match.id)。
だから私がやりたくないのは、元のビューの match.id を取得し、ビュー remove_relationship に渡して "args=[match.id]" で使用することです。
では、元のビューからこの ID を取得して新しいビューに渡すにはどうすればよいでしょうか?
これが私が試したものです:
私のmodels.pyで:
@models.permalink
def get_absolute_url_remove_relationship(self):
return ('remove_relationship', (), {'dub_id': self.id})
私のテンプレートでそれを使用してください:
<form method="post" action="{{get_absolute_url_remove_relationship}}">
{% csrf_token %}
<input type="hidden" name="remove_relationship" value="{{ user.id }}">
<input type="submit" value="delete" />
私からしてみれば:
def remove_relationship(request, match_id=None):
match_id= int(match_id)
user = request.user
if request.method == 'POST':
user_id = request.POST['remove_relationship']
user_id= int(user_id)
user_name = User.objects.get(id=user_id)
user.userprofile.remove_relationship(person=user_name.userprofile, status=1)
return HttpResponseRedirect(reverse('terrain', args=[match_id]))
そして、url.py で必要な変更を行います。
そのため、ユーザーが「削除」ボタンをクリックしてフォローしているユーザーを削除すると、リダイレクトはうまく機能しますが、ユーザーは削除されません。関数はもう使用されていないようですが、{%url projet.views.remove_relationship %} を使用すると、ユーザーは削除されましたが、リダイレクトはありませんでした。
どんな助けでも大歓迎です。
PS:質問は、私が以前に尋ねた別の質問の後に来ます(http://stackoverflow.com/questions/13233794/function-with-arguments-in-a-template-django)。より明確にするために、新しいトピックを開きました。