546 votes

La capture des paramètres d'url dans la requête.OBTENEZ de l'

Je suis actuellement en train de définir des expressions régulières dans le but de capturer des paramètres dans une url, comme décrit dans le tutoriel. Comment puis-je accéder aux paramètres de l'url en tant que partie de l'objet HttpRequest? Mon HttpRequest.OBTENIR actuellement retourne un vide QueryDict objet.

J'aimerais savoir comment faire sans une bibliothèque afin que je puisse apprendre à connaître Django mieux.

773voto

camflan Points 4010

Si votre url est quelque chose comme domain/search/?q=haha, Alors vous devez utiliser request.GET.get('q', '').

q est le paramètre que vous voulez, Et '' est la valeur par défaut si q n'est pas trouvé.

Si vous êtes à la place de la configuration de votre URLconf, Alors votre capture l' regex sont passés à la fonction en tant qu'arguments (ou arguments nommés).

Tels que:

(r'^user/(?P<username>\w{0,50})/$', views.profile_page,),

Puis dans votre views.py vous aurait

def profile_page(request, username):
    # Rest of the method

397voto

akaihola Points 10007

Afin de clarifier camflan de l'explication, supposons que vous avez

  • la règle d' url(regex=r'^user/(?P<username>\w{1,50})/$', view='views.profile_page')
  • un en entrant demande d' http://domain/user/thaiyoshi/?message=Hi

L'URL répartiteur de la règle de l'attraper par les parties de l'URL de chemin d'accès (ici "user/thaiyoshi/") et les passer à la fonction d'affichage le long avec l'objet de la requête.

La chaîne de requête (ici message=Hi) est analysé et les paramètres sont stockés en tant que QueryDict en request.GET. Aucune autre correspondance ou le traitement de HTTP GET paramètres est fait.

Ce point de vue la fonction serait d'utiliser les deux pièces extraites à partir du chemin d'URL et d'un paramètre de requête:

def profile_page(request, username=None):
    user = User.objects.get(username=username)
    message = request.GET.get('message')

Comme une note de côté, vous trouverez la méthode de la requête (dans ce cas - "GET", et à la soumission des formulaires habituellement "POST") en request.method. Dans certains cas, il est utile de vérifier qu'il correspond bien à ce que vous vous attendez.

Mise à jour: Lors de la décision d'utiliser l'URL ou le chemin des paramètres de requête pour la transmission de l'information, les éléments suivants peuvent vous aider:

  • utilisez le chemin d'accès d'URL pour l'identification univoque des ressources, par exemple, /blog/post/15/ (pas /blog/posts/?id=15)
  • utilisez les paramètres de requête pour changer la manière dont la ressource est affiché, par exemple, /blog/post/15/?show_comments=1 ou /blog/posts/2008/?sort_by=date&direction=desc
  • l'homme URLs, éviter l'utilisation de numéros d'identification et d'utiliser, par exemple, des dates, des catégories et/ou des limaces: /blog/post/2008/09/30/django-urls/

30voto

Kevin Points 31
def some_view(request, *args, **kwargs):
    if kwargs.get('q', None):
        # Do something here ..

17voto

DrKaoliN Points 156

Je voudrais partager une astuce qui peut vous faire économiser du temps.
Si vous prévoyez d'utiliser quelque chose comme ceci dans votre urls.py le fichier:

url(r'^(?P<username>\w+)/$', views.profile_page,),

Ce qui signifie fondamentalement www.example.com/<username>. Assurez-vous de placer à la fin de votre URL entrées, parce que sinon, il est sujet à provoquer des conflits avec l'URL entrées qui suivent ci-dessous, à savoir l'accès à l'un d'eux va vous donner le joli message d'erreur: User matching query does not exist.

J'ai vécu moi-même; j'espère que ça aide!

8voto

jamting Points 893

Ce n'est pas exactement ce que vous avez demandé, mais cet extrait est utile pour la gestion de l' query_strings en templates.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X