English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
الآن، لدينا رؤية عملية تم شرحها في الفصول السابقة. نأمل في الوصول إلى هذه الرؤية من خلال URL. Django لديه طريقة خاصة به للتحويل بين URL ورؤية، وسنقوم بتعديل ملف url.py في المشروع (myproject/url.py) الآن. يبدو محتوى ملف url.py كالتالي:
# Filename : example.py # Copyright : 2020 By w3codebox # Author by : ar.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)), )
عندما يقوم المستخدم ببدء طلب صفحة عبر تطبيق الشبكة الخاص بك، يقوم محول Django باستقبال هذا الطلب ويقوم بالبحث في ملف url.py للعثور على الصفحة المطلوبة، ثم يعود بردة فعل HTML أو إذا لم يجد أي شيء يعود ب404 خطأ غير وجد. الأهمية تكمن في “urlpatterns” التجميعية. هذا هو تعريف التحويل بين URL والرؤية. نموذج URL التحويل يشبه التجميعية −
# Filename : example.py # Copyright : 2020 By w3codebox # Author by : ar.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'), )
تحديد خطوط العرض لتمثيل URL "/home" إلى عرض Hello الموجود في ملف view.py في مجلد myapp. كما ترون في المثال أعلاه، يتم تمثيل التحويل بثلاث عناصر -
النمط−هو تعبير عشوائي يطابق URL ويتم توجيهه. يمكنه العمل مع وحدة python 're' إذا كان يعمل بناءً على النمط (يستخدم بشكل متكرر عند الحاجة إلى نقل المعلمات عبر URL). المسار إلى العرض من python−في نفس المسار الذي تستورد فيه الوحدة. الاسم−للقيام بتحويل URL، يجب استخدام تسمية نموذج URL للقيام بما تم في مثال أعلاه. بعد ذلك، قم ب启动 الخادم، واستخدم URL التالي لزيارة عرضك: http://127.0.0.1/hello
حتى الآن، لقد أنشأنا URL لملف 'myprojects/url.py'، ومع ذلك، كما ذكر في الشرح السابق عن Django، من الأفضل إنشاء تطبيق يمكن تكراره في مشاريع مختلفة. بهذا الشكل يمكننا رؤية ما هو الخطأ، وإذا كان علينا حفظ جميع الروابط في ملف 'projecturl.py'. لذا، أفضل ممارسة هي إنشاء 'url.py' لكل تطبيق ووضعه في ملف url.py الخاص بمشروعنا الرئيسي (بما في ذلك قبل URL التي يتم إدارتها من خلال واجهة إدارة Django).
نحن بحاجة إلى استخدام الكود التالي لإنشاء ملف urls.py في مجلد myapp (myapp/urls.py) −
# Filename : example.py # Copyright : 2020 By w3codebox # Author by : ar.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 سيصبح كما يلي-
# Filename : example.py # Copyright : 2020 By w3codebox # Author by : ar.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)), )
لقد شملنا جميع URL لـ تطبيق "myapp". هذا من خلال زيارة "home.html" لـ "/hello"، الآن "/myapp/hello"، هذا هي هيكل أفضل وأكثر وضوحًا للنظام التشغيل الويب.
أنشئ ملف رؤية آخر: C:\myproject\templates\myapp\hello.html، وبهذه المحتويات:
# Filename : example.py # Copyright : 2020 By w3codebox # Author by : ar.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>
دعونا نتصور الآن في "morning" من "myapp"، نريد أن تكون في映射 "myapp/url.py"، ثم سنغير ملف "myapp/url.py" إلى -
# Filename : example.py # Copyright : 2020 By w3codebox # Author by : ar.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'), )
يمكن إعادة هيكلة هذا إلى -
# Filename : example.py # Copyright : 2020 By w3codebox # Author by : ar.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'),
كما ترون، الآن نستخدم العنصر الأول من المجموعة urlpatterns.
الآن نعرف كيف نرسم URL، وكيف نرتبها، دعونا نرى كيف يمكن نقل المعاملات إلى الرؤية. مثال تقليدي على مقالة (عندما تريد زيارة المقال إلى "/articles/article_id")
التحويل المعاملات يتم من خلال استخدام تعبيرات النمط العنوانية للرابط.
# Filename : example.py # Copyright : 2020 By w3codebox # Author by : ar.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)
我们想把它映射放在myapp/urls.py ,所以我们可以通过 “/myapp/article/articleId” 访问, 我们需要在下列 “myapp/urls.py” 定义−
# Filename : example.py # Copyright : 2020 By w3codebox # Author by : ar.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'), ]
عندما يرى Django URL: “/myapp/article/42” ، سيقوم بتقديم المعامل '42' إلى الرؤية viewArticle، في المتصفح يجب أن تحصل على النتيجة التاليةـ
لاحظ أن ترتيب المعلمات هنا مهم جدًا. لنفترض أننا نريد عرض قائمة المقالات لشهر معين في عام معين، الآن أضف viewArticles إلى الرؤية. يصبح كود view.py كالتـ
# Filename : example.py # Copyright : 2020 By w3codebox # Author by : ar.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/urls.py يبدو كالتـ
# Filename : example.py # Copyright : 2020 By w3codebox # Author by : ar.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'),)
الآن، عند زيارتك إلى http://localhost:8000/myapp/articles/12/2015/، ست��ح 'عرض مقالات: 2015/12'، ولكن إذا قمت بتحويل المعلمات، لن تحصل على نفس النتيجة.
لتفادي هذا الوضع، قد يكون هناك URL معرف يربط إلى معرف عرض. لذلك url.py سيكون -=
# Filename : example.py # Copyright : 2020 By w3codebox # Author by : ar.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'),)