2017-07-14 2 views
3

Puis-je accéder à la valeur d'un argument nommé (à partir de l'URL) dans un modèle Django?Accéder à kwargs à partir d'une URL dans un modèle Django

Comment puis-je accéder à la valeur de this_name ci-dessous à partir d'un modèle django?

url(r'^area/(?P<this_name>[\w-]+)/$', views.AreaView.as_view(), name="area_list") 

je pourrais obtenir l'ensemble chemin d'URL et le casser mais je voulais vérifier s'il y a une voie à suivre tout droit de le faire, car il a déjà un nom.

Le fait de le faire dans les données de contexte de la vue peut être une alternative, mais je ne suis pas sûr si j'ai besoin de le transmettre car je suppose que le modèle l'aurait déjà en quelque sorte? Impossible de trouver une méthode directe dans le request API cependant.

+0

this_name sera passé comme contexte et comme il peut être utilisé dans le modèle. Je ne comprends pas pourquoi vous ne pouvez pas accéder. Ou de quelle autre manière vous voulez y accéder. Peut être un cas d'utilisation complet permettra de clarifier cette question –

Répondre

4

Dans la vue, vous pouvez accéder à l'URL args et kwargs en tant que self.args et self.kwargs. Si vous voulez uniquement accéder à la valeur dans le modèle, vous n'avez pas besoin d'apporter de modifications dans la vue. La base méthode get_context_data ajoute la vue du contexte que view, vous pouvez donc ajouter ce qui suit à votre modèle:

{{ view.kwargs.this_name }} 
+0

parfait! merci – Anupam

+0

Je devais faire ceci pour un autre modèle qui n'est pas basé sur une vue basée sur la classe mais qui n'arrive pas à trouver comment y accéder. La méthode est-elle différente pour une vue non basée sur une classe? Recherché dans les docs mais ne pouvait pas trouver quelque chose d'utile pour le moment. J'ai essayé juste 'kwargs.this_name' mais cela ne retourne rien – Anupam

+1

Si vous avez une fonction d'affichage' def my_view (requête, myvar, * args ** kwargs): 'alors c'est à vous d'inclure les variables dans le contexte du template , par exemple 'return render (requête, 'mytemplate.html', {'myvar': myvar, 'foo': kwargs.get ('foo')})' – Alasdair

-1

Ceci peut être consulté à partir de self.kwargs sur la vue. Remplacez get_context_data() pour le transmettre au modèle. C'est la bonne façon de le faire.