web-dev-qa-db-ja.com

DjangoテンプレートURLタグにURLパラメーターを追加する方法は?

私の見解では、次のような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で取得するためにこのデータ値を渡すにはどうすればよいですか?

66
Atma

私はここで答えを見つけました: Djangoの{%url%}テンプレートタグを介してクエリパラメータを渡すことは可能ですか?

最後に追加するだけです:

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

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

[改善するものは他にありませんが、コードティックを修正すると、愚かなエラーが発生します]

57
Atma

最初に、正規表現のパラメーターを受け入れるようにURLを準備する必要があります:(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 %}
120
andergmartins

テンプレートのURLを追加するだけです:

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

Django 2.0で使用

17
JustChill

これは、3つの簡単な手順で実行できます。

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)にパスを追加rls.py

path('edit/<int:id>', views.edit, name='edit')
path('delete/<int:id>', views.delete, name='delete')

でIDを使用views.py

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

    return redirect('dashboard')

対象外かどうかはわかりませんが、解決策が見つかりました。クラスベースのビューがあり、テンプレートタグとして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構成を変更する必要はありません。

1