2010-06-07 5 views
1

suivant URLconf et se calcule comme suit:Django: Comment écrire la fonction inverse pour le

url(r'^register/$', 
    register, 
    { 'backend': 'registration.backends.default.DefaultBackend' }, 
    name='registration_register'), 



def register(request, backend, success_url=None, form_class=None, 
      disallowed_url='registration_disallowed', 
      template_name='registration/registration_form.html', 
      extra_context=None): 

Ce que je veux faire est de rediriger les utilisateurs vers la page de registre et spécifiez un success_url. J'ai essayé reverse ('registration.views.register', kwargs = {'success_url': '/ test /'}) mais cela ne semble pas fonctionner. J'essaye depuis des heures et je n'arrive pas à comprendre. Merci

Répondre

1

Si vous souhaitez pouvoir spécifier reverse() avec des paramètres, ces paramètres doivent être définis dans la configuration d'URL elle-même (regexp). Quelque chose comme:

url(r'^register/(?P<success_url>[\w\/]+)/$', 
    register, 
    { 'backend': 'registration.backends.default.DefaultBackend' }, 
    name='registration_register'), 

Vous pouvez envelopper cette section d'URL dans ()? pour le rendre optionnel (pour qu'il corresponde à tout simple registre/trop) La différence entre args et kwargs est que, avec args vous pouvez spécifier params URL sans nom/named alors qu'avec kwargs named. donc:

r'^register/(?P<success_url>\w+)/$' 
reverse('url_name', args=[my_success_url]) 
reverse('url_name', kwargs={'success_url': my_success_url}) // both work and do the same 

r'^register/(\w+)/$' 
reverse('url_name', args=[my_success_url]) // only this works 

Modifier: Pour success_url params, si vous voulez être en mesure de faire correspondre une URL complète relative, y compris params possibles GET dans l'URL relative, l'expression rationnelle réelle pourrait être assez complexe . Quelque chose comme (non testé):

r'^register/(?P<success_url>[\w\/]+(((\?)([a-zA-Z]*=\w*)){1}((&)([a-zA-Z]*=\w*))*)?)/$' 
+0

Merci beaucoup! La raison de cette question est parce que je veux rediriger les utilisateurs d'où ils viennent après leur inscription. Je suppose que je peux aussi utiliser un paramètre de session. Je trouve que je stocke des données de session parfois comme une issue facile. Recommanderiez-vous de le faire dans ce scénario? Merci encore! – ninja123

0

Modifier: Désolé, complètement mal lu la question - Je n'ai pas regardé la définition de la fonction. En fait, le problème ici est que votre URLconf est conçu de telle sorte qu'il est impossible de définir dynamiquement le success_url. Il doit être passé explicitement à la fonction via le dictionnaire extra_context - c'est-à-dire celui où vous avez actuellement défini backend. Comme il n'y a rien dans l'URL elle-même pour accepter ce paramètre, il doit y être codé en dur.

+0

So 'success_url', 'form_class', 'disallowed_url' etc sont tous les paramètres GET? Donc, en général, tous les kwargs définis dans une fonction de vue seront des paramètres GET? – ninja123

+0

Pas de problèmes, donc vous voulez dire que je ne peux pas appeler inverse? mais appelez la fonction directement? Pouvez-vous s'il vous plaît me donner un exemple. Merci – ninja123

+0

Ce ne sont pas des paramètres GET, ce sont simplement des paramètres supplémentaires envoyés à la fonction de visualisation Python. Params définis (plus exactement 'capturé') à partir de l'URL conf peut également être GET params mais pas nécessairement. Seulement si vous choisissez de définir l'URL dans un tel format:^register? My_get_param = (? P \ w +) –

Questions connexes