web-dev-qa-db-fra.com

Comment ajouter des paramètres d'URL à la balise d'URL du modèle Django?

À mon avis, pour obtenir des paramètres d'URL comme celui-ci:

date=request.GET.get('date','')

Dans mon URL, j'essaie de transmettre les paramètres de cette manière avec la balise de modèle d'URL comme ceci:

<td><a href="{% url 'health:medication-record?date=01/01/2001' action='add' pk=entry.id %}" >Add To Log</a></td>

Le paramètre après le? est évidemment ne fonctionne pas, comment puis-je passer cette valeur de données afin de récupérer avec un get?

74
Atma

J'ai trouvé la réponse ici: Est-il possible de passer des paramètres de requête via la balise de template {Djol%? De Django?

Ajoutez-les simplement à la fin:

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

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

[Il n'y a rien d'autre à améliorer mais je reçois une erreur stupide lorsque je corrige les ticks du code]

59
Atma

Vous devez d’abord préparer votre URL à accepter le paramètre dans la regex: (urls.py)

url(r'^panel/person/(?P<person_id>[0-9]+)$', 'apps.panel.views.person_form', name='panel_person_form'),

Donc, vous utilisez ceci dans votre modèle:

{% url 'panel_person_form' person_id=item.id %}

Si vous avez plusieurs paramètres, vous pouvez modifier votre expression rationnelle et modifier le modèle à l'aide de ce qui suit:

{% url 'panel_person_form' person_id=item.id group_id=3 %}
129
andergmartins

Ajoutez simplement l'URL des modèles:

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

tilisé dans Django 2.

18
JustChill

Cela peut être fait en trois étapes simples:

1) Ajouter l'ID d'élément avec la balise 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) Ajouter le chemin à rls.py:

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

) Utilisez l'identifiant sur views.py:

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

    return redirect('dashboard')
6

Je ne sais pas si je suis hors du sujet, mais j'ai trouvé une solution pour moi; Vous avez une vue basée sur les classes et vous souhaitez avoir un paramètre get en tant que balise de modèle:

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

Ensuite, vous faites votre demande get /mysite/urlname?get_parameter_name='stuff.

Dans votre modèle, lorsque vous insérez {{ tag_name }}, vous aurez accès à la valeur du paramètre get ('stuff'). Si vous avez une URL dans votre modèle qui a également besoin de ce paramètre, vous pouvez le faire.

 {% url 'my_url' %}?get_parameter_name={{ tag_name }}"

Vous n'aurez pas à modifier votre configuration d'URL

2
Guillaume Lebreton

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>

Le {% url 'ticket_details'%} est le nom de la fonction dans vos vues.

2: Views.py

def ticket_details(request, ticket_id):

   print(ticket_id)
   return render(request, ticket.html)

ticket_id est le paramètre que vous obtiendrez de ticket_id = ticket.id

3: URL.py

urlpatterns = [
path('ticket_details/?P<int:ticket_id>/', views.ticket_details, name="ticket_details") ]

/? P - où ticket_id est le nom du groupe et motif correspond à un motif à comparer.

1