English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Mapping d'URL de Django

Nous avons maintenant une vue fonctionnelle dans le chapitre précédent. Nous espérons accéder à cette vue via une URL. Django a son propre mode de mappage d'URL, nous allons maintenant éditer le fichier url.py du projet (myproject/url.py terminé. Le contenu du fichier url.py semble être le suivant :

# Fichier : example.py
# Copyright : 2020 By w3codebox
# Auteur par : fr.oldtoolbag.com
# Date : 2020-08-08
from django.conf.urls import patterns, include, url
 from django.contrib import admin
 admin.autodiscover()
 urlpatterns = patterns('',
    #Examples
    #url(r'^, 'myproject.view.home', name = 'home'),
    #url(r'^blog/', include('blog.urls')),
    url(r'^admin', include(admin.site.urls)),
 ) , 'myproject.view.home', name = 'home'),
    #url(r'^blog/', include('blog.urls')),
    url(r'^admin', include(admin.site.urls)),
 )

Lorsque l'utilisateur fait une demande de page dans votre application web, le contrôleur Django prend en charge la recherche de la vue correspondante via le fichier url.py, puis retourne une réponse HTML ou, s'il ne trouve pas, une404Erreur non trouvée. Le plus important est le tuple “urlpatterns”. C'est là que sont définies les correspondances entre les URL et les vues. Un modèle d'URL comme un tuple −

# Fichier : example.py
# Copyright : 2020 By w3codebox
# Auteur par : fr.oldtoolbag.com
# Date : 2020-08-08
from django.conf.urls import patterns, include, url
 from django.contrib import admin
 admin.autodiscover()
 urlpatterns = patterns('',
    #Examples
    #url(r'^, 'myproject.view.home', name = 'home'),
    #url(r'^blog/', include('blog.urls')),
    url(r'^admin', include(admin.site.urls)),
    url(r'^hello/', 'myapp.views.hello', name = 'hello'),
 ) , 'myproject.view.home', name = 'home'),
    #url(r'^blog/', include('blog.urls')),
    url(r'^admin', include(admin.site.urls)),
    url(r'^hello/', 'myapp.views.hello', name = 'hello'),
 )

Marquer la ligne de correspondance de l'URL "/"home" vers myapp/ Vue Hello créée dans le fichier view.py. Comme vous le voyez dans l'exemple ci-dessus, la correspondance est déterminée par trois éléments -

Mode - Une expression régulière qui correspond à l'URL et la mappe. Elle fonctionne avec le module python “re” (très utile lorsque vous souhaitez transmettre des paramètres via l'URL). python à l'adresse du chemin vers la vue - la même que lors de l'importation du module. Nom - Pour effectuer la réverse de l'URL, il est nécessaire d'utiliser le nommage des modes URL pour exécuter l'exemple ci-dessus. Après cela, démarrez le serveur et accédez à votre vue via l'URL suivante : http://127.0.0.1/hello

Organiser les URLs

Jusqu'à présent, nous avons créé “myprojects/url.py” pour accéder aux URL, toutefois, comme mentionné précédemment dans les explications sur Django, il est préférable de créer une application qui puisse être réutilisée dans différents projets. De cette manière, il est plus facile de voir ce qui ne va pas, et si vous souhaitez enregistrer toutes les URLs dans le fichier “projecturl.py”. Donc, la meilleure chose à faire est de créer un “url.py” pour chaque application et de le mettre dans notre fichier principal url.py du projet (y compris avant les URL gérées par notre interface d'administration).

Comment fait-il cela ?

Nous devons utiliser le code suivant pour créer un fichier urls.py dans le dossier myapp (myapp/urls.py) −

# Fichier : example.py
# Copyright : 2020 By w3codebox
# Auteur par : fr.oldtoolbag.com
# Date : 2020-08-08
from django.conf.urls import patterns, include, url
 urlpatterns = patterns('', url(r'^hello/', myapp.views.hello, name = 'hello'),)

myproject/urls.py sera modifié en ce qui suit-

# Fichier : example.py
# Copyright : 2020 By w3codebox
# Auteur par : fr.oldtoolbag.com
# Date : 2020-08-08
from django.conf.urls import patterns, include, url
 from django.contrib import admin
 admin.autodiscover()
 urlpatterns = patterns('',
    #Examples
    #url(r'^, 'myproject.view.home', name = 'home'),
    #url(r'^blog/', include('blog.urls')),
    url(r'^admin', include(admin.site.urls)),
    url(r'^myapp/', include(myapp.urls)),
 ) , 'myproject.view.home', name = 'home'),
    #url(r'^blog/', include('blog.urls')),
    url(r'^admin', include(admin.site.urls)),
    url(r'^myapp/', include(myapp.urls)),
 )

Nous avons inclus toutes les URL de l'application myapp. C'est fait en accédant à home.html pour “/hello”, c'est maintenant “/myapp/hello”, c'est une structure meilleure et plus facile à comprendre pour une application Web.

Créez un fichier de vue supplémentaire : C:\myproject\templates\myapp\hello.html, avec le contenu suivant :

# Fichier : example.py
# Copyright : 2020 By w3codebox
# Auteur par : fr.oldtoolbag.com
# Date : 2020-08-08
<html>
 <head>
   <meta http-equiv="content-type" content="text/html; charset=utf-8>
   <title>Hello </title>
   <meta name="robots" content="NONE,NOARCHIVE">
   </style>
 </head>
     <body>
         <h2>Welcome to w3codebox .</h2>
         <p>This is my first Django App</p>
     <body>
 </html>

Imaginez maintenant une autre vue 'morning' dans myapp, nous souhaitons qu'elle soit mappée dans myapp/url.py, nous allons alors changer notre myapp/url.py to -

# Fichier : example.py
# Copyright : 2020 By w3codebox
# Auteur par : fr.oldtoolbag.com
# Date : 2020-08-08
from django.conf.urls import patterns, include, url
 urlpatterns = patterns('',
    url(r'^hello/', 'myapp.views.hello', name = 'hello'),
    url(r'^morning/', 'myapp.views.morning', name = 'morning'),
 )

Cela peut être refondu en -

# Fichier : example.py
# Copyright : 2020 By w3codebox
# Auteur par : fr.oldtoolbag.com
# Date : 2020-08-08
from django.conf.urls import patterns, include, url
 urlpatterns = patterns('myapp.views',
    url(r'^hello/', 'hello', name = 'hello'),
    url(r'^morning/', 'morning', name = 'morning'),)

Comme vous le voyez, nous utilisons actuellement le premier élément du tuple urlpatterns. C'est très utile lorsque vous souhaitez changer le nom de l'application.

Send parameters to the view

Now that we know how to map URLs and how to organize them, let's take a look at how to pass parameters to the view. A classic article example (the article you want to access)/articles/article_id()

Parameters are passed by capturing them through URL pattern regular expressions. If we have a view like the following/view.py

# Fichier : example.py
# Copyright : 2020 By w3codebox
# Auteur par : fr.oldtoolbag.com
# Date : 2020-08-08
from django.shortcuts import render
 from django.http import HttpResponse
 def hello(request):
    return render(request, "hello.html", {})
 def viewArticle(request, articleId):
    text = "Displaying article Number: %s"%articleId
    return HttpResponse(text)

We want to map it to myapp/urls.py, so we can pass it through/myapp/article/articleId - Access, we need to add it in the following/urls.py - Definition

# Fichier : example.py
# Copyright : 2020 By w3codebox
# Auteur par : fr.oldtoolbag.com
# Date : 2020-08-08
from django.conf.urls import url
 from . import views
 urlpatterns = [
     url(r'^hello', views.hello, name='hello'),
     url(r'^article/(\d+)/', views.viewArticle, name = 'article'), 
     url(r'^', views.index, name='index'),
 ], views.index, name='index'),
 ]


When Django sees the URL: “/myapp/article/42”, it will pass the parameters42'to the viewArticle view, in the browser, you should get the following result -

Note that the order of the parameters here is very important. Suppose we want to view a list of articles for a certain month of a year, now add a viewArticles view. The code in view.py becomes -

# Fichier : example.py
# Copyright : 2020 By w3codebox
# Auteur par : fr.oldtoolbag.com
# Date : 2020-08-08
from django.shortcuts import render
 from django.http import HttpResponse
 def hello(request):
    return render(request, "hello.html", {})
 def viewArticle(request, articleId):
    text = "Displaying article Number: %s"%articleId
    return HttpResponse(text)
 def viewArticles(request, month, year):
    text = "Displaying articles of: %s"/%s"%(year, month)
    return HttpResponse(text)

myapp correspondante/Le fichier urls.py ressemble à ceci −

# Fichier : example.py
# Copyright : 2020 By w3codebox
# Auteur par : fr.oldtoolbag.com
# Date : 2020-08-08
from django.conf.urls import patterns, include, url
 urlpatterns = patterns('myapp.views',
    url(r'^hello/', 'hello', name = 'hello'),
    url(r'^morning/', 'morning', name = 'morning'),
    url(r'^article/(\d+)/', 'viewArticle', name = 'article'),
    url(r'^articles/(\d{2)/(\d{4})', 'viewArticles', name = 'articles'),)

Maintenant, lorsque vous accédez à http://localhost:8000/myapp/articles/12/2015/, vous obtiendrez 'Affichage des articles de: 2015/12, mais si vous convertissez les paramètres, vous ne pourrez pas obtenir le même résultat.

Pour éviter cela, il est possible qu'un paramètre d'URL se lie à un paramètre de vue. Par conséquent, url.py deviendra -

# Fichier : example.py
# Copyright : 2020 By w3codebox
# Auteur par : fr.oldtoolbag.com
# Date : 2020-08-08
from django.conf.urls import patterns, include, url
 urlpatterns = patterns('myapp.views',
    url(r'^hello/', 'hello', name = 'hello'),
    url(r'^morning/', 'morning', name = 'morning'),
    url(r'^article/(\d+)/', 'viewArticle', name = 'article'),
    url(r'^articles/(?P\d{2)/(?P\d{4})', 'viewArticles', name = 'articles'),)