Django pasar kwargs a través de la URL

El propósito de esta sección de código es mostrar todas las solicitudes para unirse a un grupo en una plantilla similar a la que se muestra a continuación:

Request 1 | Add | Delete
Request 2 | Add | Delete
Request 3 | Add | Delete
....

Lo que tengo pensado hacer es hacer el ‘añadir’ y el botón ‘borrar’ href a una función en la vista. Sin embargo, me estoy preguntando cuál es la forma correcta de pasar un **kwarg a partir de una plantilla a una vista. Por el contrario, si hay alguna mejor manera de lograr esto?

plantilla

{% for asking in requested %}
    <a href={% url 'group_judge_request' group_profile.slug decision=0 %}>Cut {{ asking.user.username }}</a>
    <a href={% url 'group_judge_request' group_profile.slug decision=1 %}>Keep {{ asking.user.username }}</a>
{% endfor %}

url

url(r'^judge_request/(?P<gslug>[\w-]+)$',
    group_judge_request,
    kwargs={'decision':'decision'},
    name='group_judge_request'),

ver group_judge_restart

def group_judge_request(request, gslug, decision):

ver group_requested_invites

def group_requested_invites(request, gslug):
  ....
  requested = GroupRequestToJoin.objects.filter(group=group_profile.group, checked=False)
  return render(request, "groups/group_requested_invites.html", {
    'requested' : requested,
    })

De Error:

Don't mix *args and **kwargs in call to reverse()!
  • Has probado a quitar la sintaxis de palabras clave en la url templatetag? Usted tendría algo como esto {% url ‘group_judge_request’ group_profile.slug 0 %}. La lectura de la Django docs, no se puede mezclar la posición de la palabra clave de sintaxis. docs.djangoproject.com/en/dev/ref/templates/builtins/#url
  • Error: Inversa para ‘group_judge_request’ argumentos ‘(«, 0)’ y los parámetros de palabra clave ‘{}’ no encontrado. 1 patrón(s) tratado de: [‘grupo/judge_request/(?P<gslug>[\\w-]+)$’]
  • Cómo tratar el uso de la sintaxis de palabras clave? {% url ‘group_judge_request’ gslug=group_profile.slug decisión=0 %}.
  • A la inversa para ‘group_judge_request’ argumentos ‘()’ y los parámetros de palabra clave ‘{u’decision’: 0, u’gslug’: «}’ no encontrado. 1 patrón(s) tratado de: [‘grupo/judge_request/(?P<gslug>[\\w-]+)$’]
  • Yo creo que es porque el gslug se pasa una cadena vacía? No coincide con la expresión regular en tu urlconf.
  • Este hilo tiene la respuesta aquí para pasar dos argumentos en el pk stackoverflow.com/a/42431096/6786040

InformationsquelleAutor Matt Stokes | 2014-04-19

2 Kommentare

  1. 4

    No creo que hay una manera de pasar el *kwargs como este de la plantilla utilizando el incorporado en la url de la etiqueta de plantilla.

    Hay dos maneras de hacer esto, una es la de crear dos direcciones url y pasar la decisión como un kwarg a la vista:

    urls.py

    url(r'^judge_request_cut/(?P<gslug>[\w-]+)$',
        group_judge_request,
        kwargs={'decision': 0},
        name='group_judge_request_cut'),
    url(r'^judge_request_keep/(?P<gslug>[\w-]+)$',
        group_judge_request,
        kwargs={'decision': 1},
        name='group_judge_request_keep'),

    plantilla

    {% for asking in requested %}
        <a href={% url 'group_judge_request_cut' group_profile.slug decision=0 %}>Cut {{ asking.user.username }}</a>
        <a href={% url 'group_judge_request_keep' group_profile.slug decision=1 %}>Keep {{ asking.user.username }}</a>
    {% endfor %}

    O usted podría pasar el entero como parámetro:

    urls.py

    url(r'^judge_request/(?P<gslug>[\w-]+)/(?P<decision>\d{1})$',
        group_judge_request,
        name='group_judge_request'),

    plantilla

    {% for asking in requested %}
        <a href={% url 'group_judge_request' group_profile.slug 0 %}>Cut {{ asking.user.username }}</a>
        <a href={% url 'group_judge_request' group_profile.slug 1 %}>Keep {{ asking.user.username }}</a>
    {% endfor %}
  2. 4

    Creo que usted desea utilizar una dirección url de consulta. Por lo que su url será como sigue:

    <a href="{% url 'group_judge_request' group_profile.slug %}?decision=0">Cut {{asking.user.username }}</a>

    A continuación, puede ir a la lista de consultas mediante:

    request.META['QUERY_STRING']
    • Yo, personalmente, prefiero la solicitud.GET[‘decisión’] o solicitud.OBTENER.get(‘decisión’, False) si desea una unquery cuerdas versión predeterminada. Pero también depende del caso de uso.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea