জাঙ্গো 2.0 এর জন্য url.py এ পথ () বা url () ব্যবহার করা কি ভাল?


131

একটি জ্যাঙ্গো অনলাইন কোর্সে, প্রশিক্ষক আমাদের url()ফাংশনটি ভিউগুলিতে কল করতে এবং urlpatterns তালিকায় নিয়মিত ভাব প্রকাশ করতে ব্যবহার করেছেন । আমি এর ইউটিউবে অন্যান্য উদাহরণ দেখেছি। যেমন

from django.contrib import admin
from django.urls import include
from django.conf.urls import url

urlpatterns = [
    path('admin/', admin.site.urls),
    url(r'^polls/', include('polls.urls')),
]


#and in polls/urls.py

urlpatterns = [        
    url(r'^$', views.index, name="index"),
]

তবে জাজানো টিউটোরিয়ালটি ব্যবহার path()করে তারা এর পরিবর্তে উদাহরণ ব্যবহার করে:

from django.urls import path
from . import views

urlpatterns = [
    path('', views.index, name="index"),        
]

তবুও নিয়মিত প্রকাশগুলি path()ফাংশনটির সাথে কাজ করবে বলে মনে হয় path(r'^$', views.index, name="index")না কারণ এটি ব্যবহার করে mysite.com/polls/ভিউটি পাবেন না ।

path()সঠিক পদ্ধতিতে এগিয়ে যাওয়া কি রেগেক্স ছাড়াই ব্যবহার করা হচ্ছে? url()আরও শক্তিশালী তবে কি আরও জটিল তাই তারা path()আমাদের শুরু করার জন্য ব্যবহার করছে? বা এটি বিভিন্ন কাজের ক্ষেত্রে বিভিন্ন সরঞ্জামের কেস?


2
যদি আপনি কোনও টিউটোরিয়াল অনুসরণ করে থাকেন তবে আমি path()এবং এর মধ্যে স্যুইচ করার সময় ভুলগুলি রোধ করতে টিউটোরিয়ালটি যে কোনও স্টাইল ব্যবহার করব url()। আপনি যদি চান বা রেজেক্সস ব্যবহার করতে চান তবে আপনাকে অবশ্যই ব্যবহার করতে হবে re_path()বা url()। এর বাইরেও, আমি মনে করি আপনি এটি পছন্দ করেন এমনটি আপনার পক্ষে সত্যই।
আলাসদায়ের

উত্তর:


174

Url এর জন্য জাজানো ডকুমেন্টেশন থেকে

url(regex, view, kwargs=None, name=None)এই ফাংশনটি একটি উপনাম django.urls.re_path()। এটি ভবিষ্যতে প্রকাশে অবনমিত হওয়ার সম্ভাবনা রয়েছে।

pathএবং এর মধ্যে মূল পার্থক্যটি re_pathহ'ল pathরেজিক্স ছাড়াই রুট ব্যবহার করে

আপনি re_pathজটিল রেইগেক্স কলগুলির জন্য এবং কেবল pathসহজ সরল দেখার জন্য ব্যবহার করতে পারেন


1
বিস্তারিত তথ্যের জন্য ধন্যবাদ! re_pathআমি কি তখন খুঁজছি
ফ্রস্টেড কুকিজ

65

নতুন django.urls.path()ফাংশনটি একটি সহজ, আরও পঠনযোগ্য URL টি রাউটিং সিনট্যাক্সের অনুমতি দেয়। উদাহরণস্বরূপ, পূর্ববর্তী জাঙ্গো প্রকাশের এই উদাহরণটি:

url(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive)

হিসাবে লেখা যেতে পারে:

path('articles/<int:year>/', views.year_archive)

django.conf.urls.url() পূর্ববর্তী সংস্করণ থেকে ফাংশন এখন হিসাবে পাওয়া যায় django.urls.re_path()। পুরানো অবস্থানটি আসন্ন অবচয় ছাড়াই পিছনের দিকে সামঞ্জস্যের জন্য রয়ে গেছে। পুরানো django.conf.urls.include()ফাংশনটি এখন থেকে আমদানিযোগ্য django.urlsযাতে আপনি ব্যবহার করতে পারেন:

from django.urls import include, path, re_path

মধ্যে URLconfsজাঙ্গো ডকটি আরও পড়ার জন্য


10
আপনার path()উদাহরণটি অ-চার-অঙ্কের সংখ্যাগুলিকে মঞ্জুরি দেয় বলে কিছুটা বিভ্রান্তিকর ।
ব্রেণকোর

/<int:year>/প্রকাশ করে ওই বছরের পূর্ণসংখ্যা হওয়া উচিত, আমি সুপারিশ করছি কর্মকর্তা ডকুমেন্টেশন মাধ্যমে সন্ধান।
সিলভারাস আকুবো

2
@ সিলবাব্লাজ যেমন ব্রেনকোর বলেছেন, এর intসমতুল্য নয় [0-9]{4}। এটি পূর্ণসংখ্যার জন্য ব্যবহৃত হয় বা না এই সম্পর্কের কোনও ফল নেই। সম্ভবত আপনি যদি আপনার তুলনাটি প্রতিস্থাপন [0-9]{4}করেন [0-9]+তবে কম ভুল হতে পারে, যদিও আপনাকে এখনও শেষ ফলাফলের ধরণের (str vs int?) ব্যবহার করতে হবে with
জানু কিউ পেবলিক

এটি বিষয়টির স্পষ্ট কাট উত্তর answer ধন্যবাদ।
বিকাশভাট

19

pathজাজানো ২.০ এ কেবল নতুন, যা কয়েক সপ্তাহ আগে প্রকাশিত হয়েছিল। বেশিরভাগ টিউটোরিয়াল নতুন সিনট্যাক্সের জন্য আপডেট করা হত না।

এটি অবশ্যই কাজগুলি করার সহজ উপায় বলে মনে করা হয়েছিল; আমি এটি বলব না যে ইউআরএল যদিও আরও শক্তিশালী তবে আপনার যে কোনও ফর্ম্যাটে নিদর্শনগুলি প্রকাশ করতে সক্ষম হওয়া উচিত।


9

রেগুলার এক্সপ্রেশনের সাথে কাজ বলে মনে হচ্ছে না path()নিম্নলিখিত আর্গুমেন্ট সহ ফাংশন: path(r'^$', views.index, name="index")

এটি এর মতো হওয়া উচিত : path('', views.index, name="index").

একটি নিয়মিত এক্সপ্রেশন প্রবেশ করতে 1 ম আর্গুমেন্ট অবশ্যই ফাঁকা থাকতে হবে।


2
হ্যাঁ, আমি মনে করি যে আরইএস ব্যবহারের জন্য উপরে উল্লিখিত হিসাবে আপনার পরিবর্তে পুনরায়_পথ () ফাংশনটি ব্যবহার করতে হবে।
হিমশীতল কুকি

8

পাথটি জ্যাঙ্গো ২.০ এর একটি নতুন বৈশিষ্ট্য। এখানে ব্যাখ্যা করা হয়েছে: https://docs.djangoproject.com/en/2.0/releases/2.0/#whats- নতুন ২-০

আরও অজগর উপায়ের মতো দেখতে, এবং আপনি যে যুক্তিটি দেখেন তাতে নিয়মিত অভিব্যক্তিটি ব্যবহার না করতে সক্ষম করুন ... উদাহরণ হিসাবে আপনি () ফাংশনটি ue করতে পারেন।


2

ভি 2.0 থেকে অনেক ব্যবহারকারী পথ ব্যবহার করছেন তবে আমরা পাথ বা ইউআরএল উভয়ই ব্যবহার করতে পারি। উদাহরণস্বরূপ জাঙ্গোতে 2.1.1 ইউআরএল মাধ্যমে ফাংশনগুলিতে ম্যাপিং নিম্নরূপ করা যেতে পারে

from django.contrib import admin
from django.urls import path

from django.contrib.auth import login
from posts.views import post_home
from django.conf.urls import url

urlpatterns = [
    path('admin/', admin.site.urls),
    url(r'^posts/$', post_home, name='post_home'),

]

পোস্ট যেখানে অ্যাপ্লিকেশন এবং পোস্ট_হোম ভিউ.পাইয়ের একটি ফাংশন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.