Question

Existe-t-il un moyen de faire passer un paramètre par défaut à une action si la regex ne correspondait à rien avec django?


urlpatterns = patterns('',(r'^test/(?P<name>.*)?

J'ai essayé de définir le troisième paramètre de l'urlpatterns dans un dictionnaire contenant 'et de donner au paramètre name une valeur par défaut pour la méthode, ce qui n'a pas fonctionné. le paramètre name semble toujours être None. Je ne veux vraiment pas coder un chèque pour None si je peux définir une valeur par défaut.

Clarification: voici un exemple de ce que je changeais en.


def displayName(request,name='Steve'):
      return HttpResponse(name)
#i also tried

urlpatterns = patterns('',
      (r'^test/(?P<name>.*)?

quand je pointe mon navigateur vers la vue, il affiche le texte 'Aucun'

Des idées?

,'myview.displayName')) #myview.py def displayName(request,name): # write name to response or something

J'ai essayé de définir le troisième paramètre de l'urlpatterns dans un dictionnaire contenant 'et de donner au paramètre name une valeur par défaut pour la méthode, ce qui n'a pas fonctionné. le paramètre name semble toujours être None. Je ne veux vraiment pas coder un chèque pour None si je peux définir une valeur par défaut.

Clarification: voici un exemple de ce que je changeais en.

<*>

quand je pointe mon navigateur vers la vue, il affiche le texte 'Aucun'

Des idées?

, 'myview.displayName', dict(name='Test') ) )

quand je pointe mon navigateur vers la vue, il affiche le texte 'Aucun'

Des idées?

,'myview.displayName')) #myview.py def displayName(request,name): # write name to response or something

J'ai essayé de définir le troisième paramètre de l'urlpatterns dans un dictionnaire contenant 'et de donner au paramètre name une valeur par défaut pour la méthode, ce qui n'a pas fonctionné. le paramètre name semble toujours être None. Je ne veux vraiment pas coder un chèque pour None si je peux définir une valeur par défaut.

Clarification: voici un exemple de ce que je changeais en.

<*>

quand je pointe mon navigateur vers la vue, il affiche le texte 'Aucun'

Des idées?

Était-ce utile?

La solution

Le problème est que lorsque le motif est comparé à 'test /', le groupdict capturé par la regex contient le mappage 'nom' = = gt; Aucun:

>>> url.match("test/").groupdict()
{'name': None}

Cela signifie que lorsque la vue est appelée, utilisez quelque chose d’apparent semblable à celui-ci:

view(request, *groups, **groupdict)

qui équivaut à:

view(request, name = None)

pour 'test /', ce qui signifie que le nom est attribué à None plutôt qu'à non attribué.

Cela vous laisse deux options. Vous pouvez:

  1. Recherchez explicitement Aucun dans le code de la vue, ce qui est un peu bidon.
  2. Réécrivez la règle de répartition de l'URL pour rendre la capture du nom non facultative et introduisez une deuxième règle à capturer lorsqu'aucun nom n'est fourni.

Par exemple:

urlpatterns = patterns('',
    (r'^test/(?P<name>.+)

Lors de la seconde approche, vous pouvez simplement appeler la méthode sans le motif de capture et laisser python gérer le paramètre par défaut ou vous pouvez appeler une autre vue avec délégués.

,'myview.displayName'), # note the '+' instead of the '*' (r'^test/

Lors de la seconde approche, vous pouvez simplement appeler la méthode sans le motif de capture et laisser python gérer le paramètre par défaut ou vous pouvez appeler une autre vue avec délégués.

,'myview.displayName'), )

Lors de la seconde approche, vous pouvez simplement appeler la méthode sans le motif de capture et laisser python gérer le paramètre par défaut ou vous pouvez appeler une autre vue avec délégués.

Autres conseils

Je pensais que vous pourriez def displayName (request, name = defaultObj) ; c'est ce que j'ai fait dans le passé, au moins. À quoi définissiez-vous la valeur par défaut?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top