2009-10-16 6 views
1

Comment puis-je annuler une URL mais avec un nom de modèle différent? J'ai spécifiquement utiliser urlresolvers.reverseDjango: Inverser une URL avec un modèle différent

Pour être plus précis:

je un point de vue, mais deux urls à partir de laquelle il pourrait être consulté

(r'^url/$', 'view1', {'template1':'template1.html'}, 'access-url1'), 
(r'^url_dynamic/$', 'view1', {'template1':'template_dynamic.html'}, 'url-dynamic'), 

Je ne veux pas écrire de code différencier ce modèle pour revenir dans la vue parce que je pourrais vouloir le changer à la volée. Donc, j'ai besoin la possibilité de changer l'URL tout en appelant pour exemple

urlresolvers.reverse('view1', kwargs = {'template1':'template_dynamic.html'}) 
(which btw does not work throws noreversematch) 

Je pourrais aussi simplement copier view1 dans view2 et l'appeler avec url dynamique, mais cela serait une violation SEC.

+0

Montrez-nous ce que vous avez à ce jour. Les URL ne doivent rien avoir à faire avec les modèles. –

+0

Pour développer: les URL sont mappées aux vues, les vues peuvent ou non se retrouver dans un modèle, et n'importe quelle vue peut finir par afficher plusieurs modèles (ou aucun). –

+0

@Dominic, Le résultat final crashekar veut du sens, mais inverser() n'est certainement pas le bon moyen d'y arriver ... –

Répondre

2

urlresolvers.reverse inverse kwargs qui correspondent à ceux du modèle regex, pas les kwargs passé par le dict, dans l'url. Vous pouvez utiliser à la place la variante reverse('url-name') à la place.

Pour votre cas, il va être:

urlresolvers.reverse('url-dynamic') 
+0

Cela fonctionne bien. J'étais obsédé par l'ajout du nom de la vue lors de l'inversion. – crashekar

1

Si vraiment vous devez utiliser inverse pour accomplir ceci, vous pourriez faire quelque chose de sournois avec votre kwargs pour lui passer le nom du modèle.

La signature de fonction pour la marche arrière() ressemble à ceci:

reverse(viewname, urlconf=None, args=None, kwargs=None, current_app=None) 

Vous auriez besoin de votre fonction en vue d'accepter un nom de modèle/chaîne comme argument (en option). Alors vous juste

{% url my.view.function "this_is_a_template.html" %} 
+0

J'ai essayé cela avec le nom du template dans le cadre de kwargs mais j'ai eu un NoReverseMatch – crashekar

+0

vous ne pouvez pas utiliser reverse pour passer tout ce qui ne fait pas partie de l'urlconf qui mène à votre fonction pour commencer. Vous devrez modifier à la fois votre fonction d'affichage et urlconf pour que cela fonctionne. –

Questions connexes